Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using Photon.Pun;
- using Photon.Realtime;
- using System.Collections;
- using System.Collections.Generic;
- using System.IO;
- using UnityEngine;
- using UnityEngine.SceneManagement;
- public class PhotonRoom : MonoBehaviourPunCallbacks, IInRoomCallbacks
- {
- //Room info
- public static PhotonRoom room;
- private PhotonView PV;
- public bool isGameLoaded;
- public int currentScene;
- //Player info
- Player[] photonPlayers;
- public int playersInRoom;
- public int myNumberInRoom;
- public int playersInGame;
- //Delayed start
- private bool readyToCount;
- private bool readyToStart;
- public float startingTime;
- private float lessThanMaxPlayers;
- private float atMaxPlayers;
- private float timeToStart;
- private void Awake()
- {
- //set up singleton
- if (PhotonRoom.room == null)
- {
- PhotonRoom.room = this;
- }
- else
- {
- if (PhotonRoom.room != this)
- {
- Destroy(PhotonRoom.room.gameObject);
- PhotonRoom.room = this;
- }
- }
- DontDestroyOnLoad(this.gameObject);
- }
- public override void OnEnable()
- {
- //subscribe to functions
- base.OnEnable();
- PhotonNetwork.AddCallbackTarget(this);
- SceneManager.sceneLoaded += OnSceneFinishedLoading;
- }
- public override void OnDisable()
- {
- base.OnDisable();
- PhotonNetwork.RemoveCallbackTarget(this);
- SceneManager.sceneLoaded -= OnSceneFinishedLoading;
- }
- // Use this for initialization
- void Start()
- {
- //set private variables
- PV = GetComponent<PhotonView>();
- readyToCount = false;
- readyToStart = false;
- lessThanMaxPlayers = startingTime;
- atMaxPlayers = 6;
- timeToStart = startingTime;
- }
- // Update is called once per frame
- void Update()
- {
- //for delay start only, count down to start
- if (MultiplayerSetting.multiplayerSetting.delayStart)
- {
- if (playersInRoom == 1)
- {
- RestartTimer();
- }
- if (!isGameLoaded)
- {
- if (readyToStart)
- {
- atMaxPlayers -= Time.deltaTime;
- lessThanMaxPlayers = atMaxPlayers;
- timeToStart = atMaxPlayers;
- }
- else if (readyToCount)
- {
- lessThanMaxPlayers -= Time.deltaTime;
- timeToStart = lessThanMaxPlayers;
- }
- Debug.Log("Display time to start to the players " + timeToStart);
- if (timeToStart <= 0)
- {
- StartGame();
- }
- }
- }
- }
- public override void OnJoinedRoom()
- {
- //sets player data when we join the room
- base.OnJoinedRoom();
- Debug.Log("We are now in a room");
- photonPlayers = PhotonNetwork.PlayerList;
- playersInRoom = photonPlayers.Length;
- myNumberInRoom = playersInRoom;
- PhotonNetwork.NickName = myNumberInRoom.ToString();
- // for delay start only
- if (MultiplayerSetting.multiplayerSetting.delayStart)
- {
- Debug.Log("Displayer players in room out of max players possible (" + playersInRoom + ":" + MultiplayerSetting.multiplayerSetting.maxPlayers + ")");
- if (playersInRoom > 1)
- {
- readyToCount = true;
- }
- if (playersInRoom == MultiplayerSetting.multiplayerSetting.maxPlayers)
- {
- readyToStart = true;
- if (!PhotonNetwork.IsMasterClient)
- return;
- PhotonNetwork.CurrentRoom.IsOpen = false;
- }
- }
- // for non delay start
- else
- {
- StartGame();
- }
- }
- public override void OnPlayerEnteredRoom(Player newPlayer)
- {
- //updates player data when a new player joins
- base.OnPlayerEnteredRoom(newPlayer);
- Debug.Log("A new player has joined the room");
- photonPlayers = PhotonNetwork.PlayerList;
- playersInRoom++;
- //delay start only
- if (MultiplayerSetting.multiplayerSetting.delayStart)
- {
- Debug.Log("Displayer players in room out of max players possible (" + playersInRoom + ":" + MultiplayerSetting.multiplayerSetting.maxPlayers + ")");
- if (playersInRoom > 1)
- {
- readyToCount = true;
- }
- if (playersInRoom == MultiplayerSetting.multiplayerSetting.maxPlayers)
- {
- readyToStart = true;
- if (!PhotonNetwork.IsMasterClient)
- return;
- PhotonNetwork.CurrentRoom.IsOpen = false;
- }
- }
- }
- void StartGame()
- {
- //loads the multiplayer scene for all players
- isGameLoaded = true;
- if (!PhotonNetwork.IsMasterClient)
- return;
- if (MultiplayerSetting.multiplayerSetting.delayStart)
- {
- PhotonNetwork.CurrentRoom.IsOpen = false;
- }
- PhotonNetwork.LoadLevel(MultiplayerSetting.multiplayerSetting.multiplayerScene);
- }
- void RestartTimer()
- {
- //restarts the time for when players leave the room (DelayStart)
- lessThanMaxPlayers = startingTime;
- timeToStart = startingTime;
- atMaxPlayers = 6;
- readyToCount = false;
- readyToStart = false;
- }
- void OnSceneFinishedLoading(Scene scene, LoadSceneMode mode)
- {
- //called when multiplayer scene is loaded
- currentScene = scene.buildIndex;
- if (currentScene == MultiplayerSetting.multiplayerSetting.multiplayerScene)
- {
- isGameLoaded = true;
- //for delay start game
- if (MultiplayerSetting.multiplayerSetting.delayStart)
- {
- PV.RPC("RPC_LoadedGameScene", RpcTarget.MasterClient);
- }
- //for non delay start game
- else
- {
- RPC_CreatePlayer();
- }
- }
- }
- [PunRPC]
- private void RPC_LoadedGameScene()
- {
- playersInGame++;
- if (playersInGame == PhotonNetwork.PlayerList.Length)
- {
- PV.RPC("RPC_CreatePlayer", RpcTarget.All);
- }
- }
- [PunRPC]
- private void RPC_CreatePlayer()
- {
- //creates player network controller but not player character
- PhotonNetwork.Instantiate(Path.Combine("PhotonPrefabs", "PhotonNetworkPlayer"), transform.position, Quaternion.identity, 0);
- }
- public override void OnPlayerLeftRoom(Player otherPlayer)
- {
- base.OnPlayerLeftRoom(otherPlayer);
- Debug.Log(otherPlayer.NickName + " has left the game");
- playersInRoom--;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement