210 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			210 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			C#
		
	
	
	
| using System;
 | |
| using UnityEngine;
 | |
| 
 | |
| public static partial class SRMath
 | |
| {
 | |
|     public enum EaseType
 | |
|     {
 | |
|         Linear,
 | |
|         QuadEaseOut,
 | |
|         QuadEaseIn,
 | |
|         QuadEaseInOut,
 | |
|         QuadEaseOutIn,
 | |
|         ExpoEaseOut,
 | |
|         ExpoEaseIn,
 | |
|         ExpoEaseInOut,
 | |
|         ExpoEaseOutIn,
 | |
|         CubicEaseOut,
 | |
|         CubicEaseIn,
 | |
|         CubicEaseInOut,
 | |
|         CubicEaseOutIn,
 | |
|         QuartEaseOut,
 | |
|         QuartEaseIn,
 | |
|         QuartEaseInOut,
 | |
|         QuartEaseOutIn,
 | |
|         QuintEaseOut,
 | |
|         QuintEaseIn,
 | |
|         QuintEaseInOut,
 | |
|         QuintEaseOutIn,
 | |
|         CircEaseOut,
 | |
|         CircEaseIn,
 | |
|         CircEaseInOut,
 | |
|         CircEaseOutIn,
 | |
|         SineEaseOut,
 | |
|         SineEaseIn,
 | |
|         SineEaseInOut,
 | |
|         SineEaseOutIn,
 | |
|         ElasticEaseOut,
 | |
|         ElasticEaseIn,
 | |
|         ElasticEaseInOut,
 | |
|         ElasticEaseOutIn,
 | |
|         BounceEaseOut,
 | |
|         BounceEaseIn,
 | |
|         BounceEaseInOut,
 | |
|         BounceEaseOutIn,
 | |
|         BackEaseOut,
 | |
|         BackEaseIn,
 | |
|         BackEaseInOut,
 | |
|         BackEaseOutIn
 | |
|     }
 | |
| 
 | |
|     public static float Ease(float from, float to, float t, EaseType type)
 | |
|     {
 | |
|         switch (type)
 | |
|         {
 | |
|             case EaseType.Linear:
 | |
|                 return TweenFunctions.Linear(t, from, to, 1f);
 | |
|             case EaseType.QuadEaseOut:
 | |
|                 return TweenFunctions.QuadEaseOut(t, from, to, 1f);
 | |
|             case EaseType.QuadEaseIn:
 | |
|                 return TweenFunctions.QuadEaseIn(t, from, to, 1f);
 | |
|             case EaseType.QuadEaseInOut:
 | |
|                 return TweenFunctions.QuadEaseInOut(t, from, to, 1f);
 | |
|             case EaseType.QuadEaseOutIn:
 | |
|                 return TweenFunctions.QuadEaseOutIn(t, from, to, 1f);
 | |
|             case EaseType.ExpoEaseOut:
 | |
|                 return TweenFunctions.ExpoEaseOut(t, from, to, 1f);
 | |
|             case EaseType.ExpoEaseIn:
 | |
|                 return TweenFunctions.ExpoEaseIn(t, from, to, 1f);
 | |
|             case EaseType.ExpoEaseInOut:
 | |
|                 return TweenFunctions.ExpoEaseInOut(t, from, to, 1f);
 | |
|             case EaseType.ExpoEaseOutIn:
 | |
|                 return TweenFunctions.ExpoEaseOutIn(t, from, to, 1f);
 | |
|             case EaseType.CubicEaseOut:
 | |
|                 return TweenFunctions.CubicEaseOut(t, from, to, 1f);
 | |
|             case EaseType.CubicEaseIn:
 | |
|                 return TweenFunctions.CubicEaseIn(t, from, to, 1f);
 | |
|             case EaseType.CubicEaseInOut:
 | |
|                 return TweenFunctions.CubicEaseInOut(t, from, to, 1f);
 | |
|             case EaseType.CubicEaseOutIn:
 | |
|                 return TweenFunctions.CubicEaseOutIn(t, from, to, 1f);
 | |
|             case EaseType.QuartEaseOut:
 | |
|                 return TweenFunctions.QuartEaseOut(t, from, to, 1f);
 | |
|             case EaseType.QuartEaseIn:
 | |
|                 return TweenFunctions.QuartEaseIn(t, from, to, 1f);
 | |
|             case EaseType.QuartEaseInOut:
 | |
|                 return TweenFunctions.QuartEaseInOut(t, from, to, 1f);
 | |
|             case EaseType.QuartEaseOutIn:
 | |
|                 return TweenFunctions.QuartEaseOutIn(t, from, to, 1f);
 | |
|             case EaseType.QuintEaseOut:
 | |
|                 return TweenFunctions.QuintEaseOut(t, from, to, 1f);
 | |
|             case EaseType.QuintEaseIn:
 | |
|                 return TweenFunctions.QuintEaseIn(t, from, to, 1f);
 | |
|             case EaseType.QuintEaseInOut:
 | |
|                 return TweenFunctions.QuintEaseInOut(t, from, to, 1f);
 | |
|             case EaseType.QuintEaseOutIn:
 | |
|                 return TweenFunctions.QuintEaseOutIn(t, from, to, 1f);
 | |
|             case EaseType.CircEaseOut:
 | |
|                 return TweenFunctions.CircEaseOut(t, from, to, 1f);
 | |
|             case EaseType.CircEaseIn:
 | |
|                 return TweenFunctions.CircEaseIn(t, from, to, 1f);
 | |
|             case EaseType.CircEaseInOut:
 | |
|                 return TweenFunctions.CircEaseInOut(t, from, to, 1f);
 | |
|             case EaseType.CircEaseOutIn:
 | |
|                 return TweenFunctions.CircEaseOutIn(t, from, to, 1f);
 | |
|             case EaseType.SineEaseOut:
 | |
|                 return TweenFunctions.SineEaseOut(t, from, to, 1f);
 | |
|             case EaseType.SineEaseIn:
 | |
|                 return TweenFunctions.SineEaseIn(t, from, to, 1f);
 | |
|             case EaseType.SineEaseInOut:
 | |
|                 return TweenFunctions.SineEaseInOut(t, from, to, 1f);
 | |
|             case EaseType.SineEaseOutIn:
 | |
|                 return TweenFunctions.SineEaseOutIn(t, from, to, 1f);
 | |
|             case EaseType.ElasticEaseOut:
 | |
|                 return TweenFunctions.ElasticEaseOut(t, from, to, 1f);
 | |
|             case EaseType.ElasticEaseIn:
 | |
|                 return TweenFunctions.ElasticEaseIn(t, from, to, 1f);
 | |
|             case EaseType.ElasticEaseInOut:
 | |
|                 return TweenFunctions.ElasticEaseInOut(t, from, to, 1f);
 | |
|             case EaseType.ElasticEaseOutIn:
 | |
|                 return TweenFunctions.ElasticEaseOutIn(t, from, to, 1f);
 | |
|             case EaseType.BounceEaseOut:
 | |
|                 return TweenFunctions.BounceEaseOut(t, from, to, 1f);
 | |
|             case EaseType.BounceEaseIn:
 | |
|                 return TweenFunctions.BounceEaseIn(t, from, to, 1f);
 | |
|             case EaseType.BounceEaseInOut:
 | |
|                 return TweenFunctions.BounceEaseInOut(t, from, to, 1f);
 | |
|             case EaseType.BounceEaseOutIn:
 | |
|                 return TweenFunctions.BounceEaseOutIn(t, from, to, 1f);
 | |
|             case EaseType.BackEaseOut:
 | |
|                 return TweenFunctions.BackEaseOut(t, from, to, 1f);
 | |
|             case EaseType.BackEaseIn:
 | |
|                 return TweenFunctions.BackEaseIn(t, from, to, 1f);
 | |
|             case EaseType.BackEaseInOut:
 | |
|                 return TweenFunctions.BackEaseInOut(t, from, to, 1f);
 | |
|             case EaseType.BackEaseOutIn:
 | |
|                 return TweenFunctions.BackEaseOutIn(t, from, to, 1f);
 | |
|             default:
 | |
|                 throw new ArgumentOutOfRangeException("type");
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Calculate a framerate-independent value to lerp by
 | |
|     /// </summary>
 | |
|     /// <param name="strength"></param>
 | |
|     /// <param name="deltaTime"></param>
 | |
|     /// <returns></returns>
 | |
|     public static float SpringLerp(float strength, float deltaTime)
 | |
|     {
 | |
|         var ms = Mathf.RoundToInt(deltaTime*1000f);
 | |
|         var step = 0.001f*strength;
 | |
| 
 | |
|         var from = 0f;
 | |
|         var to = 1f;
 | |
| 
 | |
|         for (var i = 0; i < ms; i++)
 | |
|         {
 | |
|             from = Mathf.Lerp(from, to, step);
 | |
|         }
 | |
| 
 | |
|         return from;
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// A frame-rate independent way of doing Mathf.Lerp(from, to, Time.deltaTime * strength). Based on NGUIMath.SpringLerp
 | |
|     /// </summary>
 | |
|     /// <param name="from">Starting Value</param>
 | |
|     /// <param name="to">End Value</param>
 | |
|     /// <param name="strength">How fast the spring will complete</param>
 | |
|     /// <param name="deltaTime">Pass in Time.deltaTime or RealTime.deltaTime</param>
 | |
|     /// <returns>Interpolated value</returns>
 | |
|     public static float SpringLerp(float from, float to, float strength, float deltaTime)
 | |
|     {
 | |
|         return Mathf.Lerp(from, to, SpringLerp(strength, deltaTime));
 | |
|     }
 | |
| 
 | |
|     public static Vector3 SpringLerp(Vector3 from, Vector3 to, float strength, float deltaTime)
 | |
|     {
 | |
|         return Vector3.Lerp(from, to, SpringLerp(strength, deltaTime));
 | |
|     }
 | |
| 
 | |
|     public static Quaternion SpringLerp(Quaternion from, Quaternion to, float strength, float deltaTime)
 | |
|     {
 | |
|         return Quaternion.Slerp(from, to, SpringLerp(strength, deltaTime));
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Smoothly clamp value between 0 and max, smoothing between min and max
 | |
|     /// </summary>
 | |
|     /// <param name="value"></param>
 | |
|     /// <param name="min"></param>
 | |
|     /// <param name="max"></param>
 | |
|     /// <param name="easeType"></param>
 | |
|     /// <returns></returns>
 | |
|     public static float SmoothClamp(float value, float min, float max, float scrollMax,
 | |
|         EaseType easeType = EaseType.ExpoEaseOut)
 | |
|     {
 | |
|         if (value < min)
 | |
|         {
 | |
|             return value;
 | |
|         }
 | |
| 
 | |
|         var p = Mathf.Clamp01((value - min)/(scrollMax - min));
 | |
| 
 | |
|         Debug.Log(p);
 | |
| 
 | |
|         return Mathf.Clamp(min + Mathf.Lerp(value - min, max, Ease(0, 1f, p, easeType)), 0, max);
 | |
|     }
 | |
| }
 |