public AutonomousPathfinderMover(Player player) { TeleportPlayerToCenterOfCurrentTile(player); _lastTargetReached = new Input.AutonomousPathfinderMover.PathFinderInfo() { Direction = DirectionData.DegreesToDirectionData((int)player.ViewingAngle), Target = player.Position }; GetNextTarget(player); }
private PathFinderInfo AddBestTurnDirection(PathFinderInfo info, int[,] map) { var candidates = DirectionData.GetRightAndLeftInRandomOrder(_lastTargetReached.Direction).ToList(); candidates.Add(DirectionData.GetOppositeDirection(_lastTargetReached.Direction)); foreach (var directionCandidate in candidates) { var pointToTest = info.Target + directionCandidate.RelativePosition; var tileToTest = new Point((int)pointToTest.X, (int)pointToTest.Y); if (IsTileUnblocked(tileToTest, map)) { return(new PathFinderInfo() { Direction = directionCandidate, Target = info.Target }); } } throw new ArgumentException("Unable to find way out of tile: " + info.Target + " going direction " + info.Direction); }
float GetAmountToTurn(DirectionData currentDirection, DirectionData newDirection) { if (currentDirection == DirectionData.Up) { if (newDirection == DirectionData.Up) { return(0); } else if (newDirection == DirectionData.Left) { return(-90); } else if (newDirection == DirectionData.Right) { return(90); } else if (newDirection == DirectionData.Down) { return(180); } } else if (currentDirection == DirectionData.Down) { if (newDirection == DirectionData.Up) { return(180); } else if (newDirection == DirectionData.Left) { return(90); } else if (newDirection == DirectionData.Right) { return(-90); } else if (newDirection == DirectionData.Down) { return(0); } } else if (currentDirection == DirectionData.Right) { if (newDirection == DirectionData.Left) { return(180); } else if (newDirection == DirectionData.Down) { return(90); } else if (newDirection == DirectionData.Up) { return(-90); } else if (newDirection == DirectionData.Right) { return(0); } } else //(currentDirection == DirectionData.Left) { if (newDirection == DirectionData.Left) { return(0); } else if (newDirection == DirectionData.Down) { return(-90); } else if (newDirection == DirectionData.Up) { return(90); } else { return(180); //right } } //WUT? always returns alue //OH WELL for now: return(0); }