private void CalculateLengthsInRange(int startIndex, int count) { int stopIndex = startIndex + count; if (startIndex == 0) { _lengthBuffer[0] = 0; startIndex++; } for (int i = startIndex; i < stopIndex; i++) { _lengthBuffer[i] = _lengthBuffer[i - 1] + CCVector2.Distance(_geometryBuffer[i - 1], _geometryBuffer[i]); } }
/// <summary> /// Appends a list of points to the end of the path. /// </summary> /// <param name="points">A list of points.</param> public void AddPath(IList <CCVector2> points) { if (points.Count == 0) { return; } var lastPoint = (_geometryIndex > 0) ? _geometryBuffer[_geometryIndex - 1] : new CCVector2(float.NaN, float.NaN); CheckBufferFreeSpace(points.Count); if (points[0] != lastPoint) { if (_calculateLengths) { _lengthBuffer[_geometryIndex] = (_geometryIndex == 0) ? 0 : _lengthBuffer[_geometryIndex - 1] + CCVector2.Distance(_geometryBuffer[_geometryIndex - 1], points[0]); } _geometryBuffer[_geometryIndex++] = points[0]; } int baseIndex = _geometryIndex; for (int i = 1, n = points.Count; i < n; i++) { var point = points[i]; if (point != lastPoint) { _geometryBuffer[_geometryIndex++] = point; } lastPoint = point; } if (_calculateLengths) { CalculateLengthsInRange(baseIndex, _geometryIndex - baseIndex); } }
/// <summary> /// Appends a point to the end of the path. /// </summary> /// <param name="point">A point.</param> public void AddPoint(CCVector2 point) { CheckBufferFreeSpace(1); if (!LastPointEqual(point)) { if (_calculateLengths) { _lengthBuffer[_geometryIndex] = (_geometryIndex == 0) ? 0 : _lengthBuffer[_geometryIndex - 1] + CCVector2.Distance(_geometryBuffer[_geometryIndex - 1], point); } _geometryBuffer[_geometryIndex++] = point; } }