Exemplo n.º 1
0
    /// <summary>
    /// 通路にいるときの移動
    /// </summary>
    void Road_Move()
    {
        var map_layer       = Dungeon_Manager.Instance.map_layer_2D;
        var enemy_direction = enemy_object.GetComponent <Enemy>().direction;
        var enemy_position  = new Vector2Int();
        // エネミーのx座標
        var enemy_x = enemy_object.transform.position.x;
        // エネミーのy座標
        var enemy_y = enemy_object.transform.position.y;

        switch (enemy_direction)
        {
        // 上方向への移動
        case eDirection.Up:
            if (Actor_Action.Move_Check(map_layer.Get(enemy_x, enemy_y),
                                        map_layer.Get(enemy_x, enemy_y + Define_Value.MOVE_VAULE)))
            {
                enemy_position.y += Define_Value.MOVE_VAULE;
            }
            else
            {
                if (Actor_Action.Move_Check(map_layer.Get(enemy_x, enemy_y),
                                            map_layer.Get(enemy_x - Define_Value.MOVE_VAULE, enemy_y)))
                {
                    enemy_direction   = eDirection.Right;
                    enemy_position.x -= Define_Value.MOVE_VAULE;
                }
                else if (Actor_Action.Move_Check(map_layer.Get(enemy_x, enemy_y),
                                                 map_layer.Get(enemy_x + Define_Value.MOVE_VAULE, enemy_y)))
                {
                    enemy_direction   = eDirection.Left;
                    enemy_position.x += Define_Value.MOVE_VAULE;
                }
            }
            break;

        // 右方向への移動
        case eDirection.Right:
            if (Actor_Action.Move_Check(map_layer.Get(enemy_x, enemy_y),
                                        map_layer.Get(enemy_x + Define_Value.MOVE_VAULE, enemy_y)))
            {
                enemy_position.x += Define_Value.MOVE_VAULE;
            }
            else
            {
                if (Actor_Action.Move_Check(map_layer.Get(enemy_x, enemy_y),
                                            map_layer.Get(enemy_x, enemy_y - Define_Value.MOVE_VAULE)))
                {
                    enemy_direction   = eDirection.Right;
                    enemy_position.y -= Define_Value.MOVE_VAULE;
                }
                else if (Actor_Action.Move_Check(map_layer.Get(enemy_x, enemy_y),
                                                 map_layer.Get(enemy_x, enemy_y + Define_Value.MOVE_VAULE)))
                {
                    enemy_direction   = eDirection.Left;
                    enemy_position.y += Define_Value.MOVE_VAULE;
                }
            }
            break;

        // 下方向への移動
        case eDirection.Down:
            if (Actor_Action.Move_Check(map_layer.Get(enemy_x, enemy_y),
                                        map_layer.Get(enemy_x, enemy_y - Define_Value.MOVE_VAULE)))
            {
                enemy_position.y -= Define_Value.MOVE_VAULE;
            }
            else
            {
                if (Actor_Action.Move_Check(map_layer.Get(enemy_x, enemy_y),
                                            map_layer.Get(enemy_x - Define_Value.MOVE_VAULE, enemy_y)))
                {
                    enemy_direction   = eDirection.Right;
                    enemy_position.x -= Define_Value.MOVE_VAULE;
                }
                else if (Actor_Action.Move_Check(map_layer.Get(enemy_x, enemy_y),
                                                 map_layer.Get(enemy_x + Define_Value.MOVE_VAULE, enemy_y)))
                {
                    enemy_direction   = eDirection.Left;
                    enemy_position.x += Define_Value.MOVE_VAULE;
                }
            }
            break;

        // 左方向への移動
        case eDirection.Left:
            if (Actor_Action.Move_Check(map_layer.Get(enemy_x, enemy_y),
                                        map_layer.Get(enemy_x, enemy_y + Define_Value.MOVE_VAULE)))
            {
                enemy_position.y += Define_Value.MOVE_VAULE;
            }
            else
            {
                if (Actor_Action.Move_Check(map_layer.Get(enemy_x, enemy_y),
                                            map_layer.Get(enemy_x, enemy_y + Define_Value.MOVE_VAULE)))
                {
                    enemy_direction   = eDirection.Right;
                    enemy_position.y += Define_Value.MOVE_VAULE;
                }
                else if (Actor_Action.Move_Check(map_layer.Get(enemy_x, enemy_y),
                                                 map_layer.Get(enemy_x, enemy_y - Define_Value.MOVE_VAULE)))
                {
                    enemy_direction   = eDirection.Left;
                    enemy_position.y -= Define_Value.MOVE_VAULE;
                }
            }
            break;
        }
    }
Exemplo n.º 2
0
    /// <summary>
    /// 周囲8マスにいる敵の方向を向く
    /// </summary>
    void Search_Enemy()   // TODO: 2体以上いるときに1体しか向けない
    {
        var player      = Player_Manager.Instance.player_script;
        var pla_pos     = player.position;
        int move_value  = Define_Value.MOVE_VAULE;
        int tile_scale  = Define_Value.TILE_SCALE;
        int enemy_layer = Define_Value.ENEMY_LAYER_NUMBER;

        // 上方向から時計回りに検索
        if (map_layer.Get(pla_pos.x, pla_pos.y + tile_scale) == enemy_layer)
        {
            player.direction = eDirection.Up;
        }
        // 右上
        else if (map_layer.Get(pla_pos.x + tile_scale, pla_pos.y + tile_scale) == enemy_layer)
        {
            if (Actor_Action.Slant_Check(map_layer.Get(pla_pos.x + move_value, pla_pos.y),
                                         map_layer.Get(pla_pos.x, pla_pos.y + move_value)))
            {
            }
            player.direction = eDirection.Upright;
        }
        // 右
        else if (map_layer.Get(pla_pos.x + tile_scale, pla_pos.y) == enemy_layer)
        {
            player.direction = eDirection.Right;
        }
        // 右下
        else if (map_layer.Get(pla_pos.x + tile_scale, pla_pos.y - tile_scale) == enemy_layer)
        {
            if (Actor_Action.Slant_Check(map_layer.Get(pla_pos.x + move_value, pla_pos.y),
                                         map_layer.Get(pla_pos.x, pla_pos.y - move_value)))
            {
            }
            player.direction = eDirection.Downright;
        }
        // 下
        else if (map_layer.Get(pla_pos.x, pla_pos.y - tile_scale) == Define_Value.ENEMY_LAYER_NUMBER)
        {
            player.direction = eDirection.Down;
        }
        // 左下
        else if (map_layer.Get(pla_pos.x - tile_scale, pla_pos.y - tile_scale) == enemy_layer)
        {
            if (Actor_Action.Slant_Check(map_layer.Get(pla_pos.x - move_value, pla_pos.y),
                                         map_layer.Get(pla_pos.x, pla_pos.y - move_value)))
            {
            }
            player.direction = eDirection.Downleft;
        }
        // 左
        else if (map_layer.Get(pla_pos.x - tile_scale, pla_pos.y) == Define_Value.ENEMY_LAYER_NUMBER)
        {
            player.direction = eDirection.Left;
        }
        // 左上
        else if (map_layer.Get(pla_pos.x - tile_scale, pla_pos.y + tile_scale) == enemy_layer)
        {
            if (Actor_Action.Slant_Check(map_layer.Get(pla_pos.x - move_value, pla_pos.y),
                                         map_layer.Get(pla_pos.x, pla_pos.y + move_value)))
            {
            }
            player.direction = eDirection.Upleft;
        }
    }
Exemplo n.º 3
0
    /// <summary>
    /// プレイヤーが隣接したマスにいるかどうか
    /// </summary>
    /// <returns>プレイヤーがいた場合はtrue</returns>
    bool Search_Player(int index)
    {
        var enemy = Enemy_Manager.Instance.enemies[index].GetComponent <Enemy>();
        // 長くなるので1時変数に格納
        int enemy_x = enemy_manager.enemies[index].GetComponent <Enemy>().position.x;
        int enemy_y = enemy_manager.enemies[index].GetComponent <Enemy>().position.y;
        // 移動量
        int move_value = Define_Value.MOVE_VAULE;

        // 上方向から時計回りに検索
        if (map_layer.Get(enemy_x, enemy_y + Define_Value.TILE_SCALE) == Define_Value.PLAYER_LAYER_NUMBER)
        {
            enemy.direction = eDirection.Up;
            return(true);
        }
        // 右上
        else if (map_layer.Get(enemy_x + Define_Value.TILE_SCALE, enemy_y + Define_Value.TILE_SCALE) == Define_Value.PLAYER_LAYER_NUMBER)
        {
            if (Actor_Action.Slant_Check(map_layer.Get(enemy_x + move_value, enemy_y),
                                         map_layer.Get(enemy_x, enemy_y + move_value)))
            {
                return(false);
            }
            enemy.direction = eDirection.Upright;
            return(true);
        }
        // 右
        else if (map_layer.Get(enemy_x + Define_Value.TILE_SCALE, enemy_y) == Define_Value.PLAYER_LAYER_NUMBER)
        {
            enemy.direction = eDirection.Right;
            return(true);
        }
        // 右下
        else if (map_layer.Get(enemy_x + Define_Value.TILE_SCALE, enemy_y - Define_Value.TILE_SCALE) == Define_Value.PLAYER_LAYER_NUMBER)
        {
            if (Actor_Action.Slant_Check(map_layer.Get(enemy_x + move_value, enemy_y),
                                         map_layer.Get(enemy_x, enemy_y - move_value)))
            {
                return(false);
            }
            enemy.direction = eDirection.Downright;
            return(true);
        }
        // 下
        else if (map_layer.Get(enemy_x, enemy_y - Define_Value.TILE_SCALE) == Define_Value.PLAYER_LAYER_NUMBER)
        {
            enemy.direction = eDirection.Down;
            return(true);
        }
        // 左下
        else if (map_layer.Get(enemy_x - Define_Value.TILE_SCALE, enemy_y - Define_Value.TILE_SCALE) == Define_Value.PLAYER_LAYER_NUMBER)
        {
            if (Actor_Action.Slant_Check(map_layer.Get(enemy_x - move_value, enemy_y),
                                         map_layer.Get(enemy_x, enemy_y - move_value)))
            {
                return(false);
            }
            enemy.direction = eDirection.Downleft;
            return(true);
        }
        // 左
        else if (map_layer.Get(enemy_x - Define_Value.TILE_SCALE, enemy_y) == Define_Value.PLAYER_LAYER_NUMBER)
        {
            enemy.direction = eDirection.Left;
            return(true);
        }
        // 左上
        else if (map_layer.Get(enemy_x - Define_Value.TILE_SCALE, enemy_y + Define_Value.TILE_SCALE) == Define_Value.PLAYER_LAYER_NUMBER)
        {
            if (Actor_Action.Slant_Check(map_layer.Get(enemy_x - move_value, enemy_y),
                                         map_layer.Get(enemy_x, enemy_y + move_value)))
            {
                return(false);
            }
            enemy.direction = eDirection.Upleft;
            return(true);
        }
        return(false);
        //TODO:次にパートナーを探す
    }
Exemplo n.º 4
0
    /// <summary>
    /// キー入力に合わせた方向に移動する
    /// </summary>
    void Move()
    {
        // 現在の座標を取得
        player_position = player.GetPosition();
        // プレイヤーのx座標
        int player_x = player_position.x;
        // プレイヤーのy座標
        int player_y = player_position.y;

        // 移動量
        int move_value = Define_Value.MOVE_VAULE;
        // 移動しないときは0
        int not_move = 0;

        // Wキーが押されたとき
        if (Input.GetKeyDown(KeyCode.W))
        {
            player.direction = eDirection.Up;
            // 進行方向が移動可能かを判断
            if (Actor_Action.Move_Check(map_layer.Get(player_x, player_y),
                                        map_layer.Get(player_x, player_y + move_value)))
            {
                return;
            }
            Move_Process(not_move, move_value);
        }
        // Eキーが押されたとき
        else if (Input.GetKeyDown(KeyCode.E))
        {
            player.direction = eDirection.Upright;
            // 進行方向が移動可能かを判断
            if (Actor_Action.Move_Check(map_layer.Get(player_x, player_y),
                                        map_layer.Get(player_x + move_value, player_y + move_value)))
            {
                return;
            }
            // 右方向か上方向に壁があるとき(移動不可になる)
            if (Actor_Action.Slant_Check(map_layer.Get(player_x + move_value, player_y),
                                         map_layer.Get(player_x, player_y + move_value)))
            {
                return;
            }
            Move_Process(move_value, move_value);
        }
        // Dキーが押されたとき
        else if (Input.GetKeyDown(KeyCode.D))
        {
            player.direction = eDirection.Right;
            // 進行方向が移動可能かを判断
            if (Actor_Action.Move_Check(map_layer.Get(player_x, player_y),
                                        map_layer.Get(player_x + move_value, player_y)))
            {
                return;
            }
            Move_Process(move_value, not_move);
        }
        // Cキーが押されたとき
        else if (Input.GetKeyDown(KeyCode.C))
        {
            player.direction = eDirection.Downright;
            // 進行方向が移動可能かを判断
            if (Actor_Action.Move_Check(map_layer.Get(player_x, player_y),
                                        map_layer.Get(player_x + move_value, player_y - move_value)))
            {
                return;
            }
            // 右方向か下方向に壁があるかを判断(移動不可になる)
            if (Actor_Action.Slant_Check(map_layer.Get(player_x + move_value, player_y),
                                         map_layer.Get(player_x, player_y - move_value)))
            {
                return;
            }
            Move_Process(move_value, -move_value);
        }
        // Xキーが押されたとき
        else if (Input.GetKeyDown(KeyCode.X))
        {
            player.direction = eDirection.Down;
            // 進行方向が移動可能かを判断
            if (Actor_Action.Move_Check(map_layer.Get(player_x, player_y),
                                        map_layer.Get(player_x, player_y - move_value)))
            {
                return;
            }
            Move_Process(not_move, -move_value);
        }
        // Zキーが押されたとき
        else if (Input.GetKeyDown(KeyCode.Z))
        {
            player.direction = eDirection.Downleft;
            if (Actor_Action.Move_Check(map_layer.Get(player_x, player_y),
                                        map_layer.Get(player_x - move_value, player_y - move_value)))
            {
                return;
            }
            // 左方向か下方向に壁があるとき(移動不可になる)
            if (Actor_Action.Slant_Check(map_layer.Get(player_x - move_value, player_y),
                                         map_layer.Get(player_x, player_y - move_value)))
            {
                return;
            }
            Move_Process(-move_value, -move_value);
        }
        // Aキーが押されたとき
        else if (Input.GetKeyDown(KeyCode.A))
        {
            player.direction = eDirection.Left;
            // 進行方向が移動可能かを判断
            if (Actor_Action.Move_Check(map_layer.Get(player_x, player_y),
                                        map_layer.Get(player_x - move_value, player_y)))
            {
                return;
            }
            Move_Process(-move_value, not_move);
        }
        // Qキーが押されたとき
        else if (Input.GetKeyDown(KeyCode.Q))
        {
            player.direction = eDirection.Upleft;
            if (Actor_Action.Move_Check(map_layer.Get(player_x, player_y),
                                        map_layer.Get(player_x - move_value, player_y + move_value)))
            {
                return;
            }
            // 左方向か上方向に壁があるとき(移動不可になる)
            if (Actor_Action.Slant_Check(map_layer.Get(player_x - move_value, player_y),
                                         map_layer.Get(player_x, player_y + move_value)))
            {
                return;
            }
            Move_Process(-move_value, move_value);
        }
    }