Пример #1
0
        /// <summary>
        /// 区画の範囲を設定する
        /// </summary>
        /// <param name="room_number">今いる部屋の番号</param>
        void Set_Rectangle(int room_number)
        {
            List <Dungeon_Division> division_list = Dungeon_Manager.Instance.dungeon_generator.division_list;

            // フレーム(出入り口)部分も含めるため1を足し引きして調整する
            int width = (division_list[room_number].Room.Right + Define_Value.ROOM_FLAME) -
                        (division_list[room_number].Room.Left);
            int height = (division_list[room_number].Room.Bottom) -
                         (division_list[room_number].Room.Top - Define_Value.ROOM_FLAME);

            layer.Initialise(width, height);
        }
    /// <summary>
    /// 新しくダンジョンを作る。開始時、フロア移動時に呼ばれる。
    /// </summary>
    /// <param name="level">どの難易度のダンジョンが呼ばれたか</param>
    public void Load_Dungeon(int level)
    {
        // ダンジョンの横幅
        int dungeon_width = 0;
        // ダンジョンの縦幅
        int dungeon_height = 0;

        // 敵の出現数をリセット
        Enemy_Manager.Instance.Enemy_Counter = 1;

        // レベルに合った大きさのダンジョンの生成する
        switch (level)
        {
        case Define_Value.EASY:
            dungeon_width  = Define_Value.EASY_DUNGEON_WIDTH;
            dungeon_height = Define_Value.EASY_DUNGEON_HEIGHT;
            break;

        case Define_Value.NOMAL:
            dungeon_width  = Define_Value.NOMAL_DUNGEON_WIDTH;
            dungeon_height = Define_Value.NOMAL_DUNGEON_HEIGHT;
            break;

        case Define_Value.HARD:
            dungeon_width  = Define_Value.HARD_DUNGEON_WIDTH;
            dungeon_height = Define_Value.HARD_DUNGEON_HEIGHT;
            break;
        }

        // 初期化
        map_layer.Initialise(dungeon_width, dungeon_height);// 区画リスト作成
        division_list = new List <Dungeon_Division>();

        // すべてを壁にする
        map_layer.Fill(Define_Value.WALL_LAYER_NUMBER);

        // 最初の区画を作る // 0から作っているので-1する
        Create_Division(0, 0, dungeon_width - 1, dungeon_height - 1);

        // 区画を分割する
        // 垂直 or 水平分割フラグの決定
        bool bVertical = (Random.Range(0, 2) == 0);

        Split_Divison(bVertical);

        // 区画に部屋を作る
        Create_Room();

        // 部屋同士をつなぐ
        Connect_Rooms();

        // 入口(出口)となる部分に専用のレイヤーを貼る
        Set_Entrance_Position();

        // プレイヤー、敵、アイテム、階段の位置を決定
        Random_Actor(Define_Value.PLAYER_LAYER_NUMBER);
        //TODO:中身を作り終えたらスポーンさせる
        // 引数に入れたオブジェクトをランダムで複数個配置する
        Random_Object(Define_Value.ENEMY_LAYER_NUMBER);
        //Random_Object(Define_Value.ITEM_LAYER_NUMBER);
        //Random_Object(Define_Value.TRAP_LAYER_NUMBER);
        // 階段を配置。 階段は1つのみなので、↑とは別口で
        Create_Stair();

        Vector3 instance_position = Vector3.zero;

        // タイルを配置
        for (int x = 0; x < map_layer.GetWidth(); ++x)
        {
            for (int y = 0; y < map_layer.GetHeight(); ++y)
            {
                // 壁以外であれば床用の画像を配置
                if (map_layer.Get(x, y) != Define_Value.WALL_LAYER_NUMBER)
                {
                    GameObject instance_tile = Instantiate(tile_object, instance_position, Quaternion.identity);
                }

                // 壁であれば壁用の画像を配置
                if (map_layer.Get(x, y) == Define_Value.WALL_LAYER_NUMBER)
                {
                    GameObject instance_wall = Instantiate(wall_object, instance_position, Quaternion.identity);
                }
                // プレイヤーであればプレイヤーを配置
                else if (map_layer.Get(x, y) == Define_Value.PLAYER_LAYER_NUMBER)
                {
                    Vector2Int player_position = new Vector2Int(x, y);
                    map_layer.Set(x, y, Define_Value.PLAYER_LAYER_NUMBER);
                    // TODO:足元のものを取って来たい
                    player.Set_Feet(Define_Value.TILE_LAYER_NUMBER);
                    player.Set_Position(player_position);
                    var player_status = Player_Manager.Instance.player_status;
                    player_status.Where_Floor(x, y);
                }
                // 階段であれば階段用の画像を配置
                else if (map_layer.Get(x, y) == Define_Value.STAIR_LAYER_NUMBER)
                {
                    GameObject instance_stair = Instantiate(stair_object, instance_position, Quaternion.identity);
                }
                // アイテムであればアイテム用の画像を配置
                //TODO: アイテムはレイヤーではなく、落ちてる落ちてないでのboolか何かにするか
                else if (map_layer.Get(x, y) == Define_Value.ITEM_LAYER_NUMBER)
                {
                    GameObject instance_item = Instantiate(item_object, instance_position, Quaternion.identity);
                }
                // エネミーであればエネミーを生成
                else if (map_layer.Get(x, y) == Define_Value.ENEMY_LAYER_NUMBER)
                {
                    enemy_manager.Create_Enemy(x, y);
                }
                // 罠であれば罠用の画像を配置
                else if (map_layer.Get(x, y) == Define_Value.TRAP_LAYER_NUMBER)
                {
                    GameObject instance_cell = Instantiate(trap_object, instance_position, Quaternion.identity);
                }
                instance_position.y += tile_object.GetComponent <SpriteRenderer>().bounds.size.y;
            }
            instance_position.y  = 0.0f;
            instance_position.x += tile_object.GetComponent <SpriteRenderer>().bounds.size.x;
            instance_position.z -= Define_Value.CAMERA_DISTANCE;
        }
    }