Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- // made by Erik Säll
- // free to use CC0
- public static class InterpolateManager {
- /// <param name="p_time">from 0f to 1f</param>
- public static float Linear(float p_start, float p_target, float p_time)
- {
- return (p_start * (1f - p_time)) + (p_target * p_time);
- }
- public static float Logarithmic(float p_start, float p_target, float p_time, float p_base)
- {
- float scale = p_time * p_base;
- // Logarithmic functions always have the root 1
- // so to start at 1 we do
- // (base * k) + 1 = base
- // which gives us
- // k = (base - 1) / base;
- float k = (p_base - 1) / p_base;
- float t = (scale * k) + 1;
- return Linear(p_start, p_target, Mathf.Log(t, p_base));
- }
- public static float Sqrt(float p_start, float p_target, float p_time)
- {
- return Linear(p_start, p_target, Mathf.Sqrt(p_time));
- }
- public static float Exponential(float p_start, float p_target, float p_time, float p_power)
- {
- return Linear(p_start, p_target, Mathf.Pow(p_time, p_power));
- }
- /// <summary>
- ///
- /// </summary>
- /// <param name="p_time">from 0f to 1f</param>
- public static float Sine(float p_start, float p_target, float p_time)
- {
- float pi = Mathf.PI;
- float t = p_time * pi;
- float sin = (Mathf.Sin((p_time * pi) - (pi / 2)) + 1) / 2;
- return Linear(p_start, p_target, sin);
- }
- /// <summary>Bouncy interpolation which overshoots the target</summary>
- /// <param name="p_time">from 0f to 1f</param>
- /// <param name="p_peak">the placement of the peak between 0f to 1f</param>
- /// <param name="p_magnitude">how much it overshoots the target. 0.5 is 50%</param>
- public static float Overshoot(float p_start, float p_target, float p_time, float p_peak, float p_magnitude)
- {
- float b = Linear(p_start, p_target, p_time);
- if (p_time < p_peak) {
- float t = p_time / p_peak;
- b += Sine(0, p_magnitude, t);
- }
- else {
- float t = (p_time - p_peak) / (1 - p_peak);
- b += Sine(p_magnitude, 0, t);
- }
- return b;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement