Advertisement
Guest User

Untitled

a guest
Dec 19th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.95 KB | None | 0 0
  1. using Photon.Pun;
  2. using Photon.Realtime;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. using System.IO;
  6. using UnityEngine;
  7. using UnityEngine.SceneManagement;
  8.  
  9. public class PhotonRoom : MonoBehaviourPunCallbacks, IInRoomCallbacks
  10. {
  11.  
  12. //Room info
  13. public static PhotonRoom room;
  14. private PhotonView PV;
  15.  
  16. public bool isGameLoaded;
  17. public int currentScene;
  18.  
  19. //Player info
  20. Player[] photonPlayers;
  21. public int playersInRoom;
  22. public int myNumberInRoom;
  23.  
  24. public int playersInGame;
  25.  
  26. //Delayed start
  27. private bool readyToCount;
  28. private bool readyToStart;
  29. public float startingTime;
  30. private float lessThanMaxPlayers;
  31. private float atMaxPlayers;
  32. private float timeToStart;
  33.  
  34. private void Awake()
  35. {
  36. //set up singleton
  37. if (PhotonRoom.room == null)
  38. {
  39. PhotonRoom.room = this;
  40. }
  41. else
  42. {
  43. if (PhotonRoom.room != this)
  44. {
  45. Destroy(PhotonRoom.room.gameObject);
  46. PhotonRoom.room = this;
  47. }
  48. }
  49. DontDestroyOnLoad(this.gameObject);
  50. }
  51.  
  52. public override void OnEnable()
  53. {
  54. //subscribe to functions
  55. base.OnEnable();
  56. PhotonNetwork.AddCallbackTarget(this);
  57. SceneManager.sceneLoaded += OnSceneFinishedLoading;
  58. }
  59.  
  60. public override void OnDisable()
  61. {
  62. base.OnDisable();
  63. PhotonNetwork.RemoveCallbackTarget(this);
  64. SceneManager.sceneLoaded -= OnSceneFinishedLoading;
  65. }
  66.  
  67. // Use this for initialization
  68. void Start()
  69. {
  70. //set private variables
  71. PV = GetComponent<PhotonView>();
  72. readyToCount = false;
  73. readyToStart = false;
  74. lessThanMaxPlayers = startingTime;
  75. atMaxPlayers = 6;
  76. timeToStart = startingTime;
  77. }
  78.  
  79. // Update is called once per frame
  80. void Update()
  81. {
  82. //for delay start only, count down to start
  83. if (MultiplayerSetting.multiplayerSetting.delayStart)
  84. {
  85. if (playersInRoom == 1)
  86. {
  87. RestartTimer();
  88. }
  89. if (!isGameLoaded)
  90. {
  91. if (readyToStart)
  92. {
  93. atMaxPlayers -= Time.deltaTime;
  94. lessThanMaxPlayers = atMaxPlayers;
  95. timeToStart = atMaxPlayers;
  96. }
  97. else if (readyToCount)
  98. {
  99. lessThanMaxPlayers -= Time.deltaTime;
  100. timeToStart = lessThanMaxPlayers;
  101. }
  102. Debug.Log("Display time to start to the players " + timeToStart);
  103. if (timeToStart <= 0)
  104. {
  105. StartGame();
  106. }
  107. }
  108. }
  109. }
  110.  
  111. public override void OnJoinedRoom()
  112. {
  113. //sets player data when we join the room
  114. base.OnJoinedRoom();
  115. Debug.Log("We are now in a room");
  116. photonPlayers = PhotonNetwork.PlayerList;
  117. playersInRoom = photonPlayers.Length;
  118. myNumberInRoom = playersInRoom;
  119. PhotonNetwork.NickName = myNumberInRoom.ToString();
  120. // for delay start only
  121. if (MultiplayerSetting.multiplayerSetting.delayStart)
  122. {
  123. Debug.Log("Displayer players in room out of max players possible (" + playersInRoom + ":" + MultiplayerSetting.multiplayerSetting.maxPlayers + ")");
  124. if (playersInRoom > 1)
  125. {
  126. readyToCount = true;
  127. }
  128. if (playersInRoom == MultiplayerSetting.multiplayerSetting.maxPlayers)
  129. {
  130. readyToStart = true;
  131. if (!PhotonNetwork.IsMasterClient)
  132. return;
  133. PhotonNetwork.CurrentRoom.IsOpen = false;
  134. }
  135. }
  136. // for non delay start
  137. else
  138. {
  139. StartGame();
  140. }
  141. }
  142.  
  143. public override void OnPlayerEnteredRoom(Player newPlayer)
  144. {
  145. //updates player data when a new player joins
  146. base.OnPlayerEnteredRoom(newPlayer);
  147. Debug.Log("A new player has joined the room");
  148. photonPlayers = PhotonNetwork.PlayerList;
  149. playersInRoom++;
  150. //delay start only
  151. if (MultiplayerSetting.multiplayerSetting.delayStart)
  152. {
  153. Debug.Log("Displayer players in room out of max players possible (" + playersInRoom + ":" + MultiplayerSetting.multiplayerSetting.maxPlayers + ")");
  154. if (playersInRoom > 1)
  155. {
  156. readyToCount = true;
  157. }
  158. if (playersInRoom == MultiplayerSetting.multiplayerSetting.maxPlayers)
  159. {
  160. readyToStart = true;
  161. if (!PhotonNetwork.IsMasterClient)
  162. return;
  163. PhotonNetwork.CurrentRoom.IsOpen = false;
  164. }
  165. }
  166. }
  167.  
  168. void StartGame()
  169. {
  170. //loads the multiplayer scene for all players
  171. isGameLoaded = true;
  172. if (!PhotonNetwork.IsMasterClient)
  173. return;
  174. if (MultiplayerSetting.multiplayerSetting.delayStart)
  175. {
  176. PhotonNetwork.CurrentRoom.IsOpen = false;
  177. }
  178. PhotonNetwork.LoadLevel(MultiplayerSetting.multiplayerSetting.multiplayerScene);
  179. }
  180.  
  181. void RestartTimer()
  182. {
  183. //restarts the time for when players leave the room (DelayStart)
  184. lessThanMaxPlayers = startingTime;
  185. timeToStart = startingTime;
  186. atMaxPlayers = 6;
  187. readyToCount = false;
  188. readyToStart = false;
  189. }
  190.  
  191. void OnSceneFinishedLoading(Scene scene, LoadSceneMode mode)
  192. {
  193. //called when multiplayer scene is loaded
  194. currentScene = scene.buildIndex;
  195. if (currentScene == MultiplayerSetting.multiplayerSetting.multiplayerScene)
  196. {
  197. isGameLoaded = true;
  198. //for delay start game
  199. if (MultiplayerSetting.multiplayerSetting.delayStart)
  200. {
  201. PV.RPC("RPC_LoadedGameScene", RpcTarget.MasterClient);
  202. }
  203. //for non delay start game
  204. else
  205. {
  206. RPC_CreatePlayer();
  207. }
  208. }
  209. }
  210.  
  211. [PunRPC]
  212. private void RPC_LoadedGameScene()
  213. {
  214. playersInGame++;
  215. if (playersInGame == PhotonNetwork.PlayerList.Length)
  216. {
  217. PV.RPC("RPC_CreatePlayer", RpcTarget.All);
  218. }
  219. }
  220.  
  221. [PunRPC]
  222. private void RPC_CreatePlayer()
  223. {
  224. //creates player network controller but not player character
  225. PhotonNetwork.Instantiate(Path.Combine("PhotonPrefabs", "PhotonNetworkPlayer"), transform.position, Quaternion.identity, 0);
  226. }
  227.  
  228. public override void OnPlayerLeftRoom(Player otherPlayer)
  229. {
  230. base.OnPlayerLeftRoom(otherPlayer);
  231. Debug.Log(otherPlayer.NickName + " has left the game");
  232. playersInRoom--;
  233. }
  234. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement