internal void SetWaypointsLengths(Path p, int subdivisions) { int length = p.wps.Length; float[] numArray = new float[length]; numArray[0] = 0f; DG.Tweening.Plugins.Core.PathCore.LinearDecoder.ControlPoint[] controlPoints = new DG.Tweening.Plugins.Core.PathCore.LinearDecoder.ControlPoint[2]; Vector3[] wps = new Vector3[2]; for (int i = 1; i < length; i++) { controlPoints[0].a = (i == 1) ? p.controlPoints[0].a : p.wps[i - 2]; wps[0] = p.wps[i - 1]; wps[1] = p.wps[i]; controlPoints[1].a = (i == (length - 1)) ? p.controlPoints[1].a : p.wps[i + 1]; float num3 = 0f; float num4 = 1f / ((float)subdivisions); Vector3 b = this.GetPoint(0f, wps, p, controlPoints); for (int j = 1; j < (subdivisions + 1); j++) { float perc = num4 * j; Vector3 a = this.GetPoint(perc, wps, p, controlPoints); num3 += Vector3.Distance(a, b); b = a; } numArray[i] = num3; } p.wpLengths = numArray; }
public Path CloneIncremental(int loopIncrement) { if (this._incrementalClone != null) { if (this._incrementalIndex == loopIncrement) { return(this._incrementalClone); } this._incrementalClone.Destroy(); } int length = this.wps.Length; Vector3 vector = this.wps[length - 1] - this.wps[0]; Vector3[] vectorArray = new Vector3[this.wps.Length]; for (int i = 0; i < length; i++) { vectorArray[i] = this.wps[i] + (vector * loopIncrement); } int num2 = this.controlPoints.Length; DG.Tweening.Plugins.Core.PathCore.LinearDecoder.ControlPoint[] pointArray = new DG.Tweening.Plugins.Core.PathCore.LinearDecoder.ControlPoint[num2]; for (int j = 0; j < num2; j++) { pointArray[j] = this.controlPoints[j] + ((vector * loopIncrement)); } Vector3[] vectorArray2 = null; if (this.nonLinearDrawWps != null) { int num5 = this.nonLinearDrawWps.Length; vectorArray2 = new Vector3[num5]; for (int k = 0; k < num5; k++) { vectorArray2[k] = this.nonLinearDrawWps[k] + (vector * loopIncrement); } } this._incrementalClone = new Path(); this._incrementalIndex = loopIncrement; this._incrementalClone.type = this.type; this._incrementalClone.subdivisionsXSegment = this.subdivisionsXSegment; this._incrementalClone.subdivisions = this.subdivisions; this._incrementalClone.wps = vectorArray; this._incrementalClone.controlPoints = pointArray; if (DOTween.isUnityEditor) { DOTween.GizmosDelegates.Add(new TweenCallback(this._incrementalClone.Draw)); } this._incrementalClone.length = this.length; this._incrementalClone.wpLengths = this.wpLengths; this._incrementalClone.timesTable = this.timesTable; this._incrementalClone.lengthsTable = this.lengthsTable; this._incrementalClone._decoder = this._decoder; this._incrementalClone.nonLinearDrawWps = vectorArray2; this._incrementalClone.targetPosition = this.targetPosition; this._incrementalClone.lookAtPosition = this.lookAtPosition; this._incrementalClone.isFinalized = true; return(this._incrementalClone); }