예제 #1
0
    public bool CanMove(Vector2 position)
    {
        if (position.x < 0 || position.x >= dungeon.width || position.y < 0 || position.y >= dungeon.height)
        {
            return(false);
        }

        char c = dungeon.canvas[(int)position.x, (int)position.y];

        if (c == 'x' || c == 'o' || c == '{')
        {
            BaseVisual v = GetObject(position);
            if (v != null)
            {
                return(false);
            }

            if (player.position == position)
            {
                return(false);
            }

            return(true);
        }

        return(false);
    }
예제 #2
0
    private void Visual_EntityTick(BaseVisual visual)
    {
        //TODO make dynamic
        bool willMove = dungeon.random.Next(0, 3) >= 1; // 75%

        if (willMove)
        {
            bool    horizontal = dungeon.random.Next(0, 2) == 0;
            int     value      = dungeon.random.Next(-1, 2);
            Vector2 movement   = new Vector2(horizontal ? value : 0, horizontal ? 0 : value);

            if (CanMove(visual.position + movement))
            {
                SetEnemyPosition((EnemyVisual)visual, visual.position + movement);
            }
        }
    }
예제 #3
0
    public void MovePlayer(Vector2 movement)
    {
        Vector2 newPosition = player.position + movement;

        if (CanMove(newPosition))
        {
            SetPlayerPosition(newPosition);
            return;
        }

        // found something, check if it's an object
        BaseVisual obj = GetObject(newPosition);

        if (obj != null)
        {
            obj.Action();
        }
    }
예제 #4
0
    private void Player_EntityTick(BaseVisual visual)
    {
        switch (playerAction)
        {
        case Command.MoveUp:
            dungeonManager.MovePlayer(new Vector2(0, -1));
            break;

        case Command.MoveDown:
            dungeonManager.MovePlayer(new Vector2(0, 1));
            break;

        case Command.MoveLeft:
            dungeonManager.MovePlayer(new Vector2(-1, 0));
            break;

        case Command.MoveRight:
            dungeonManager.MovePlayer(new Vector2(1, 0));
            break;
        }
    }