Ejemplo n.º 1
0
        public void CreateRoomsOutLine(Vector3 roomPosition, RoomConditions conditions)
        {
            //Debug.Log("RoomPosition " + roomPosition.ToString() + " room condition " + conditions.ToString());


            bool    roomAbove    = false;
            bool    roomBelow    = false;
            bool    roomLeft     = false;
            bool    roomRight    = false;
            Vector3 postionAbove = roomPosition + new Vector3(0, yOffset, 0);
            Vector3 postionBelow = roomPosition + new Vector3(0, -yOffset, 0);

            Vector3 postionLeft  = roomPosition + new Vector3(-xOffset, 0, 0);
            Vector3 postionRight = roomPosition + new Vector3(xOffset, 0, 0);

            for (int i = 0; i < roomPositions.Count; i++)
            {
                if (postionAbove == roomPositions[i])
                {
                    roomAbove = true;
                }
                if (postionBelow == roomPositions[i])
                {
                    roomBelow = true;
                }
                if (postionLeft == roomPositions[i])
                {
                    roomLeft = true;
                }
                if (postionRight == roomPositions[i])
                {
                    roomRight = true;
                }
            }

            int directionCount = 0;

            if (roomAbove)
            {
                directionCount++;
            }
            if (roomBelow)
            {
                directionCount++;
            }
            if (roomLeft)
            {
                directionCount++;
            }
            if (roomRight)
            {
                directionCount++;
            }

            //Debug.Log("create room at " + roomPosition + " roomAbove: " + roomAbove + " roomBelow: " + roomBelow + " roomleft: " + roomLeft + " roomRight: " + roomRight);

            switch (directionCount)
            {
            case 1:
                if (roomAbove)
                {
                    roomList.Add(RandomRoom(RoomTypes.singleUp, roomPosition, conditions));
                }
                else if (roomBelow)
                {
                    roomList.Add(RandomRoom(RoomTypes.singleDown, roomPosition, conditions));
                }
                else if (roomLeft)
                {
                    roomList.Add(RandomRoom(RoomTypes.singleLeft, roomPosition, conditions));
                }
                else
                {
                    //right room
                    roomList.Add(RandomRoom(RoomTypes.singleRight, roomPosition, conditions));
                }
                break;

            case 2:
                if (roomAbove && roomBelow)
                {
                    roomList.Add(RandomRoom(RoomTypes.DoubleUpDown, roomPosition, conditions));
                }
                else if (roomLeft && roomRight)
                {
                    roomList.Add(RandomRoom(RoomTypes.DoubleLeftRight, roomPosition, conditions));
                }
                else if (roomAbove && roomLeft)
                {
                    roomList.Add(RandomRoom(RoomTypes.DoubleUpLeft, roomPosition, conditions));
                }
                else if (roomAbove && roomRight)
                {
                    roomList.Add(RandomRoom(RoomTypes.DoubleUpRight, roomPosition, conditions));
                }
                else if (roomBelow && roomLeft)
                {
                    roomList.Add(RandomRoom(RoomTypes.DoubleDownLeft, roomPosition, conditions));
                }
                else if (roomBelow && roomRight)
                {
                    roomList.Add(RandomRoom(RoomTypes.DoubleDownRight, roomPosition, conditions));
                }
                else
                {
                    Debug.LogError("three way room error no logic found");
                }
                break;

            case 3:
                if (roomAbove && roomBelow && roomLeft)
                {
                    roomList.Add(RandomRoom(RoomTypes.trippleUpDownLeft, roomPosition, conditions));
                }
                else if (roomAbove && roomBelow && roomRight)
                {
                    roomList.Add(RandomRoom(RoomTypes.trippleUpDownRight, roomPosition, conditions));
                }
                else if (roomAbove && roomLeft && roomRight)
                {
                    roomList.Add(RandomRoom(RoomTypes.trippleUpLeftRight, roomPosition, conditions));
                }
                else if (roomBelow && roomLeft && roomRight)
                {
                    roomList.Add(RandomRoom(RoomTypes.trippleDownLeftRight, roomPosition, conditions));
                }
                break;

            case 4:
                roomList.Add(RandomRoom(RoomTypes.Fourway, roomPosition, conditions));
                break;

            default:
                //Debug.LogError("found no room exisits");
                break;
            }
        }
Ejemplo n.º 2
0
        private GameObject RandomRoom(RoomPrefabSubTypes selection, Vector3 position, RoomConditions conditions)
        {
            GameObject roomType = null;

            //make it so the enterance and exit will never be a hallway
            switch (conditions)
            {
            case RoomConditions.StairRoom:

                roomType = RoomTypes.getRandomRoom(selection, RoomPlacementLogic.RoomType.OpenRoom);

                break;

            case RoomConditions.TreasureRoom:

                roomType = RoomTypes.getRandomRoom(selection, RoomPlacementLogic.RoomType.TreasureRoom);
                break;

            case RoomConditions.CombatRoom:
                //roomType = RoomTypes.getRandomRoom(selection, RoomPlacementLogic.RoomType.CombatRoom);

                //this is save time on create new room set with space for combat
                roomType = RoomTypes.getRandomRoom(selection, RoomPlacementLogic.RoomType.OpenRoom);
                Debug.Log("CombatRoom: " + roomType.name);
                //roomType.GetComponent<RoomPlacementLogic>().combatRoom = true;

                break;

            case RoomConditions.DefaultRoom:

                //everything but treasure room and hidden rooms
                int rand = Random.Range(0, 2);

                if (rand == 1)
                {
                    roomType = RoomTypes.getRandomRoom(selection, RoomPlacementLogic.RoomType.OpenRoom);
                }
                else
                {
                    roomType = RoomTypes.getRandomRoom(selection, RoomPlacementLogic.RoomType.Hallway);
                }

                break;
            }

            if (roomType == null)
            {
                Debug.LogError("Room creation returned Null. Issue with setup " + selection.ToString() + " conditions " + conditions.ToString());
            }

            GameObject room = Instantiate(roomType);

            room.transform.parent        = RoomParent.transform;
            room.transform.localPosition = position;

            return(room);
        }
Ejemplo n.º 3
0
        public void GenterateDungeon()
        {
            DungeonTracker.instance.finishedLoadingLevel = false;
            Debug.Log("GenterateDungeon: Entered");

            roomList = new List <GameObject>();
            int roomIndex = 0; //help to figure out if certain room should be special

            treasureRoomIndexs = new List <int>();
            combatRoomIndexs   = new List <int>();
            calcuateSpecailRooms();

            //build out the rooms

            CreateRoomsOutLine(Vector3.zero, RoomConditions.StairRoom); //starting room


            for (int i = 1; i < roomPositions.Count - 1; i++)
            {
                RoomConditions conditions = RoomConditions.DefaultRoom;

                if (treasureRoomIndexs.Contains(roomIndex))
                {
                    conditions = RoomConditions.TreasureRoom;
                }

                if (combatRoomIndexs.Contains(roomIndex))
                {
                    conditions = RoomConditions.CombatRoom;
                }

                CreateRoomsOutLine(roomPositions[i], conditions);
                roomIndex++;
            }

            CreateRoomsOutLine(endRoom.transform.position, RoomConditions.StairRoom);


            doorList = new List <GameObject>();

            //creating props for the room
            for (int i = 0; i < roomList.Count; i++)
            {
                RoomPlacementLogic rp = roomList[i].GetComponent <RoomPlacementLogic>();

                if (i == 0)
                //if (roomList[i].transform.position == Vector3.zero)
                {
                    //start position
                    upStairs = Instantiate(RoomObjPrefabs.StairsUp, RoomProps.transform).GetComponent <DungeonStairs>();
                    upStairs.transform.position = rp.StairPositions[0].position;
                }
                else if (i == roomList.Count - 1) //(roomList[i].transform.position == endRoom.transform.position)
                {
                    //end room
                    downStairs = Instantiate(RoomObjPrefabs.StairsDown, RoomProps.transform).GetComponent <DungeonStairs>();
                    downStairs.transform.position = rp.StairPositions[0].position;
                }
                else
                {
                    //all other room types
                }

                //door logic
                //AddDoorLogic(rp);
            }

            //DungeonTracker.instance.finishedLoadingLevel = true;

            StartCoroutine(buildMesh());
            //Debug.Log("levelGenerator: finished adding stairs and doors");
        }