Guest User

Untitled

a guest
Sep 4th, 2019
241
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.52 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using System.IO;
  5. using System.Linq;
  6. public class roomController : MonoBehaviour {
  7. // public doorController[] doorSprites;
  8. public persistence.roomSizeEnum roomSize;
  9. public int arrayValue;
  10. public doorController southDoor;
  11. public doorController westDoor;
  12. public doorController northDoor;
  13. public doorController eastDoor;
  14. public List<RoomSpawnPoint> spawnPoints;
  15. public Transform EastAttachPoint;
  16. public Transform WestAttachPoint;
  17. public Transform NorthAttachPoint;
  18. public Transform SouthAttachPoint;
  19. private roomTemplates roomSpawner;
  20. public roomBoundsControl roomBounds;
  21. private int roomNumber;
  22. public void intRoom(persistence.CardnialDirectionEnum incomingDirection, roomTemplates incomingRoomTemplate, int currentRoomNumber)
  23. {
  24. StartCoroutine (spawnRoom(incomingDirection));
  25. roomSpawner = incomingRoomTemplate;
  26. roomNumber = currentRoomNumber;
  27. }
  28. public IEnumerator spawnRoom(persistence.CardnialDirectionEnum incomingDirection)
  29. {
  30. southDoor.makeDoorWall (true);
  31. westDoor.makeDoorWall (true);
  32. northDoor.makeDoorWall (true);
  33. eastDoor.makeDoorWall (true);
  34. yield return new WaitForSeconds (0.01f);
  35. //Get existing doors
  36. //change incoming door back to red
  37. switch (incomingDirection) {
  38. case persistence.CardnialDirectionEnum.SOUTH:
  39. southDoor.makeDoorWall (false);
  40. break;
  41. case persistence.CardnialDirectionEnum.WEST:
  42. westDoor.makeDoorWall(false);
  43. break;
  44. case persistence.CardnialDirectionEnum.NORTH:
  45. northDoor.makeDoorWall(false);
  46. break;
  47. case persistence.CardnialDirectionEnum.EAST:
  48. eastDoor.makeDoorWall(false);
  49. break;
  50. }
  51. //Pick from remaining doors to change to red
  52. Transform[] transformsInChildren = GetComponentsInChildren <Transform> () as Transform[];
  53. spawnPoints = new List<RoomSpawnPoint> ();
  54. for (int i = 0; i < transformsInChildren.Length; i++) {
  55. if (transformsInChildren [i].CompareTag ("RoomSpawnPoint")) {
  56. spawnPoints.Add (transformsInChildren [i].gameObject.GetComponent<RoomSpawnPoint> ());
  57. }
  58. }
  59. yield return new WaitForSeconds (0.01f);
  60. if (spawnPoints.Count != 0) {
  61. //Chose amount of random points
  62. spawnPoints = spawnPoints.OrderBy (i => Random.value).ToList ();
  63. int RandomizeExitPoints = Random.Range (0, 2);
  64. //Open Spawning
  65. if (roomSpawner.perferedDirection == persistence.PerferedDirectionEnum.ANY) {
  66. Debug.Log ("Spawning Any Direction");
  67. for (int i = 0; i < RandomizeExitPoints + 1; i++) {
  68. //Toggle next door
  69. if (i < spawnPoints.Count) {
  70. RoomSpawnPoint nextDoor = spawnPoints [i];
  71. sendSpawnForNextDoor (nextDoor.thisIS);
  72. }
  73. }
  74. } else {
  75. //Directional Spawning
  76. List <RoomSpawnPoint> acceptableSpawns = new List<RoomSpawnPoint> ();
  77. switch (roomSpawner.perferedDirection)
  78. {
  79. case persistence.PerferedDirectionEnum.SOUTHWEST:
  80. acceptableSpawns = returnAcceptablePoints (persistence.CardnialDirectionEnum.SOUTH, persistence.CardnialDirectionEnum.WEST, spawnPoints);
  81. break;
  82. case persistence.PerferedDirectionEnum.NORTHWEST:
  83. acceptableSpawns = returnAcceptablePoints (persistence.CardnialDirectionEnum.NORTH, persistence.CardnialDirectionEnum.WEST, spawnPoints);
  84. break;
  85. case persistence.PerferedDirectionEnum.NORTHEAST:
  86. acceptableSpawns = returnAcceptablePoints (persistence.CardnialDirectionEnum.NORTH, persistence.CardnialDirectionEnum.EAST, spawnPoints);
  87. break;
  88. case persistence.PerferedDirectionEnum.SOUTHEAST:
  89. acceptableSpawns = returnAcceptablePoints (persistence.CardnialDirectionEnum.SOUTH, persistence.CardnialDirectionEnum.EAST, spawnPoints);
  90. break;
  91. }
  92. //No points returned
  93. if (acceptableSpawns.Count > 0) {
  94. //We have points
  95. acceptableSpawns = acceptableSpawns.OrderBy (i => Random.value).ToList ();
  96. for (int i = 0; i < RandomizeExitPoints + 1; i++) {
  97. //Toggle next door
  98. if (i < acceptableSpawns.Count) {
  99. RoomSpawnPoint nextDoor = acceptableSpawns [i];
  100. sendSpawnForNextDoor (nextDoor.thisIS);
  101. }
  102. }
  103. }
  104. }
  105. }
  106. //Destroy remaining exit nodes
  107. for (int i = 0; i < spawnPoints.Count; i++) {
  108. if (spawnPoints[i] != null)
  109. spawnPoints [i].gameObject.SetActive (false);
  110. }
  111. if (roomNumber % roomSpawner.teleporterSpawnRate == 0) {
  112. roomBounds.setTeleporter (true);
  113. } else {
  114. roomBounds.setTeleporter (false);
  115. }
  116. //Turn off lights
  117. for (int i = 0; i < roomBounds.lightsList.Count; i++) {
  118. roomBounds.lightsList [i].SetActive (false);
  119. }
  120. }
  121. List<RoomSpawnPoint> returnAcceptablePoints (persistence.CardnialDirectionEnum firstVal, persistence.CardnialDirectionEnum secondVal, List<RoomSpawnPoint> incomingList)
  122. {
  123. List<RoomSpawnPoint> listToReturn = new List<RoomSpawnPoint> ();
  124. for (int i = 0; i < incomingList.Count; i++) {
  125. if (incomingList [i].thisIS == firstVal || incomingList [i].thisIS == secondVal) {
  126. listToReturn.Add (incomingList[i]);
  127. }
  128. }
  129. return listToReturn;
  130. }
  131. void sendSpawnForNextDoor(persistence.CardnialDirectionEnum incomingDirection)
  132. {
  133. switch (incomingDirection) {
  134. case persistence.CardnialDirectionEnum.SOUTH:
  135. southDoor.makeDoorWall (false);
  136. roomSpawner.spawnIntHallway (persistence.CardnialDirectionEnum.SOUTH, SouthAttachPoint.position, this.gameObject);
  137. break;
  138. case persistence.CardnialDirectionEnum.WEST:
  139. westDoor.makeDoorWall (false);
  140. roomSpawner.spawnIntHallway (persistence.CardnialDirectionEnum.EAST, WestAttachPoint.position, this.gameObject);
  141. break;
  142. case persistence.CardnialDirectionEnum.NORTH:
  143. northDoor.makeDoorWall (false);
  144. roomSpawner.spawnIntHallway (persistence.CardnialDirectionEnum.NORTH, NorthAttachPoint.position, this.gameObject);
  145. break;
  146. case persistence.CardnialDirectionEnum.EAST:
  147. eastDoor.makeDoorWall (false);
  148. roomSpawner.spawnIntHallway (persistence.CardnialDirectionEnum.WEST, EastAttachPoint.position, this.gameObject);
  149. break;
  150.  
  151. }
  152. }
  153. public void lockDoors()
  154. {
  155. if (!southDoor.isAWall) {
  156. southDoor.lockDoor ();;
  157. }
  158. if (!northDoor.isAWall) {
  159. northDoor.lockDoor ();;
  160. }
  161. if (!eastDoor.isAWall) {
  162. eastDoor.lockDoor ();;
  163. }
  164. if (!westDoor.isAWall) {
  165. westDoor.lockDoor ();;
  166. }
  167. }
  168. public void unlockDoors()
  169. {
  170. if (!southDoor.isAWall) {
  171. southDoor.unLockDoor ();;
  172. }
  173. if (!northDoor.isAWall) {
  174. northDoor.unLockDoor ();;
  175. }
  176. if (!eastDoor.isAWall) {
  177. eastDoor.unLockDoor ();;
  178. }
  179. if (!westDoor.isAWall) {
  180. westDoor.unLockDoor ();;
  181. }
  182. }
  183. }
Advertisement
Add Comment
Please, Sign In to add comment