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#
		
	
| 
								 
											1 year ago
										 
									 | 
							
								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);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |