Esempio n. 1
0
        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]);
            }
        }
Esempio n. 2
0
        /// <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);
            }
        }
Esempio n. 3
0
        /// <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;
            }
        }