コード例 #1
0
 public AutonomousPathfinderMover(Player player)
 {
     TeleportPlayerToCenterOfCurrentTile(player);
     _lastTargetReached = new Input.AutonomousPathfinderMover.PathFinderInfo()
     {
         Direction = DirectionData.DegreesToDirectionData((int)player.ViewingAngle),
         Target    = player.Position
     };
     GetNextTarget(player);
 }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }