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)) }); } }
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)); }