public FlySmart(SpaceShip owner, Node target, float dist) : base(owner, target.AbsolutePosition) { map = new AStarMap(400, owner); Dist = dist; TargetNode = target; astar = new AStar(); //map.Print(-22,-22,22,22); Point p1 = map.GetCell(target.AbsolutePosition); Point p2 = map.GetCell(owner.AbsolutePosition); p1 = map.GetNearestFreePosition(p1); p2 = map.GetNearestFreePosition(p2); if (p1 == p2) { System.Console.WriteLine("start=end!"); } AStarMap.AStarNode2D GoalNode = new AStarMap.AStarNode2D(null, null, 0, p1.X, p1.Y, map); AStarMap.AStarNode2D StartNode = new AStarMap.AStarNode2D(null, null, 0, p2.X, p2.Y, map); StartNode.GoalNode = GoalNode; astar.FindPath(StartNode, GoalNode); if (astar.Solution.Count == 0) { System.Console.WriteLine("no solution! from " + p2 + " to " + p1); Done = true; } PrintSolution(astar.Solution); currentnode = 0; }
public override void Tick(float dtime) { base.Tick(dtime); if (Owner.Distance(TargetNode) < Dist) { Done = true; return; } Point p2 = map.GetCell(Owner.AbsolutePosition); for (int i = 0; i < astar.Solution.Count; ++i) { AStarMap.AStarNode2D node = (AStarMap.AStarNode2D)astar.Solution[i]; Point p1 = new Point(node.X, node.Y); if (p2 == p1) { if (i == astar.Solution.Count - 1) { Done = true; System.Console.WriteLine("arrived at last node"); } else if (i > currentnode - 1) { currentnode = i; System.Console.WriteLine("next node: " + ++currentnode); } } } }
public FlySmart(SpaceShip owner, Node target, float dist) : base(owner,target.AbsolutePosition) { map = new AStarMap(400, owner); Dist = dist; TargetNode = target; astar = new AStar(); //map.Print(-22,-22,22,22); Point p1 = map.GetCell(target.AbsolutePosition); Point p2 = map.GetCell(owner.AbsolutePosition); p1 = map.GetNearestFreePosition(p1); p2 = map.GetNearestFreePosition(p2); if (p1 == p2) System.Console.WriteLine("start=end!"); AStarMap.AStarNode2D GoalNode = new AStarMap.AStarNode2D(null, null, 0, p1.X, p1.Y, map); AStarMap.AStarNode2D StartNode = new AStarMap.AStarNode2D(null, null, 0, p2.X, p2.Y, map); StartNode.GoalNode = GoalNode; astar.FindPath(StartNode, GoalNode); if (astar.Solution.Count == 0) { System.Console.WriteLine("no solution! from " + p2 + " to " + p1); Done = true; } PrintSolution(astar.Solution); currentnode = 0; }