Exemplo n.º 1
0
    IEnumerator generateMapDelay()
    {
        while (!GameManager.instance.transition.textureHidden)
        {
            yield return(null);
        }
        GameManager.instance.transition.BeginShow();
        GameManager.instance.player.canMove = false;
        while (!GameManager.instance.transition.textureShown)
        {
            yield return(null);
        }
        GameManager.instance.transition.BeginHide();
        GameManager.instance.player.canMove = true;

        isInDungeon = true;
        playerLocation.GetComponent <PlayerController>().lerping = false;
        buttonReference.SetActive(false);
        for (int x = 0; x < map.GetUpperBound(0); x++)     //Loop through the width of the map
        {
            for (int y = 0; y < map.GetUpperBound(1); y++) //Loop through the height of the map
            {
                // fill map with 0's so it's all dirt
                map[x, y] = (int)tileType.wall;
            }
        }
        tilemap.ClearAllTiles();

        List <rect> roomList = new List <rect>();
        int         numRooms = 0;

        for (int i = 0; i < nRooms; i++)
        {
            int w = Random.Range(minRoomSize, maxRoomSize);
            int h = Random.Range(minRoomSize, maxRoomSize);

            int x = Random.Range(1, scaledXSize - w - 1);
            int y = Random.Range(1, scaledYSize - h - 1);

            rect newRoom = new rect(x, y, h, w);

            if (numRooms != 0)
            {
                for (int j = 0; j < roomList.Count; j++)
                {
                    if (newRoom.intersect(roomList[j]))
                    {
                        break;
                    }
                }
            }

            map = createRoom(newRoom, map);
            Vector2Int newCenter = newRoom.center();
            if (numRooms == 0)
            {
                playerLocation.position = new Vector3(newCenter.x + 1 + gridOffset, newCenter.y + 1 + gridOffset, 0);
            }
            else
            {
                Vector2Int lastCenter = roomList[numRooms - 1].center();

                if (Random.Range(0, 2) > 1)
                {
                    createHTunnel(lastCenter.x, newCenter.x, lastCenter.y, map);
                    createVTunnel(lastCenter.y, newCenter.y, newCenter.x, map);
                }
                else
                {
                    createVTunnel(lastCenter.y, newCenter.y, lastCenter.x, map);
                    createHTunnel(lastCenter.x, newCenter.x, newCenter.y, map);
                }
            }
            map = spawnChest(newCenter, map);
            roomList.Add(newRoom);
            numRooms++;
        }
        Vector2Int stairPos = roomList[numRooms - 1].center();

        map[stairPos.x, stairPos.y] = (int)tileType.stairs;
        setTileMap(map);
        if (floorText)
        {
            floorText.text = string.Format("Floor {0}", currentFloorNumber + 1);
        }

        if (currentFloorNumber > highestFloorAchieved)
        {
            highestFloorAchieved   = currentFloorNumber;
            reachedNewHighestFloor = true;
        }
        else
        {
            reachedNewHighestFloor = true;
        }
    }