Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using System.IO;
- using System.Linq;
- public class roomController : MonoBehaviour {
- // public doorController[] doorSprites;
- public persistence.roomSizeEnum roomSize;
- public int arrayValue;
- public doorController southDoor;
- public doorController westDoor;
- public doorController northDoor;
- public doorController eastDoor;
- public List<RoomSpawnPoint> spawnPoints;
- public Transform EastAttachPoint;
- public Transform WestAttachPoint;
- public Transform NorthAttachPoint;
- public Transform SouthAttachPoint;
- private roomTemplates roomSpawner;
- public roomBoundsControl roomBounds;
- private int roomNumber;
- public void intRoom(persistence.CardnialDirectionEnum incomingDirection, roomTemplates incomingRoomTemplate, int currentRoomNumber)
- {
- StartCoroutine (spawnRoom(incomingDirection));
- roomSpawner = incomingRoomTemplate;
- roomNumber = currentRoomNumber;
- }
- public IEnumerator spawnRoom(persistence.CardnialDirectionEnum incomingDirection)
- {
- southDoor.makeDoorWall (true);
- westDoor.makeDoorWall (true);
- northDoor.makeDoorWall (true);
- eastDoor.makeDoorWall (true);
- yield return new WaitForSeconds (0.01f);
- //Get existing doors
- //change incoming door back to red
- switch (incomingDirection) {
- case persistence.CardnialDirectionEnum.SOUTH:
- southDoor.makeDoorWall (false);
- break;
- case persistence.CardnialDirectionEnum.WEST:
- westDoor.makeDoorWall(false);
- break;
- case persistence.CardnialDirectionEnum.NORTH:
- northDoor.makeDoorWall(false);
- break;
- case persistence.CardnialDirectionEnum.EAST:
- eastDoor.makeDoorWall(false);
- break;
- }
- //Pick from remaining doors to change to red
- Transform[] transformsInChildren = GetComponentsInChildren <Transform> () as Transform[];
- spawnPoints = new List<RoomSpawnPoint> ();
- for (int i = 0; i < transformsInChildren.Length; i++) {
- if (transformsInChildren [i].CompareTag ("RoomSpawnPoint")) {
- spawnPoints.Add (transformsInChildren [i].gameObject.GetComponent<RoomSpawnPoint> ());
- }
- }
- yield return new WaitForSeconds (0.01f);
- if (spawnPoints.Count != 0) {
- //Chose amount of random points
- spawnPoints = spawnPoints.OrderBy (i => Random.value).ToList ();
- int RandomizeExitPoints = Random.Range (0, 2);
- //Open Spawning
- if (roomSpawner.perferedDirection == persistence.PerferedDirectionEnum.ANY) {
- Debug.Log ("Spawning Any Direction");
- for (int i = 0; i < RandomizeExitPoints + 1; i++) {
- //Toggle next door
- if (i < spawnPoints.Count) {
- RoomSpawnPoint nextDoor = spawnPoints [i];
- sendSpawnForNextDoor (nextDoor.thisIS);
- }
- }
- } else {
- //Directional Spawning
- List <RoomSpawnPoint> acceptableSpawns = new List<RoomSpawnPoint> ();
- switch (roomSpawner.perferedDirection)
- {
- case persistence.PerferedDirectionEnum.SOUTHWEST:
- acceptableSpawns = returnAcceptablePoints (persistence.CardnialDirectionEnum.SOUTH, persistence.CardnialDirectionEnum.WEST, spawnPoints);
- break;
- case persistence.PerferedDirectionEnum.NORTHWEST:
- acceptableSpawns = returnAcceptablePoints (persistence.CardnialDirectionEnum.NORTH, persistence.CardnialDirectionEnum.WEST, spawnPoints);
- break;
- case persistence.PerferedDirectionEnum.NORTHEAST:
- acceptableSpawns = returnAcceptablePoints (persistence.CardnialDirectionEnum.NORTH, persistence.CardnialDirectionEnum.EAST, spawnPoints);
- break;
- case persistence.PerferedDirectionEnum.SOUTHEAST:
- acceptableSpawns = returnAcceptablePoints (persistence.CardnialDirectionEnum.SOUTH, persistence.CardnialDirectionEnum.EAST, spawnPoints);
- break;
- }
- //No points returned
- if (acceptableSpawns.Count > 0) {
- //We have points
- acceptableSpawns = acceptableSpawns.OrderBy (i => Random.value).ToList ();
- for (int i = 0; i < RandomizeExitPoints + 1; i++) {
- //Toggle next door
- if (i < acceptableSpawns.Count) {
- RoomSpawnPoint nextDoor = acceptableSpawns [i];
- sendSpawnForNextDoor (nextDoor.thisIS);
- }
- }
- }
- }
- }
- //Destroy remaining exit nodes
- for (int i = 0; i < spawnPoints.Count; i++) {
- if (spawnPoints[i] != null)
- spawnPoints [i].gameObject.SetActive (false);
- }
- if (roomNumber % roomSpawner.teleporterSpawnRate == 0) {
- roomBounds.setTeleporter (true);
- } else {
- roomBounds.setTeleporter (false);
- }
- //Turn off lights
- for (int i = 0; i < roomBounds.lightsList.Count; i++) {
- roomBounds.lightsList [i].SetActive (false);
- }
- }
- List<RoomSpawnPoint> returnAcceptablePoints (persistence.CardnialDirectionEnum firstVal, persistence.CardnialDirectionEnum secondVal, List<RoomSpawnPoint> incomingList)
- {
- List<RoomSpawnPoint> listToReturn = new List<RoomSpawnPoint> ();
- for (int i = 0; i < incomingList.Count; i++) {
- if (incomingList [i].thisIS == firstVal || incomingList [i].thisIS == secondVal) {
- listToReturn.Add (incomingList[i]);
- }
- }
- return listToReturn;
- }
- void sendSpawnForNextDoor(persistence.CardnialDirectionEnum incomingDirection)
- {
- switch (incomingDirection) {
- case persistence.CardnialDirectionEnum.SOUTH:
- southDoor.makeDoorWall (false);
- roomSpawner.spawnIntHallway (persistence.CardnialDirectionEnum.SOUTH, SouthAttachPoint.position, this.gameObject);
- break;
- case persistence.CardnialDirectionEnum.WEST:
- westDoor.makeDoorWall (false);
- roomSpawner.spawnIntHallway (persistence.CardnialDirectionEnum.EAST, WestAttachPoint.position, this.gameObject);
- break;
- case persistence.CardnialDirectionEnum.NORTH:
- northDoor.makeDoorWall (false);
- roomSpawner.spawnIntHallway (persistence.CardnialDirectionEnum.NORTH, NorthAttachPoint.position, this.gameObject);
- break;
- case persistence.CardnialDirectionEnum.EAST:
- eastDoor.makeDoorWall (false);
- roomSpawner.spawnIntHallway (persistence.CardnialDirectionEnum.WEST, EastAttachPoint.position, this.gameObject);
- break;
- }
- }
- public void lockDoors()
- {
- if (!southDoor.isAWall) {
- southDoor.lockDoor ();;
- }
- if (!northDoor.isAWall) {
- northDoor.lockDoor ();;
- }
- if (!eastDoor.isAWall) {
- eastDoor.lockDoor ();;
- }
- if (!westDoor.isAWall) {
- westDoor.lockDoor ();;
- }
- }
- public void unlockDoors()
- {
- if (!southDoor.isAWall) {
- southDoor.unLockDoor ();;
- }
- if (!northDoor.isAWall) {
- northDoor.unLockDoor ();;
- }
- if (!eastDoor.isAWall) {
- eastDoor.unLockDoor ();;
- }
- if (!westDoor.isAWall) {
- westDoor.unLockDoor ();;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment