Esempio n. 1
0
        private List <Node> GetNeighbors(Node node)
        {
            List <Node> neighbors = new List <Node>();

            foreach (Direction direction in _directions)
            {
                int  destinationX = node.X;
                int  destinationY = node.Y;
                bool isOnGround   = node.IsOnGround;
                bool isSurfing    = node.IsSurfing;

                direction.ApplyToCoordinates(ref destinationX, ref destinationY);

                Map.MoveResult result = _client.Map.CanMove(direction, destinationX, destinationY, isOnGround, isSurfing, _client.CanUseCut, _client.CanUseSmashRock);
                if (_client.Map.ApplyMovement(direction, result, ref destinationX, ref destinationY, ref isOnGround, ref isSurfing))
                {
                    if (result == Map.MoveResult.Icing)
                    {
                        _client.Map.ApplyCompleteIceMovement(direction, ref destinationX, ref destinationY, ref isOnGround);
                    }
                    else if (result == Map.MoveResult.Sliding)
                    {
                        _client.Map.ApplyCompleteSliderMovement(ref destinationX, ref destinationY, ref isOnGround);
                    }
                    neighbors.Add(new Node(destinationX, destinationY, isOnGround, isSurfing, direction));
                }
            }

            if (!node.IsSurfing && _hasSurfAbility && _client.Map.CanSurf(node.X, node.Y, node.IsOnGround))
            {
                neighbors.Add(new Node(node.X, node.Y, node.IsOnGround, true));
            }

            return(neighbors);
        }
Esempio n. 2
0
 public bool MoveToSameCell()
 {
     Map.MoveResult result = _client.Map.CanMove(Direction.Right, _client.PlayerX + 1, _client.PlayerY, _client.IsSurfing, _client.Npcs);
     if (result == Map.MoveResult.Success || result == Map.MoveResult.NoLongerSurfing)
     {
         _client.Move(Direction.Right);
         _client.Move(Direction.Left);
         return(true);
     }
     result = _client.Map.CanMove(Direction.Left, _client.PlayerX - 1, _client.PlayerY, _client.IsSurfing, _client.Npcs);
     if (result == Map.MoveResult.Success || result == Map.MoveResult.NoLongerSurfing)
     {
         _client.Move(Direction.Left);
         _client.Move(Direction.Right);
         return(true);
     }
     result = _client.Map.CanMove(Direction.Down, _client.PlayerX, _client.PlayerY + 1, _client.IsSurfing, _client.Npcs);
     if (result == Map.MoveResult.Success || result == Map.MoveResult.NoLongerSurfing)
     {
         _client.Move(Direction.Down);
         _client.Move(Direction.Up);
         return(true);
     }
     result = _client.Map.CanMove(Direction.Up, _client.PlayerX, _client.PlayerY - 1, _client.IsSurfing, _client.Npcs);
     if (result == Map.MoveResult.Success || result == Map.MoveResult.NoLongerSurfing)
     {
         _client.Move(Direction.Up);
         _client.Move(Direction.Down);
         return(true);
     }
     return(false);
 }
Esempio n. 3
0
        private bool ApplyMovement(Direction direction)
        {
            int destinationX = PlayerX;
            int destinationY = PlayerY;

            switch (direction)
            {
            case Direction.Up:
                destinationY--;
                break;

            case Direction.Down:
                destinationY++;
                break;

            case Direction.Left:
                destinationX--;
                break;

            case Direction.Right:
                destinationX++;
                break;
            }

            Map.MoveResult result    = Map.CanMove(direction, destinationX, destinationY, IsSurfing, Npcs);
            bool           isSuccess = false;

            switch (result)
            {
            case Map.MoveResult.Success:
                isSuccess = true;
                break;

            case Map.MoveResult.Jump:
                isSuccess     = true;
                destinationY += 1;
                break;

            case Map.MoveResult.NoLongerSurfing:
                isSuccess = true;
                IsSurfing = false;
                break;
            }

            if (isSuccess)
            {
                PlayerX = destinationX;
                PlayerY = destinationY;
                PositionUpdated?.Invoke(MapName, PlayerX, PlayerY);
            }

            return(isSuccess);
        }
Esempio n. 4
0
        private List <Node> GetNeighbors(Node node)
        {
            List <Node> neighbors = new List <Node>();

            Map.MoveResult result = _client.Map.CanMove(Direction.Up, node.X, node.Y - 1, node.IsSurfing, _client.Npcs);
            if (result == Map.MoveResult.Success || result == Map.MoveResult.NoLongerSurfing)
            {
                bool surfing = (result == Map.MoveResult.NoLongerSurfing ? false : node.IsSurfing);
                neighbors.Add(new Node(node.X, node.Y - 1, surfing, Direction.Up));
            }

            result = _client.Map.CanMove(Direction.Down, node.X, node.Y + 1, node.IsSurfing, _client.Npcs);
            if (result == Map.MoveResult.Success || result == Map.MoveResult.NoLongerSurfing)
            {
                bool surfing = (result == Map.MoveResult.NoLongerSurfing ? false : node.IsSurfing);
                neighbors.Add(new Node(node.X, node.Y + 1, surfing, Direction.Down));
            }
            else if (result == Map.MoveResult.Jump)
            {
                neighbors.Add(new Node(node.X, node.Y + 2, node.IsSurfing, Direction.Down));
            }

            result = _client.Map.CanMove(Direction.Left, node.X - 1, node.Y, node.IsSurfing, _client.Npcs);
            if (result == Map.MoveResult.Success || result == Map.MoveResult.NoLongerSurfing)
            {
                bool surfing = (result == Map.MoveResult.NoLongerSurfing ? false : node.IsSurfing);
                neighbors.Add(new Node(node.X - 1, node.Y, surfing, Direction.Left));
            }
            else if (result == Map.MoveResult.Jump)
            {
                neighbors.Add(new Node(node.X - 2, node.Y, node.IsSurfing, Direction.Left));
            }

            result = _client.Map.CanMove(Direction.Right, node.X + 1, node.Y, node.IsSurfing, _client.Npcs);
            if (result == Map.MoveResult.Success || result == Map.MoveResult.NoLongerSurfing)
            {
                bool surfing = (result == Map.MoveResult.NoLongerSurfing ? false : node.IsSurfing);
                neighbors.Add(new Node(node.X + 1, node.Y, surfing, Direction.Right));
            }
            else if (result == Map.MoveResult.Jump)
            {
                neighbors.Add(new Node(node.X + 2, node.Y, node.IsSurfing, Direction.Right));
            }

            /*if (!node.IsSurfing && _hasSurfAbility && _client.Map.CanSurf(node.X, node.Y, node.IsOnGround))
             * {
             *  neighbors.Add(new Node(node.X, node.Y, node.IsOnGround, true));
             * } TODO SURF*/

            return(neighbors);
        }
Esempio n. 5
0
        public bool MoveToSameCell()
        {
            foreach (Direction direction in _directions)
            {
                int destinationX = _client.PlayerX;
                int destinationY = _client.PlayerY;

                direction.ApplyToCoordinates(ref destinationX, ref destinationY);

                Map.MoveResult result = _client.Map.CanMove(direction, destinationX, destinationY, _client.IsOnGround, _client.IsSurfing, _client.CanUseCut, _client.CanUseSmashRock);
                if (result == Map.MoveResult.Success || result == Map.MoveResult.OnGround || result == Map.MoveResult.NoLongerOnGround)
                {
                    _client.Move(direction);
                    _client.Move(direction.GetOpposite());
                    return(true);
                }
            }
            return(false);
        }