コード例 #1
0
ファイル: Path.cs プロジェクト: sishui/Smart2DWaypoints
        public Vector3 GetPoint(WaypointsMover mover, float time)
        {
            if (IsCurved)
            {
                float fullLength     = BezierApproximation.GetLength(_moversParts[mover]);
                float remainedLength = fullLength * (time - 0.001f);
                for (int i = 0; i < _moversParts[mover].Count - 1; i++)
                {
                    Vector3 point1     = _moversParts[mover][i];
                    Vector3 point2     = _moversParts[mover][i + 1];
                    float   lineLength = Vector3.Distance(point1, point2);
                    if (lineLength < remainedLength)
                    {
                        remainedLength -= lineLength;
                    }
                    else
                    {
                        return(point1 + (point2 - point1).normalized * remainedLength);
                    }
                }

                throw new Exception("Get point error for time:" + time + ", remainedLength: " + remainedLength);
            }
            else
            {
                Vector3 point1         = _moversParts[mover][0];
                Vector3 point2         = _moversParts[mover][1];
                float   fullLength     = Vector3.Distance(point1, point2);
                float   remainedLength = fullLength * time;
                return(point1 + (point2 - point1).normalized * remainedLength);
            }
        }
コード例 #2
0
ファイル: Path.cs プロジェクト: sishui/Smart2DWaypoints
        public float GetLength(WaypointsMover mover, int fromInd, int toInd, bool isForwardDirection)
        {
            if (IsCurved)
            {
                Vector3 handle1 = isForwardDirection ? GetHandle1(mover, fromInd) : GetHandle2(mover, fromInd);
                Vector3 handle2 = isForwardDirection ? GetHandle2(mover, toInd) : GetHandle1(mover, toInd);
                return(BezierApproximation.GetLength(_capturedPositions[mover][fromInd], handle1,
                                                     _capturedPositions[mover][toInd], handle2, LinesCount));
            }

            return(Vector3.Distance(_capturedPositions[mover][fromInd], _capturedPositions[mover][toInd]));
        }
コード例 #3
0
ファイル: Path.cs プロジェクト: sishui/Smart2DWaypoints
        public Vector3 CapturePosition(WaypointsMover mover, int waypointIndex)
        {
            Transform      waypoint       = Waypoints[waypointIndex];
            RandomWaypoint randomWaypoint = waypoint.GetComponent <RandomWaypoint>();
            Vector3        position       = randomWaypoint == null
                ? waypoint.position
                : randomWaypoint.GenerateRandomPoint();

            if (!_capturedPositions.ContainsKey(mover))
            {
                _capturedPositions[mover] = new Dictionary <int, Vector3>();
            }

            _capturedPositions[mover][waypointIndex] = position;
            return(position);
        }
コード例 #4
0
ファイル: Path.cs プロジェクト: sishui/Smart2DWaypoints
        public void StartNextPart(WaypointsMover mover, int fromInd, int toInd, bool isForwardDirection)
        {
            Vector3 toPosition = CapturePosition(mover, toInd);

            if (IsCurved)
            {
                Vector3 handle1 = isForwardDirection ? GetHandle1(mover, fromInd) : GetHandle2(mover, fromInd);
                Vector3 handle2 = isForwardDirection ? GetHandle2(mover, toInd) : GetHandle1(mover, toInd);
                _moversParts[mover] = BezierApproximation.GetLines(_capturedPositions[mover][fromInd], handle1,
                                                                   toPosition, handle2, LinesCount);
            }
            else
            {
                _moversParts[mover] = new List <Vector3> {
                    _capturedPositions[mover][fromInd], toPosition
                };
            }

            ClearDestroyedMovers();
        }
コード例 #5
0
ファイル: Path.cs プロジェクト: sishui/Smart2DWaypoints
        private Vector3 GetHandle2(WaypointsMover mover, int ind)
        {
            Vector3 dPos = _capturedPositions[mover][ind] - Waypoints[ind].position;

            return(GetHandle2(ind) + dPos);
        }