Example #1
0
    void GenerateRoomCenter(GameObject roomBorder)
    {
        RoomCenter roomCenterSelected;

        if (roomBorder == roomBorders[0])
        {
            roomCenterSelected = roomCenterStart;
        }
        else if (roomBorder == roomBorders[roomBorders.Count - 1])
        {
            roomCenterSelected = roomCenterEnd;
        }
        else if (roomBorder == roomBorders[shopRoomIndex])
        {
            roomCenterSelected = roomCenterShop;
        }
        else
        {
            roomCenterSelected = roomCenters[Random.Range(0, roomCenters.Length)];
        }

        RoomCenter newRoomCenter = (RoomCenter)Instantiate(roomCenterSelected, roomBorder.transform.position, roomBorder.transform.rotation);

        newRoomCenter.theRoom = roomBorder.GetComponent <RoomController>();
    }
Example #2
0
    private void AttachCenterToOutline(RoomCenter roomCenter, GameObject outline)
    {
        RoomCenter newCenter = Instantiate(
            roomCenter,
            outline.transform.position,
            outline.transform.rotation
            );

        newCenter.theRoom = outline.GetComponent <Room>();
    }
Example #3
0
    Transform[,] mapGenerator(List <Room> roomList, Transform[,] emptyMap)
    {
        for (int k = 0; k < roomList.Count - 1; k++)
        {
            RoomCenter firstRoom  = roomList[k].FindCenter();
            RoomCenter secondRoom = roomList[k + 1].FindCenter();
            int        xIndex     = firstRoom.x;

            if (firstRoom.x > secondRoom.x)
            {
                int xHallLength = firstRoom.x - secondRoom.x;
                for (int i = 0; i < xHallLength; i++)
                {
                    emptyMap[firstRoom.x - i, firstRoom.y]     = floor;
                    emptyMap[firstRoom.x - i, firstRoom.y + 1] = floor;
                }

                xIndex = firstRoom.x - xHallLength;
            }

            else if (firstRoom.x < secondRoom.x)
            {
                int xHallLength = secondRoom.x - firstRoom.x;
                for (int i = 0; i < xHallLength; i++)
                {
                    emptyMap[firstRoom.x + i, firstRoom.y]     = floor;
                    emptyMap[firstRoom.x + i, firstRoom.y + 1] = floor;
                }
                xIndex = firstRoom.x + xHallLength;
            }

            if (firstRoom.y > secondRoom.y)
            {
                int yHallLength = firstRoom.y - secondRoom.y;
                for (int i = 0; i < yHallLength; i++)
                {
                    emptyMap[xIndex, firstRoom.y - i]     = floor;
                    emptyMap[xIndex + 1, firstRoom.y - i] = floor;
                }
            }

            else if (firstRoom.y < secondRoom.y)
            {
                int yHallLength = secondRoom.y - firstRoom.y;
                for (int i = 0; i < yHallLength; i++)
                {
                    emptyMap[xIndex, firstRoom.y + i]     = floor;
                    emptyMap[xIndex + 1, firstRoom.y + i] = floor;
                }
            }
        }
        return(emptyMap);
    }
Example #4
0
        public Transform[,] MakeRoom(Transform[,] emptyMap)
        {
            for (int i = xCorner; i < xCorner + xSize; i++)
            {
                for (int j = yCorner; j < yCorner + ySize; j++)
                {
                    if (CheckOverlap(emptyMap[i, j]))
                    {
                        return(emptyMap);
                    }
                }
            }

            for (int i = xCorner; i < xCorner + xSize; i++)
            {
                for (int j = yCorner; j < yCorner + ySize; j++)
                {
                    emptyMap[i, j] = basicFloor;
                }
            }
            center = FindCenter();
            return(emptyMap);
        }
Example #5
0
    public void PopulateRoomCenters()
    {
        //  TODO: BETTER PROCEDURAL LEVEL GENERATION
        //  For now, we want to pick a random room center and assign it to each room outline.
        //  Plus, we want to make sure our room center knows which room it is in.
        foreach (GameObject outline in generatedRoomOutlines)
        {
            bool generateCenter = true;

            //  Assign the start room' center first (which we know must be at Vector3.zero).
            if (outline.transform.position == Vector3.zero)
            {
                RoomCenter start = Instantiate(centerStart, outline.transform.position, outline.transform.rotation);
                start._myRoom = outline.GetComponent <Room>();

                generateCenter = false;
            }

            //  Assign the end room' center second (which we know must be at Vector3.zero).
            if (outline.transform.position == endRoom.transform.position)
            {
                RoomCenter end = Instantiate(centerEnd, outline.transform.position, outline.transform.rotation);
                end._myRoom = outline.GetComponent <Room>();

                generateCenter = false;
            }

            //  Finally, if we are allowed to generate a center for this room, we simply pick one random center.
            if (generateCenter)
            {
                int randomCenterRoom = Random.Range(0, roomCenters.Length);

                RoomCenter center = Instantiate(roomCenters[randomCenterRoom], outline.transform.position, outline.transform.rotation);
                center._myRoom = outline.GetComponent <Room>();
            }
        }
    }
    void Start()
    {
        // Create dungeon shape
        Instantiate(layoutRoom, generatorPoint.position, generatorPoint.rotation);

        for (int i = 0; i < distanceToEnd; i++)
        {
            selectedDirection = (Direction)Random.Range(0, 4);
            MoveGenerationPoint();

            while (Physics2D.OverlapCircle(generatorPoint.position, .2f, whatIsRoom))
            {
                MoveGenerationPoint();
            }

            GameObject newRoom = Instantiate(layoutRoom, generatorPoint.position, generatorPoint.rotation);
            layoutRoomObjects.Add(newRoom);

            if (i + 1 == distanceToEnd)
            {
                layoutRoomObjects.RemoveAt(layoutRoomObjects.Count - 1);
                endRoom = newRoom;
            }
        }

        // Place room frames
        CreateRoomOutline(Vector3.zero + zOffset);
        foreach (GameObject room in layoutRoomObjects)
        {
            CreateRoomOutline(room.transform.position);
        }
        CreateRoomOutline(endRoom.transform.position);


        // Place room centers
        foreach (GameObject outline in generatedOutlines)
        {
            Vector3    centerPosition = new Vector3(outline.transform.position.x, outline.transform.position.y, outline.transform.position.z + 1);
            RoomCenter currentCenter  = null;

            if (outline.transform.position == Vector3.zero + zOffset)
            {
                currentCenter = Instantiate(centerStart, centerPosition, transform.rotation);
            }
            else if (outline.transform.position == endRoom.transform.position)
            {
                currentCenter = Instantiate(centerEnd, centerPosition, transform.rotation);
                endRoomCenter = currentCenter;
            }
            else
            {
                int centerSelect = Random.Range(0, potentialCenters.Length);
                currentCenter = Instantiate(potentialCenters[centerSelect], centerPosition, transform.rotation);
            }

            roomCenters.Add(centerPosition, currentCenter);
            currentCenter.theRoom         = outline.GetComponent <Room>();
            currentCenter.activator.doors = currentCenter.theRoom.doors;
        }

        foreach (KeyValuePair <Vector3, RoomCenter> entry in roomCenters)
        {
            // Store adjacent information
            Vector3       roomPosition = entry.Key;
            RoomActivator activator    = entry.Value.activator;

            List <Vector3> adjacents = new List <Vector3>()
            {
                roomPosition + new Vector3(0f, yOffset, 0f),
                roomPosition + new Vector3(0f, -yOffset, 0f),
                roomPosition + new Vector3(-xOffset, 0f, 0f),
                roomPosition + new Vector3(xOffset, 0f, 0f)
            };

            foreach (Vector3 roomPos in adjacents)
            {
                activator.adjacent.Add(roomCenters.ContainsKey(roomPos) ? roomCenters[roomPos].activator : null);
            }

            // Store information on normal and boss room(s)
            Vector3 endPos = endRoomCenter.transform.position;
            activator.endRoom = roomPosition != endPos ? roomCenters[endPos].activator : null;
        }
    }
Example #7
0
    private void RoomOutlineGenerator()
    {
        InstantiateRoomOutline(Vector3.zero);

        foreach (GameObject room in _roomObject)
        {
            InstantiateRoomOutline(room.transform.position);
        }

        if (_shop)
        {
            InstantiateRoomOutline(_shopRoom.transform.position);
        }

        if (_chest)
        {
            InstantiateRoomOutline(_chestRoom.transform.position);
        }

        InstantiateRoomOutline(_endRoom.transform.position);

        foreach (GameObject outline in _generateOutline)
        {
            bool generateCenter = true;

            if (outline.transform.position == Vector3.zero)
            {
                RoomCenter centerStartOutline = Instantiate(_centerStart, outline.transform.position, transform.rotation);
                centerStartOutline.TheRoom = outline.GetComponent <Room>();
                centerStartOutline.TheRoom.FirstRoomActive = true;
                centerStartOutline.transform.parent        = _roomSlot.transform;
                generateCenter = false;
            }

            if (outline.transform.position == _endRoom.transform.position)
            {
                RoomCenter centerEndOutline = Instantiate(_centerEnd, outline.transform.position, transform.rotation);
                centerEndOutline.TheRoom          = outline.GetComponent <Room>();
                centerEndOutline.transform.parent = _roomSlot.transform;
                generateCenter = false;
            }

            if (_shop)
            {
                if (outline.transform.position == _shopRoom.transform.position)
                {
                    RoomCenter centerShopOutline = Instantiate(_centerShop, outline.transform.position, transform.rotation);
                    centerShopOutline.TheRoom          = outline.GetComponent <Room>();
                    centerShopOutline.transform.parent = _roomSlot.transform;
                    generateCenter = false;
                }
            }

            if (_chest)
            {
                if (outline.transform.position == _chestRoom.transform.position)
                {
                    RoomCenter centerChestOutline = Instantiate(_centerChest, outline.transform.position, transform.rotation);
                    centerChestOutline.TheRoom          = outline.GetComponent <Room>();
                    centerChestOutline.transform.parent = _roomSlot.transform;
                    generateCenter = false;
                }
            }

            if (generateCenter)
            {
                int        centerSelect  = Random.Range(0, _center.Length);
                RoomCenter centerOutline = Instantiate(_center[centerSelect], outline.transform.position, transform.rotation);
                centerOutline.TheRoom          = outline.GetComponent <Room>();
                centerOutline.transform.parent = _roomSlot.transform;
            }
        }
    }
Example #8
0
 public void Move( RoomCenter room )
 {
     currentRoom = room;
     moveAgent.destination = room.transform.position;
     moveAgent.Resume();
 }
Example #9
0
    // Start is called before the first frame update
    void Start()
    {
        Instantiate(layoutRoom, generatorPoint.position, generatorPoint.rotation).GetComponent <SpriteRenderer>().color = startColor;
        selectedDirection = (Direction)Random.Range(0, 4);
        MoveGenerationPoint();

        for (int i = 0; i < distanceToEnd; i++)
        {
            GameObject newRoom = Instantiate(layoutRoom, generatorPoint.position, generatorPoint.rotation);

            layoutRoomObjects.Add(newRoom);

            if (i + 1 == distanceToEnd)
            {
                newRoom.GetComponent <SpriteRenderer>().color = endColor;
                layoutRoomObjects.RemoveAt(layoutRoomObjects.Count - 1);
                endRoom = newRoom;
            }
            selectedDirection = (Direction)Random.Range(0, 4);
            MoveGenerationPoint();

            while (Physics2D.OverlapCircle(generatorPoint.position, .2f, whatIsRoom))
            {
                MoveGenerationPoint();
            }
        }
        CreateRoomOutline(Vector3.zero);
        foreach (GameObject room in layoutRoomObjects)
        {
            CreateRoomOutline(room.transform.position);
        }
        CreateRoomOutline(endRoom.transform.position);

        foreach (GameObject outline in generatedOutlines)
        {
            bool generateCenter = true;

            if (outline.transform.position == Vector3.zero)
            {
                Room startRoom = Instantiate(centerStart, outline.transform.position, transform.rotation).room = outline.GetComponent <Room>();
                startRoom.noEnemies = true;
                generateCenter      = false;
            }

            if (outline.transform.position == endRoom.transform.position)
            {
                Room endRoom = Instantiate(centerEnd, outline.transform.position, transform.rotation).room = outline.GetComponent <Room>();
                endRoom.noEnemies = true;
                generateCenter    = false;
            }

            if (generateCenter)
            {
                if (outline.GetComponent <Room>().onlyHorizontalEntry)
                {
                    int centerSelected = Random.Range(0, horizontalCenters.Length);
                    currentCenter      = Instantiate(horizontalCenters[centerSelected], outline.transform.position, transform.rotation);
                    currentCenter.room = outline.GetComponent <Room>();
                    foreach (GameObject enemy in currentCenter.enemies)
                    {
                        GameManager.instance.stageEnemies.Add(enemy);
                    }
                }
                else if (outline.GetComponent <Room>().onlyVerticalEntry)
                {
                    int centerSelected = Random.Range(0, verticalCenters.Length);
                    currentCenter      = Instantiate(verticalCenters[centerSelected], outline.transform.position, transform.rotation);
                    currentCenter.room = outline.GetComponent <Room>();
                    foreach (GameObject enemy in currentCenter.enemies)
                    {
                        GameManager.instance.stageEnemies.Add(enemy);
                    }
                }
                else
                {
                    int centerSelected = Random.Range(0, potentialCenters.Length);
                    currentCenter      = Instantiate(potentialCenters[centerSelected], outline.transform.position, transform.rotation);
                    currentCenter.room = outline.GetComponent <Room>();
                    foreach (GameObject enemy in currentCenter.enemies)
                    {
                        GameManager.instance.stageEnemies.Add(enemy);
                    }
                }
            }
        }
        GameManager.instance.GenerateKey();
    }