You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.7 KiB
C#
53 lines
1.7 KiB
C#
using UnityEngine;
|
|
using System.Collections;
|
|
|
|
namespace Autohand {
|
|
[DefaultExecutionOrder(-100)]
|
|
public class InterpolationController : MonoBehaviour {
|
|
private float[] m_lastFixedUpdateTimes;
|
|
private int m_newTimeIndex;
|
|
|
|
private static float m_interpolationFactor;
|
|
public static float InterpolationFactor {
|
|
get { return m_interpolationFactor; }
|
|
}
|
|
|
|
public static InterpolationController _Instance;
|
|
public static InterpolationController Instance {
|
|
get {
|
|
if(_Instance == null && !AutoHandExtensions.CanFindObjectOfType<InterpolationController>()) {
|
|
_Instance = new GameObject() { name = "InterpolationTracker" }.AddComponent<InterpolationController>();
|
|
_Instance.transform.parent = AutoHandExtensions.transformParent;
|
|
}
|
|
|
|
return _Instance;
|
|
}
|
|
}
|
|
|
|
public void Start() {
|
|
m_lastFixedUpdateTimes = new float[2];
|
|
m_newTimeIndex = 0;
|
|
}
|
|
|
|
public void FixedUpdate() {
|
|
m_newTimeIndex = OldTimeIndex();
|
|
m_lastFixedUpdateTimes[m_newTimeIndex] = Time.fixedTime;
|
|
}
|
|
|
|
public void Update() {
|
|
float newerTime = m_lastFixedUpdateTimes[m_newTimeIndex];
|
|
float olderTime = m_lastFixedUpdateTimes[OldTimeIndex()];
|
|
|
|
if(newerTime != olderTime) {
|
|
m_interpolationFactor = (Time.time - newerTime) / (newerTime - olderTime);
|
|
}
|
|
else {
|
|
m_interpolationFactor = 1;
|
|
}
|
|
}
|
|
|
|
private int OldTimeIndex() {
|
|
return (m_newTimeIndex == 0 ? 1 : 0);
|
|
}
|
|
}
|
|
} |