Exemple #1
0
    void CreateLayout()
    {
        int roomCtr   = 1;
        int attempCtr = 0;
        int currentX  = FloorWidth / 2;
        int currentY  = FloorHeight / 2;

        m_map.AddRoom(currentX, currentY, m_roomFactory.CreateRoom());

        while (roomCtr < MaxRoomCount && attempCtr++ < MaxAttemptCount)
        {
            int       lastX = currentX;
            int       lastY = currentY;
            Direction dir   = (Direction)Mathf.Round(Random.value * 4);

            switch (dir)
            {
            case Direction.NORTH:
                ++currentY;
                break;

            case Direction.SOUTH:
                --currentY;
                break;

            case Direction.EAST:
                ++currentX;
                break;

            case Direction.WEST:
                --currentX;
                break;
            }
            if (currentX < 0 || currentY < 0 || currentY >= FloorWidth || currentX >= FloorHeight)
            {
                currentX = lastX;
                currentY = lastY;
                continue;
            }

            if (m_map.GetRoom(currentX, currentY) == null)
            {
                m_map.AddRoom(currentX, currentY, m_roomFactory.CreateRoom(m_map.GetRoom(lastX, lastY), dir));
                ++roomCtr;
            }
            else
            {
                switch (dir)
                {
                case Direction.NORTH:
                    m_map.GetRoom(currentX, currentY).exits.South = true;
                    m_map.GetRoom(lastX, lastY).exits.North       = true;
                    break;

                case Direction.SOUTH:
                    m_map.GetRoom(currentX, currentY).exits.North = true;
                    m_map.GetRoom(lastX, lastY).exits.South       = true;
                    break;

                case Direction.EAST:
                    m_map.GetRoom(currentX, currentY).exits.West = true;
                    m_map.GetRoom(lastX, lastY).exits.East       = true;
                    break;

                case Direction.WEST:
                    m_map.GetRoom(currentX, currentY).exits.East = true;
                    m_map.GetRoom(lastX, lastY).exits.West       = true;
                    break;
                }
            }
        }
    }