163 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			163 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| namespace Fusion.Addons.AnimationController
 | |
| {
 | |
| 	using System;
 | |
| 	using UnityEngine;
 | |
| 
 | |
| 	public static partial class AnimationUtility
 | |
| 	{
 | |
| 		// PUBLIC METHODS
 | |
| 
 | |
| 		public static float InterpolateWeight(float from, float to, float alpha)
 | |
| 		{
 | |
| 			float distance = to - from;
 | |
| 
 | |
| 			if (distance == 1.0f || distance == -1.0f)
 | |
| 				return alpha < 0.5f ? from : to;
 | |
| 
 | |
| 			return from + distance * alpha;
 | |
| 		}
 | |
| 
 | |
| 		public static float InterpolateTime(float from, float to, float length, float alpha)
 | |
| 		{
 | |
| 			float time;
 | |
| 
 | |
| 			if (to >= from)
 | |
| 			{
 | |
| 				time = Mathf.Lerp(from, to, alpha);
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				time = Mathf.Lerp(from, to + length, alpha);
 | |
| 				if (time > length)
 | |
| 				{
 | |
| 					time -= length;
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 			return time;
 | |
| 		}
 | |
| 
 | |
| 		public static void LogInfo(SimulationBehaviour behaviour, params object[] messages)
 | |
| 		{
 | |
| 			Log(behaviour, default, EAnimationLogType.Info, messages);
 | |
| 		}
 | |
| 
 | |
| 		public static void LogWarning(SimulationBehaviour behaviour, params object[] messages)
 | |
| 		{
 | |
| 			Log(behaviour, default, EAnimationLogType.Warning, messages);
 | |
| 		}
 | |
| 
 | |
| 		public static void LogError(SimulationBehaviour behaviour, params object[] messages)
 | |
| 		{
 | |
| 			Log(behaviour, default, EAnimationLogType.Error, messages);
 | |
| 		}
 | |
| 
 | |
| 		public static void Log(SimulationBehaviour behaviour, string logGroup, EAnimationLogType logType, params object[] messages)
 | |
| 		{
 | |
| 			System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
 | |
| 
 | |
| 			NetworkRunner runner = behaviour.Runner;
 | |
| 
 | |
| #if UNITY_EDITOR
 | |
| 			if (Time.frameCount % 2 == 0)
 | |
| 			{
 | |
| 				stringBuilder.Append($"<color=#19A7CE>[{Time.frameCount}]</color>");
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				stringBuilder.Append($"<color=#FC3C3C>[{Time.frameCount}]</color>");
 | |
| 			}
 | |
| 
 | |
| 			if (runner != null)
 | |
| 			{
 | |
| 				bool isInFixedUpdate = runner.Stage != default;
 | |
| 				bool isInForwardTick = runner.IsForward == true;
 | |
| 
 | |
| 				if (isInFixedUpdate == true)
 | |
| 				{
 | |
| 					if (isInForwardTick == true)
 | |
| 					{
 | |
| 						stringBuilder.Append($"<color=#FFFF00>[{runner.Tick.Raw}]</color>");
 | |
| 					}
 | |
| 					else
 | |
| 					{
 | |
| 						stringBuilder.Append($"<color=#FF0000>[{runner.Tick.Raw}]</color>");
 | |
| 					}
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					stringBuilder.Append($"<color=#00FF00>[{runner.Tick.Raw}]</color>");
 | |
| 				}
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				stringBuilder.Append($"[--]");
 | |
| 			}
 | |
| #else
 | |
| 			stringBuilder.Append($"[{Time.frameCount}]");
 | |
| 
 | |
| 			if (runner != null)
 | |
| 			{
 | |
| 				bool isInFixedUpdate = runner.Stage != default;
 | |
| 				bool isInForwardTick = runner.IsForward == true;
 | |
| 
 | |
| 				if (isInFixedUpdate == true)
 | |
| 				{
 | |
| 					if (isInForwardTick == true)
 | |
| 					{
 | |
| 						stringBuilder.Append($"[FF]");
 | |
| 					}
 | |
| 					else
 | |
| 					{
 | |
| 						stringBuilder.Append($"[FR]");
 | |
| 					}
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					stringBuilder.Append($"[RF]");
 | |
| 				}
 | |
| 
 | |
| 				stringBuilder.Append($"[{runner.Tick.Raw}]");
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				stringBuilder.Append($"[--]");
 | |
| 				stringBuilder.Append($"[--]");
 | |
| 			}
 | |
| #endif
 | |
| 
 | |
| 			if (string.IsNullOrEmpty(logGroup) == false)
 | |
| 			{
 | |
| 				stringBuilder.Append($"[{logGroup}]");
 | |
| 			}
 | |
| 
 | |
| 			stringBuilder.Append($"[{behaviour.name}]");
 | |
| 
 | |
| 			for (int i = 0; i < messages.Length; ++i)
 | |
| 			{
 | |
| 				object message = messages[i];
 | |
| 				if (message != null)
 | |
| 				{
 | |
| 					stringBuilder.Append($" ");
 | |
| 					stringBuilder.Append(message);
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 			switch (logType)
 | |
| 			{
 | |
| 				case EAnimationLogType.Info:
 | |
| 					UnityEngine.Debug.Log(stringBuilder.ToString(), behaviour);
 | |
| 					break;
 | |
| 				case EAnimationLogType.Warning:
 | |
| 					UnityEngine.Debug.LogWarning(stringBuilder.ToString(), behaviour);
 | |
| 					break;
 | |
| 				case EAnimationLogType.Error:
 | |
| 					UnityEngine.Debug.LogError(stringBuilder.ToString(), behaviour);
 | |
| 					break;
 | |
| 				default:
 | |
| 					throw new ArgumentOutOfRangeException(nameof(logType), logType, null);
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| }
 |