Beispiel #1
0
    public void DefineRooms()
    {
        HashSet <int> treasureRooms = new HashSet <int>();

        //Define what room ids are going to be treasure rooms
        if (treasureRoomQuantity <= _dungeonRooms.Count)
        {
            while (treasureRoomQuantity > 0)
            {
                int randomRoomID = Random.Range(2, _dungeonRooms.Count + 1);
                if (!treasureRooms.Contains(randomRoomID))
                {
                    treasureRooms.Add(randomRoomID);
                    treasureRoomQuantity--;
                }
            }
        }
        int bottomStartRoom = GetRandomSideRoom(3);
        int topEndRoom      = GetRandomSideRoom(1);

        RoomController roomComponent = null;

        foreach (DungeonRoom dungeonRoom in _dungeonRooms)
        {
            if (treasureRooms.Contains(dungeonRoom.id))
            {
                roomComponent = dungeonRoom.room.AddComponent(typeof(TreasureRoom)) as TreasureRoom;
            }
            else
            {
                roomComponent = dungeonRoom.room.AddComponent(typeof(EnemiesRoom)) as EnemiesRoom;
            }

            _dungeonRoomsComponent.Add(roomComponent);
            Rect roomFloorsRectangle = new Rect(dungeonRoom.roomRectangle.position, new Vector2(dungeonRoom.roomRectangle.width - 2f, dungeonRoom.roomRectangle.height - 4f));
            roomComponent.Initialize(this, tilesPosition, dungeonRoom.id, dungeonRoom.roomRectangle, roomFloorsRectangle);
            roomComponent.DrawRoomInteriors();
            //Set player initial position at a random floor tile of the first room
            if (dungeonRoom.id == bottomStartRoom)
            {
                GameObject    initialCorridorInstance = Instantiate(initialCorridor, roomComponent.DestroyRandomSideWall(3), Quaternion.identity, roomComponent.transform.GetChild(0));
                GatewayPortal initialCorridorGateway  = initialCorridorInstance.GetComponent <GatewayPortal>();
                GameObject    firstRoomTile           = tilesPosition[(int)initialCorridorInstance.transform.position.x, (int)initialCorridorInstance.transform.position.y + 1];
                tilesPosition[(int)initialCorridorInstance.transform.position.x, (int)initialCorridorInstance.transform.position.y].tag = "Gateway";

                roomComponent.isFirstRoom = true;
                firstRoomTile.tag         = "Gateway";
                initialCorridorGateway.Initialize(this, 1, corridorSpeed, tilesPosition, _clsPlayerController.transform, _clsPlayerController, _clsPlayerSpriteManager);
                initialCorridorGateway.SetSimpleGateway(firstRoomTile);
                _clsPlayerController.gameObject.transform.position = new Vector3(initialCorridorInstance.transform.position.x, initialCorridorInstance.transform.position.y - 40);
            }
            //Set boss room in the last dungeon room
            if (dungeonRoom.id == topEndRoom)
            {
                GameObject    bossRoomInstance  = Instantiate(bossRoom, roomComponent.DestroyRandomSideWall(1), Quaternion.identity);
                BossRoom      bossRoomComponent = bossRoomInstance.GetComponent <BossRoom>();
                GatewayPortal bossRoomGateway   = bossRoomInstance.GetComponent <GatewayPortal>();
                tilesPosition[(int)bossRoomInstance.transform.position.x, (int)bossRoomInstance.transform.position.y].tag = "Gateway";

                bossRoomGateway.Initialize(this, 1, corridorSpeed, tilesPosition, _clsPlayerController.transform, _clsPlayerController, _clsPlayerSpriteManager);
                bossRoomGateway.SetSimpleGateway(bossRoomComponent.firstPortalStop);
                bossRoomComponent.Initialize(this, tilesPosition, dungeonRoom.id + 1);
                roomComponent.roomGateways.Add(bossRoomGateway);
            }
        }
    }