public bool GetBestPath(GameObject obj, GameTime gameTime, AStarGraph graph) { Stack<AStarNode> path = new Stack<AStarNode>(); Transform2DComponent transformComponent = (Transform2DComponent)obj.GetComponent(ComponentType.Transform2D); AStarComponent aStarComponent = (AStarComponent)obj.GetComponent(ComponentType.AStar); if (transformComponent == null || aStarComponent == null) { return false; } AStarNode entityNode = graph.GetClosestNode(transformComponent.GetTranslation()); aStarComponent.CurrentNode = entityNode; AStarNode goalNode; if (aStarComponent.Follow) { GameObject entity = aStarComponent.EntityToFollow; Transform2DComponent entityTransformComponent = (Transform2DComponent)entity.GetComponent(ComponentType.Transform2D); aStarComponent.EntityToFollowPosBuffer = entityTransformComponent.GetTranslation(); goalNode = graph.GetClosestNode(aStarComponent.EntityToFollowPosBuffer); } else { goalNode = graph.GetClosestNode(aStarComponent.GoalPosition); } this.resolvePath(aStarComponent, entityNode, goalNode, graph); return true; }