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);
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 |