/// <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; } }