public TSVector2 GetPosition(FP time) { bool flag = this.ControlPoints.Count < 2; if (flag) { throw new Exception("You need at least 2 control points to calculate a position."); } bool closed = this.Closed; TSVector2 result; if (closed) { this.Add(this.ControlPoints[0]); this._deltaT = 1f / (float)(this.ControlPoints.Count - 1); int num = (int)((long)(time / this._deltaT)); int num2 = num - 1; bool flag2 = num2 < 0; if (flag2) { num2 += this.ControlPoints.Count - 1; } else { bool flag3 = num2 >= this.ControlPoints.Count - 1; if (flag3) { num2 -= this.ControlPoints.Count - 1; } } int num3 = num; bool flag4 = num3 < 0; if (flag4) { num3 += this.ControlPoints.Count - 1; } else { bool flag5 = num3 >= this.ControlPoints.Count - 1; if (flag5) { num3 -= this.ControlPoints.Count - 1; } } int num4 = num + 1; bool flag6 = num4 < 0; if (flag6) { num4 += this.ControlPoints.Count - 1; } else { bool flag7 = num4 >= this.ControlPoints.Count - 1; if (flag7) { num4 -= this.ControlPoints.Count - 1; } } int num5 = num + 2; bool flag8 = num5 < 0; if (flag8) { num5 += this.ControlPoints.Count - 1; } else { bool flag9 = num5 >= this.ControlPoints.Count - 1; if (flag9) { num5 -= this.ControlPoints.Count - 1; } } FP amount = (time - this._deltaT * num) / this._deltaT; result = TSVector2.CatmullRom(this.ControlPoints[num2], this.ControlPoints[num3], this.ControlPoints[num4], this.ControlPoints[num5], amount); this.RemoveAt(this.ControlPoints.Count - 1); } else { int num6 = (int)((long)(time / this._deltaT)); int num7 = num6 - 1; bool flag10 = num7 < 0; if (flag10) { num7 = 0; } else { bool flag11 = num7 >= this.ControlPoints.Count - 1; if (flag11) { num7 = this.ControlPoints.Count - 1; } } int num8 = num6; bool flag12 = num8 < 0; if (flag12) { num8 = 0; } else { bool flag13 = num8 >= this.ControlPoints.Count - 1; if (flag13) { num8 = this.ControlPoints.Count - 1; } } int num9 = num6 + 1; bool flag14 = num9 < 0; if (flag14) { num9 = 0; } else { bool flag15 = num9 >= this.ControlPoints.Count - 1; if (flag15) { num9 = this.ControlPoints.Count - 1; } } int num10 = num6 + 2; bool flag16 = num10 < 0; if (flag16) { num10 = 0; } else { bool flag17 = num10 >= this.ControlPoints.Count - 1; if (flag17) { num10 = this.ControlPoints.Count - 1; } } FP amount2 = (time - this._deltaT * num6) / this._deltaT; result = TSVector2.CatmullRom(this.ControlPoints[num7], this.ControlPoints[num8], this.ControlPoints[num9], this.ControlPoints[num10], amount2); } return(result); }
public TSVector2 GetPosition(FP time) { TSVector2 temp; if (ControlPoints.Count < 2) { throw new Exception("You need at least 2 control points to calculate a position."); } if (Closed) { Add(ControlPoints[0]); _deltaT = 1f / (ControlPoints.Count - 1); int p = (int)(time / _deltaT); // use a circular indexing system int p0 = p - 1; if (p0 < 0) { p0 = p0 + (ControlPoints.Count - 1); } else if (p0 >= ControlPoints.Count - 1) { p0 = p0 - (ControlPoints.Count - 1); } int p1 = p; if (p1 < 0) { p1 = p1 + (ControlPoints.Count - 1); } else if (p1 >= ControlPoints.Count - 1) { p1 = p1 - (ControlPoints.Count - 1); } int p2 = p + 1; if (p2 < 0) { p2 = p2 + (ControlPoints.Count - 1); } else if (p2 >= ControlPoints.Count - 1) { p2 = p2 - (ControlPoints.Count - 1); } int p3 = p + 2; if (p3 < 0) { p3 = p3 + (ControlPoints.Count - 1); } else if (p3 >= ControlPoints.Count - 1) { p3 = p3 - (ControlPoints.Count - 1); } // relative time FP lt = (time - _deltaT * p) / _deltaT; temp = TSVector2.CatmullRom(ControlPoints[p0], ControlPoints[p1], ControlPoints[p2], ControlPoints[p3], lt); RemoveAt(ControlPoints.Count - 1); } else { int p = (int)(time / _deltaT); // int p0 = p - 1; if (p0 < 0) { p0 = 0; } else if (p0 >= ControlPoints.Count - 1) { p0 = ControlPoints.Count - 1; } int p1 = p; if (p1 < 0) { p1 = 0; } else if (p1 >= ControlPoints.Count - 1) { p1 = ControlPoints.Count - 1; } int p2 = p + 1; if (p2 < 0) { p2 = 0; } else if (p2 >= ControlPoints.Count - 1) { p2 = ControlPoints.Count - 1; } int p3 = p + 2; if (p3 < 0) { p3 = 0; } else if (p3 >= ControlPoints.Count - 1) { p3 = ControlPoints.Count - 1; } // relative time FP lt = (time - _deltaT * p) / _deltaT; temp = TSVector2.CatmullRom(ControlPoints[p0], ControlPoints[p1], ControlPoints[p2], ControlPoints[p3], lt); } return(temp); }