Ejemplo n.º 1
0
    public void FocusRoom(CombatRoom room, float fadingSpeed, bool inmediate = false)
    {
        if (inmediate)
        {
            transform.position          = new Vector3(room.transform.position.x, room.transform.position.y, transform.position.z);
            mainCamera.orthographicSize = CalculateCameraSize(room.bounds);
        }
        else
        {
            transitionSpeed    = fadingSpeed;
            cameraDestPosition = new Vector3(room.transform.position.x, room.transform.position.y, transform.position.z);
            if (movementCoroutine != null)
            {
                StopCoroutine(movementCoroutine);
            }
            movementCoroutine = StartCoroutine(MoveCamera());

            cameraDestSize = CalculateCameraSize(room.bounds);
            if (zoomCoroutine != null)
            {
                StopCoroutine(zoomCoroutine);
            }
            zoomCoroutine = StartCoroutine(ZoomCamera());
        }
    }
Ejemplo n.º 2
0
        /// <summary>
        /// Generates specific values for the DungeonType.
        /// </summary>
        /// <param name="room">The current room.</param>
        /// <param name="dungeonRoomObject">The gameobject to which the room should be generate don.</param>
        /// <param name="levelNumber">The number of the level.</param>
        /// <returns>The fully generated DungeonRoom.</returns>
        private DungeonRoom SetRoomType(Room room, GameObject dungeonRoomObject, int levelNumber, DungeonConfig config)
        {
            switch (room.Type)
            {
            case RoomType.Start:
                StartRoom startRoom = dungeonRoomObject.AddComponent <StartRoom>();
                if (Player.LocalPlayer.isServer && levelNumber == 0)
                {
                    startRoom.SpawnItems(RegionDict.Instance.StartingRoomPickables, DungeonCreator.Instance.TilePositionToWorldPosition(room.Position + (room.Layout.Size / 2)));
                }
                return(startRoom);

            case RoomType.Combat:
                CombatRoom combatRoom = dungeonRoomObject.AddComponent <CombatRoom>();
                combatRoom.ThreatLevel    = room.TileCount;
                combatRoom.enemiesToSpawn = new EnemyObject[combatRoom.ThreatLevel / 48];
                for (int j = 0; j < combatRoom.enemiesToSpawn.Length; j++)
                {
                    combatRoom.enemiesToSpawn[j] = RandomUtil.Element(RegionDict.Instance.EnemiesToSpawn);
                }
                return(combatRoom);

            case RoomType.Loot:
                LootRoom lootRoom = dungeonRoomObject.AddComponent <LootRoom>();
                lootRoom.pickables = new Pickable[room.TileCount / 48];
                for (int j = 0; j < lootRoom.pickables.Length; j++)
                {
                    lootRoom.pickables[j] = RandomUtil.Element(RegionDict.Instance.LootingRoomPickables);
                }
                return(lootRoom);

            case RoomType.Shop:
                ShopRoom  shopRoom = dungeonRoomObject.AddComponent <ShopRoom>();
                const int numItems = 4;
                shopRoom.shopItems = new Pickable[numItems];
                shopRoom.locations = new Vector2[numItems];
                // TODO: Replace Pickabledict with dungeon config shop pickables.
                for (int j = 0; j < numItems; j++)
                {
                    int rnd = Random.Range(0, config.shopItems.Length);
                    shopRoom.shopItems[j] = config.shopItems[rnd];
                    shopRoom.locations[j] = room.Position + new Vector2Int((int)room.GameObjects[j + 4].Position.x, (int)room.GameObjects[j + 4].Position.y);
                }
                shopRoom.SpawnItems();
                return(shopRoom);

            case RoomType.Boss:
                BossRoom bossRoom = dungeonRoomObject.AddComponent <BossRoom>();
                bossRoom.bossObjects = new BossObject[] { RandomUtil.Element(RegionDict.Instance.BossesToSpawn) };
                DungeonDict.Instance.SetBossRoom(bossRoom);
                return(bossRoom);

            case RoomType.Empty:
                EmptyRoom emptyRoom = dungeonRoomObject.AddComponent <EmptyRoom>();
                return(emptyRoom);

            default:
                throw new System.Exception("Unknown room type! (" + room.Type + ")");
            }
        }
Ejemplo n.º 3
0
 public void StartRunning(CombatRoom room)
 {
     barParent.SetActive(true);
     currentRoom   = room;
     remainingTime = room.GetRoomTime();
     maxTime       = room.GetRoomTime();
     running       = true;
 }
Ejemplo n.º 4
0
        public void Matching()
        {
            /* 两两匹配 */
            var resList = new List <MatchingResult>();
            var players = new List <Socket>();

            foreach (var player in m_MatchingSet)
            {
                players.Add(player);
                if (players.Count >= CombatRoom.MAX_PLAYER)
                {
                    var res = new MatchingResult
                    {
                        roomId  = m_RoomAllocator.GetId(),
                        players = players,
                    };
                    players = new List <Socket>();
                    resList.Add(res);
                }
            }

            /* 创建房间 */
            foreach (var res in resList)
            {
                var   room     = new CombatRoom(res.roomId);
                Int32 seed     = m_Random.Next();
                Int32 playerId = 1;
                foreach (var player in res.players)
                {
                    m_MatchingSet.Remove(player);
                    room.AddPlayer(player);
                    m_MapPlayerToRoom.Add(player, res.roomId);
                    ServerNetManager.Send(player, (Int16)ProtocType.CombatMatchRes, new CombatMatchRes
                    {
                        RoomId      = res.roomId,
                        Seed        = seed,
                        PlayerCount = CombatRoom.MAX_PLAYER,
                        SelfId      = playerId,
                    });
                    playerId++;
                }
                m_RoomSet.Add(res.roomId, room);
            }
        }
Ejemplo n.º 5
0
    public MapInfo(MapSize size)
    {
        rows  = 3; cols = 3;
        rooms = new Room[rows, cols];

        rooms[0, 0] = new NavRoom();
        rooms[0, 1] = new NavRoom();
        rooms[0, 2] = new TrapRoom();

        rooms[1, 1] = new CombatRoom();

        rooms[2, 1] = new NavRoom();
        rooms[2, 0] = new TrapRoom();
        rooms[2, 2] = new NavRoom();

        currRow   = 0; currCol = 0;
        startRoom = rooms[currRow, currCol];

        endRoom = rooms[2, 2];
    }
Ejemplo n.º 6
0
 public void AssignCombatRoom(CombatRoom room)
 {
     assignedCombatRoom = room;
 }
    void CreateRoom(RoomIdentifier r, Transform level)
    {
        GameObject northWall  = (r.connections & NORTH) > 0 ? doorway : wall;
        GameObject eastWall   = (r.connections & EAST) > 0 ? doorway : wall;
        GameObject southWall  = (r.connections & SOUTH) > 0 ? doorway : wall;
        GameObject westWall   = (r.connections & WEST) > 0 ? doorway : wall;
        GameObject floor      = this.floor;
        GameObject ceiling    = this.ceiling;
        Vector3    roomOrigin = ROOM_SIZE * new Vector3(r.x, 0, r.y);

        GameObject newRoomObj = new GameObject("room" + r.x + r.y);

        newRoomObj.transform.position = roomOrigin;
        newRoomObj.transform.parent   = level;

        Instantiate(floor, roomOrigin, Quaternion.Euler(0, 0, 0), newRoomObj.transform);
        Instantiate(ceiling, roomOrigin, Quaternion.Euler(0, 0, 0), newRoomObj.transform);
        Instantiate(northWall, roomOrigin, Quaternion.Euler(0, 270, 0), newRoomObj.transform);
        Instantiate(eastWall, roomOrigin, Quaternion.Euler(0, 180, 0), newRoomObj.transform);
        Instantiate(southWall, roomOrigin, Quaternion.Euler(0, 90, 0), newRoomObj.transform);
        Instantiate(westWall, roomOrigin, Quaternion.Euler(0, 0, 0), newRoomObj.transform);

        switch (r.type)
        {
        case (RoomType.START):
            newRoomObj.AddComponent <SpawnRoom>();
            break;

        case (RoomType.END):
            GameObject teleporter = Instantiate(bossTeleporter, roomOrigin, Quaternion.Euler(0, 0, 0), newRoomObj.transform);
            teleporter.GetComponent <Teleporter>().SetDestination(new Vector3(0, 0, 0));
            teleporter.SetActive(false);
            BossWaveCombatRoom bossRoom = newRoomObj.AddComponent <BossWaveCombatRoom>();
            //GameObject boss = bosses[Random.Range(0, bosses.Length)];
            bossRoom.generateEnemies(enemies, numEnemiesPerRoom, 3, curLevel + 1);
            bossRoom.teleporter = teleporter;
            break;

        case (RoomType.DEAD_END):
        case (RoomType.ENEMY):
            CombatRoom combatRoom = newRoomObj.AddComponent <CombatRoom>();
            combatRoom.generateEnemies(enemies, numEnemiesPerRoom, curLevel + 1);

            if (Random.Range(0f, 1f) < RewardChance)
            {
                WandPickup wp   = Instantiate(wandPickup, newRoomObj.transform.position + (Vector3.up * PICKUP_HEIGHT), Quaternion.identity, newRoomObj.transform).GetComponent <WandPickup>();
                GameObject wand = wands[Random.Range(0, wands.Length)];
                wp.SetWand(wand);
                wp.gameObject.SetActive(false);
                combatRoom.SetReward(wp.gameObject);
            }

            break;

        default:
            break;
        }

        BoxCollider boxCollider = newRoomObj.AddComponent <BoxCollider>();

        boxCollider.size      = new Vector3(ROOM_SIZE, ROOM_SIZE, ROOM_SIZE);
        boxCollider.isTrigger = true;
        newRoomObj.tag        = "Invisible";
    }
Ejemplo n.º 8
0
 //Time Bar
 public void StartTimeBar(CombatRoom room)
 {
     timeBar.StartRunning(room);
 }
Ejemplo n.º 9
0
    private IEnumerator Start()
    {
        yield return(new WaitForSeconds(0.1f));

        UIManager.Instance.ShowLevelLoadScreen();
        DungeonDict.Instance.ClearRooms();
        RegionSceneLoader loader = RegionSceneLoader.Instance;

        yield return(loader.LoadScene(Region.EnemyTestRoom));

        Vector2Int weaponSize   = new Vector2Int(30, 30);
        Vector2Int corridorSize = new Vector2Int(10, 2);
        Vector2Int enemySize    = new Vector2Int(20, 20);
        Vector2Int startSize    = new Vector2Int(10, 10);

        Vector2Int weaponPos    = new Vector2Int(1, 3);
        Vector2Int startPos     = new Vector2Int(weaponPos.x + weaponSize.x + corridorSize.x - 2, 3);
        Vector2Int corridor1Pos = startPos + new Vector2Int(0, 2);// - new Vector2Int(corridorSize.x, -2);
        Vector2Int corridor2Pos = startPos + new Vector2Int(startSize.x - 1, 2);
        Vector2Int enemyPos     = startPos + new Vector2Int(startSize.x - 1, 0) + new Vector2Int(corridorSize.x - 1, 0);

        Fast2DArray <TileType> layout = new Fast2DArray <TileType>(startSize.x, startSize.y);

        FillRoomWithBounds(layout);
        layout.Set(TileType.CorridorAccess, layout.XSize - 1, 2);
        layout.Set(TileType.CorridorAccess, layout.XSize - 1, 3);

        List <TiledImporter.PrefabLocations> gameObjects = new List <TiledImporter.PrefabLocations>();
        Room startRoom = new Room(startPos.x, startPos.y, layout, gameObjects, RoomType.Start);

        layout = new Fast2DArray <TileType>(weaponSize.x, weaponSize.y);
        FillRoomWithBounds(layout);
        layout.Set(TileType.CorridorAccess, layout.XSize - 1, 2);
        layout.Set(TileType.CorridorAccess, layout.XSize - 1, 3);
        Room weaponRoom = new Room(weaponPos.x, weaponPos.y, layout, gameObjects, RoomType.Empty);

        Corridor corridor1 = new Corridor(corridor1Pos.x, corridor1Pos.y, corridorSize.x, Direction.Left);
        Corridor corridor2 = new Corridor(corridor2Pos.x, corridor2Pos.y, corridorSize.x, Direction.Right);

        layout = new Fast2DArray <TileType>(enemySize.x, enemySize.y);
        FillRoomWithBounds(layout);
        for (int x = 3; x < enemySize.x - 2; x++)
        {
            for (int y = 5; y < enemySize.y - 2; y += 5)
            {
                layout.Set(TileType.Wall, x, y);
            }
        }
        layout.Set(TileType.CorridorAccess, 0, 2);
        layout.Set(TileType.CorridorAccess, 0, 3);

        Room enemyRoom = new Room(enemyPos.x, enemyPos.y, layout, gameObjects, RoomType.Combat);

        Room[]     rooms     = { startRoom, enemyRoom, weaponRoom };
        Corridor[] corridors = { corridor1, corridor2 };

        if (Player.LocalPlayer.isServer)
        {
            GlobalsDict.Instance.GameStateManagerObject.AddComponent <GameManager>();
        }

        Dungeon       dungeon = new Dungeon(rooms, corridors, enemyPos + new Vector2Int(layout.XSize, layout.YSize));
        DungeonConfig config  = DungeonConfig.StandardConfig;

        yield return(DungeonCreator.Instance.CreateDungeon(-1, 1, config, RegionDict.Instance.Tileset, dungeon));

        CombatRoom combatRoom = DungeonDict.Instance.Rooms.First(x => x.RoomType == RoomType.Combat) as CombatRoom;

        combatRoom.enemiesToSpawn = enemiesToSpawn;

        Destroy(gameObject);
    }