Exemplo n.º 1
0
 public GameObject GetRoom(RoomEntrances whichRoom)
 {
     return(doors[(int)whichRoom]);
 }
    void GenerateMap()
    {
        roomMap[howManyRooms / 2, howManyRooms / 2] = initialRoom;
        var initialRoomEntrances = initialRoom.GetComponent <RoomEntrances>();

        initialRoomEntrances.x = howManyRooms / 2;
        initialRoomEntrances.y = howManyRooms / 2;

        foreach (var exit in initialRoomEntrances.Exits)
        {
            exit.SetCoordinates(initialRoomEntrances.x, initialRoomEntrances.y);
            exit.level = 0;
            unspawnedExits.Enqueue(exit);
        }
        remainingExitsToCreate -= 4;
        unspawnedExits.Enqueue(null);

        while (unspawnedExits.Count > 0)
        {
            Exit curExit = unspawnedExits.Dequeue();
            if (curExit == null)
            {
                Debug.Log("New Level");
                continue;
            }
            // Debug.Log("Doing exit " + curExit.ExitDirection);

            if (roomMap[curExit.x, curExit.y] != null) // Room already created at exit position
            {
                // Debug.Log($"Room at ({curExit.x}, {curExit.y}) = {roomMap[curExit.x, curExit.y]}");
                // Debug.Log($"Has direction {curExit.RequiredEntranceDirection}? {roomMap[curExit.x, curExit.y].GetComponent<RoomEntrances>().HasDirection(curExit.RequiredEntranceDirection)}");


                ResolveExitCollision(curExit, roomMap[curExit.x, curExit.y].GetComponent <RoomEntrances>());

                // Debug.Log($"ROOM COLLISION AT ({curExit.x}, {curExit.y})");
                continue;
            }
            else
            {
                GameObject roomToSpawn = GetRoomForExit(curExit);
                // Add room at exit
                RoomEntrances newRoomEntrances = SpawnRoom(roomToSpawn, curExit);
                newRoomEntrances.level = curExit.level + 1;



                Room newRoom = newRoomEntrances.GetComponent <Room>();
                newRoomEntrances.x            = curExit.x;
                newRoomEntrances.y            = curExit.y;
                roomMap[curExit.x, curExit.y] = newRoom;

                remainingExitsToCreate -= newRoomEntrances.NExits - 1;
                if (remainingExitsToCreate < 0)
                {
                    Debug.LogError("smth went worng, negative exits to creat");
                }

                foreach (var newRoomExit in newRoomEntrances.Exits)
                {
                    newRoomExit.SetCoordinates(newRoomEntrances.x, newRoomEntrances.y);
                    newRoomExit.level = newRoomEntrances.level;

                    if (!newRoomExit.gameObject.activeSelf)
                    {
                        // if (roomMap[newRoomExit.x, newRoomExit.y] != null)
                        // {
                        //     ResolveExitCollision(newRoomExit, roomMap[newRoomExit.x, newRoomExit.y].GetComponent<RoomEntrances>());
                        // }
                        continue;
                    }

                    if (newRoomExit.ExitDirection == curExit.RequiredEntranceDirection)
                    {
                        SetupTeleporters(curExit.Teleporter, newRoomExit.Teleporter);
                        continue;
                    }

                    unspawnedExits.Enqueue(newRoomExit);
                    // Debug.Log("Exit in prevRoom: " + curExit.ExitDirection + " | Exit in nextRoom: " + exit.ExitDirection + " | reqDirection: " + curExit.RequiredEntranceDirection);
                }
                HandleNewRoomType(newRoomEntrances);
            }
        }
    }
Exemplo n.º 3
0
 void OnRoomEntered(RoomEntrances entrances)
 {
     entrances.StartCoroutine(OnRoomEnteredRoutine());
 }