Advertisement
Guest User

Interpolate manager

a guest
Mar 1st, 2017
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.29 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4.  
  5. // made by Erik Säll
  6. // free to use CC0
  7.  
  8. public static class InterpolateManager {
  9.     /// <param name="p_time">from 0f to 1f</param>
  10.     public static float Linear(float p_start, float p_target, float p_time)
  11.     {
  12.         return (p_start * (1f - p_time)) + (p_target * p_time);
  13.     }
  14.  
  15.     public static float Logarithmic(float p_start, float p_target, float p_time, float p_base)
  16.     {
  17.         float scale = p_time * p_base;
  18.  
  19.         // Logarithmic functions always have the root 1
  20.         // so to start at 1 we do
  21.         // (base * k) + 1 = base
  22.         // which gives us
  23.         // k = (base - 1) / base;
  24.  
  25.         float k = (p_base - 1) / p_base;
  26.         float t = (scale * k) + 1;
  27.  
  28.         return Linear(p_start, p_target, Mathf.Log(t, p_base));
  29.     }
  30.  
  31.     public static float Sqrt(float p_start, float p_target, float p_time)
  32.     {
  33.         return Linear(p_start, p_target, Mathf.Sqrt(p_time));
  34.     }
  35.     public static float Exponential(float p_start, float p_target, float p_time, float p_power)
  36.     {
  37.         return Linear(p_start, p_target, Mathf.Pow(p_time, p_power));
  38.     }
  39.  
  40.     /// <summary>
  41.     ///
  42.     /// </summary>
  43.     /// <param name="p_time">from 0f to 1f</param>
  44.     public static float Sine(float p_start, float p_target, float p_time)
  45.     {
  46.         float pi = Mathf.PI;
  47.         float t = p_time * pi;
  48.  
  49.         float sin = (Mathf.Sin((p_time * pi) - (pi / 2)) + 1) / 2;
  50.  
  51.         return Linear(p_start, p_target, sin);
  52.     }
  53.  
  54.     /// <summary>Bouncy interpolation which overshoots the target</summary>
  55.     /// <param name="p_time">from 0f to 1f</param>
  56.     /// <param name="p_peak">the placement of the peak between 0f to 1f</param>
  57.     /// <param name="p_magnitude">how much it overshoots the target. 0.5 is 50%</param>
  58.     public static float Overshoot(float p_start, float p_target, float p_time, float p_peak, float p_magnitude)
  59.     {
  60.         float b = Linear(p_start, p_target, p_time);
  61.        
  62.         if (p_time < p_peak) {
  63.             float t = p_time / p_peak;
  64.             b += Sine(0, p_magnitude, t);
  65.         }
  66.         else {
  67.             float t = (p_time - p_peak) / (1 - p_peak);
  68.             b += Sine(p_magnitude, 0, t);
  69.         }
  70.  
  71.         return b;
  72.     }
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement