| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 | 
							- using System.Collections.Generic;
 
- using UnityEngine;
 
- namespace CombatLibrary.CombatLibrary.CombatCore.Utility
 
- {
 
-     public struct ACurve
 
-     {
 
-         public List<CurveInfo> CurveInfos;
 
-         public CurveType CurveType;
 
-         public ACurve(CurveInfo[] curveInfos)
 
-         {
 
-             CurveInfos = new List<CurveInfo>();
 
-             CurveInfos.AddRange(curveInfos);
 
-             CurveType = CurveType.HYT;
 
-         }
 
-         public float Evaluate(float t)
 
-         {
 
-             if (CurveInfos == null)
 
-             {
 
-                 return t;
 
-             }
 
-             if (CurveInfos.Count < 2)
 
-             {
 
-                 return t;
 
-             }
 
-             switch (CurveType)
 
-             {
 
-                 case CurveType.HYT:
 
-                     return HYT(t);
 
-                     break;
 
-                 case CurveType.BSL:
 
-                     return BSL(t);
 
-                     break;
 
-             }
 
-             return 0;
 
-         }
 
-         public Vector2 EvaluateForVector2(float t,float currTime)
 
-         {
 
-             if (CurveInfos == null)
 
-             {
 
-                 return new Vector2();
 
-             }
 
-             if (CurveInfos.Count < 2)
 
-             {
 
-                 return new Vector2();
 
-             }
 
-             switch (CurveType)
 
-             {
 
-                 // case CurveType.HYT:
 
-                 //     // return HYT(t);
 
-                 //     break;
 
-                 case CurveType.BSL:
 
-                     return BSLForVector2(t, currTime);
 
-                     break;
 
-             }
 
-             return new Vector2();
 
-         }
 
-         private Vector2 BSLForVector2(float t,float currTime)
 
-         {
 
-             CurveInfo c1 = default;
 
-             CurveInfo c2 = default;
 
-             for (int i = 0; i < CurveInfos.Count; i++)
 
-             {
 
-                 if (CurveInfos[i].BSLt > currTime)
 
-                 {
 
-                     int lindex = i - 1;
 
-                     if (lindex < 0)
 
-                     {
 
-                         CurveInfo endInfo = CurveInfos[i];
 
-                         Vector2 endPos = new Vector2((float)endInfo.t, (float)endInfo.v);
 
-                         return endPos;
 
-                     }
 
-                     c1 = CurveInfos[i - 1];
 
-                     c2 = CurveInfos[i];
 
-                     break;
 
-                 }
 
-             }
 
-             if (c2.t==0)
 
-             {
 
-                 CurveInfo endInfo = CurveInfos[^1];
 
-                 Vector2 endPos = new Vector2(endInfo.t, endInfo.v);
 
-                 return endPos;
 
-             }
 
-             Vector2 pos1 = new Vector2((float)c1.t, (float)c1.v);
 
-             Vector2 pos2 = new Vector2((float)c1.it, (float)c1.ot);
 
-             Vector2 pos4 = new Vector2((float)c2.t, (float)c2.v);
 
-             Vector2 pos3 = new Vector2((float)c2.it, (float)c2.ot);
 
-             // float v11 = (float) c1.t;
 
-             // float v12 = (float) c1.v;
 
-             // float t11 = (float) c1.it;
 
-             // float t12 = (float) c1.ot;
 
-             //
 
-             // float v21 = (float) c2.t;
 
-             // float v22 = (float) c2.v;
 
-             // float t21 = (float) c2.it;
 
-             // float t22 = (float) c2.ot;
 
-             Vector2 a = Vector2.Lerp(pos1, pos2, t);
 
-             Vector2 b = Vector2.Lerp(pos2, pos3, t);
 
-             Vector2 c = Vector2.Lerp(pos3, pos4, t);
 
-             Vector2 d = Vector2.Lerp(a, b, t);
 
-             Vector2 e = Vector2.Lerp(b, c, t);
 
-             Vector2 f = Vector2.Lerp(d, e, t);
 
-             return f;
 
-         }
 
-         private float BSL(float t)
 
-         {
 
-             CurveInfo c1 = default;
 
-             CurveInfo c2 = default;
 
-             for (int i = 0; i < CurveInfos.Count; i++)
 
-             {
 
-                 if (CurveInfos[i].t > t)
 
-                 {
 
-                     int lindex = i - 1;
 
-                     if (lindex < 0)
 
-                     {
 
-                         return (float)CurveInfos[i].v;
 
-                     }
 
-                     c1 = CurveInfos[i - 1];
 
-                     c2 = CurveInfos[i];
 
-                     break;
 
-                 }
 
-             }
 
-             if (c2.t == 0)
 
-             {
 
-                 return (float)CurveInfos[^1].v;
 
-             }
 
-             Vector2 pos1 = new Vector2((float)c1.t, (float)c1.v);
 
-             Vector2 pos2 = new Vector2((float)c1.it, (float)c1.ot);
 
-             Vector2 pos4 = new Vector2((float)c2.t, (float)c2.v);
 
-             Vector2 pos3 = new Vector2((float)c2.it, (float)c2.ot);
 
-             // float v11 = (float) c1.t;
 
-             // float v12 = (float) c1.v;
 
-             // float t11 = (float) c1.it;
 
-             // float t12 = (float) c1.ot;
 
-             //
 
-             // float v21 = (float) c2.t;
 
-             // float v22 = (float) c2.v;
 
-             // float t21 = (float) c2.it;
 
-             // float t22 = (float) c2.ot;
 
-             Vector2 a = Vector2.Lerp(pos1, pos2, t);
 
-             Vector2 b = Vector2.Lerp(pos2, pos3, t);
 
-             Vector2 c = Vector2.Lerp(pos3, pos4, t);
 
-             Vector2 d = Vector2.Lerp(a, b, t);
 
-             Vector2 e = Vector2.Lerp(b, c, t);
 
-             Vector2 f = Vector2.Lerp(d, e, t);
 
-             return f.y;
 
-         }
 
-         private float HYT(float t)
 
-         {
 
-             CurveInfo c1 = default;
 
-             CurveInfo c2 = default;
 
-             for (int i = 0; i < CurveInfos.Count; i++)
 
-             {
 
-                 if (CurveInfos[i].t > t)
 
-                 {
 
-                     int lindex = i - 1;
 
-                     if (lindex < 0)
 
-                     {
 
-                         return (float)CurveInfos[i].v;
 
-                     }
 
-                     c1 = CurveInfos[i - 1];
 
-                     c2 = CurveInfos[i];
 
-                     break;
 
-                 }
 
-             }
 
-             if (c2.t == 0)
 
-             {
 
-                 return (float)CurveInfos[^1].v;
 
-             }
 
-             float ct = (float)c2.t - c1.t;
 
-             t = (t - c1.t) / ct;
 
-             float ot = c1.ot * ct;
 
-             float it = c2.it * ct;
 
-             float t2 = t * t;
 
-             float t3 = t2 * t;
 
-             float a = (2 * t3 - 3 * t2 + 1);
 
-             float b = t3 - 2 * t2 + t;
 
-             float c = t3 - t2;
 
-             float d = -2 * t3 + 3 * t2;
 
-             return a * c1.v + b * ot + c * it + d * c2.v;
 
-         }
 
-     }
 
- }
 
 
  |