void SetTimeToLengthTables(TweenPlugPath p, int subdivisions) { TweenPlugPathPoint prevP = _cachePoint1, currP = _cachePoint2; var ptCount = p.pathPointCount; float pathLen = 0; float incr = 1f / subdivisions; float[] timesTable = new float[subdivisions]; float[] lengthsTable = new float[subdivisions]; GetPoint(prevP, 0, p.wps, p); for (int i = 1; i < subdivisions + 1; ++i) { float perc = incr * i; GetPoint(currP, perc, p.wps, p); pathLen += TweenPlugPathPoint.Distance(currP, prevP, ptCount); prevP.Copy(currP, ptCount); timesTable[i - 1] = perc; lengthsTable[i - 1] = pathLen; } // Assign p.length = pathLen; p.timesTable = timesTable; p.lengthsTable = lengthsTable; }
// Linear exception: also sets waypoints lengths and doesn't set lengthsTable since it's useless void SetTimeToLengthTables(TweenPlugPath p, int subdivisions) { float pathLen = 0; int wpsLen = p.wps.Length; var ptCount = p.pathPointCount; var prevP = p.wps[0]; for (int i = 1; i < wpsLen; i++) { var currP = p.wps[i]; float dist = TweenPlugPathPoint.Distance(currP, prevP, ptCount); pathLen += dist; prevP = currP; } // Assign p.length = pathLen; p.lengthsTable = null; p.timesTable = null; }
void SetPathLength(TweenPlugPath p, int subdivisions) { TweenPlugPathPoint prevP = _cachePoint1, currP = _cachePoint2; var ptCount = p.pathPointCount; float pathLen = 0; float incr = 1f / subdivisions; GetPoint(prevP, 0, p.wps, p); for (int i = 1; i < subdivisions + 1; ++i) { float perc = incr * i; GetPoint(currP, perc, p.wps, p); pathLen += TweenPlugPathPoint.Distance(currP, prevP, ptCount); prevP.Copy(currP, ptCount); } // Assign p.length = pathLen; p.timesTable = null; p.lengthsTable = null; }