コード例 #1
0
ファイル: TileNode.cs プロジェクト: MK4H/MHUrho
        public override IEnumerable <Waypoint> GetWaypoints(NodeDistCalculator nodeDist)
        {
            if (PreviousNode.NodeType == NodeType.Tile && PreviousNode.GetMovementTypeToNeighbour(this) == MovementType.Linear)
            {
                var   borderNode = new TempNode(GetEdgePosition((ITileNode)PreviousNode), Map);
                float totalTime  = Time - PreviousNode.Time;

                if (!nodeDist.GetTime(PreviousNode, borderNode, MovementType.Linear, out float firstTime))
                {
                    throw new ArgumentException($"Wrong {nameof(nodeDist)} implementation, does not give the same result on path building.");
                }
                return(new[]
                {
                    new Waypoint(borderNode, firstTime, MovementType.Linear),
                    new Waypoint(this, totalTime - firstTime, MovementType.Linear)
                });
            }
            else
            {
                return(new[] { new Waypoint(this, Time - PreviousNode.Time, PreviousNode.GetMovementTypeToNeighbour(this)) });
            }
        }
コード例 #2
0
        Path StartIsFinish(Node target, Vector3 source)
        {
            TempNode sourceNode = new TempNode(source, Map);
            float    time;

            //Check for total equality, which would probably break the user code in getTime
            if (sourceNode.Position == target.Position)
            {
                time = 0.0f;
            }
            else if (!distCalc.GetTime(sourceNode, target, MovementType.Linear, out time))
            {
                return(null);
            }

            List <Waypoint> waypoints = new List <Waypoint> {
                new Waypoint(sourceNode, 0.0f, MovementType.None),
                new Waypoint(target, time, MovementType.Linear)
            };

            return(Path.CreateFrom(waypoints, Map));
        }