-
Notifications
You must be signed in to change notification settings - Fork 0
/
NetworkManager.cs
151 lines (128 loc) · 3.76 KB
/
NetworkManager.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
using System.Collections;
using System.Collections.Generic;
using Photon.Pun;
using Photon.Realtime;
using UnityEngine;
using UnityEngine.SceneManagement;
using PN = Photon.Pun.PhotonNetwork;
public class NetworkManager : MonoBehaviourPunCallbacks, IConnectionCallbacks
{
private NetworkManager() { }
private static NetworkManager instance;
public static NetworkManager Instance
{
get
{
if(instance == null)
{
var obj = FindObjectOfType<NetworkManager>();
if (obj != null)
instance = obj;
}
return instance;
}
}
public GameObject cameraArm;
public GameObject player;
GameObject playerNameTextUI;
public string room_name;
Vector3 lastPosition = Vector3.zero;
public string characterName = "Player";
public bool connection = false;
private void Awake()
{
if (instance == null)
{
instance = GetComponent<NetworkManager>();
gameObject.SetActive(true);
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(gameObject);
}
room_name = "Campus";
}
public override void OnConnectedToMaster()
{
Debug.Log("Connected");
PN.JoinLobby();
}
public override void OnJoinedLobby()
{
PN.JoinOrCreateRoom(room_name, new RoomOptions { MaxPlayers = 10 }, null);
}
public override void OnPlayerEnteredRoom(Player newPlayer)
{
if (!room_name.Equals("Campus") && PlayfabManager.Instance.playerJob.Equals("교수"))
{
ClassProcessManager.Instance.SomeoneJoinToClass();
}
}
public void JoinToClass(string className, string classData)
{
PN.LeaveRoom();
string[] splitedClassData = UtilityMethods.SplitTimeTableUserData(classData);
if (UtilityMethods.DetermineAllowClassEnter(splitedClassData))
{
room_name = splitedClassData[1] + splitedClassData[0];
Debug.Log(" 수업 시간입니다. " + room_name + " 수업에 입장합니다.");
}
else
{
room_name = "OpenClass";
Debug.Log(className + " 수업 시간이 아닙니다. 공개 수업방으로 입장합니다.");
}
StartCoroutine("LoadClassRoomScene", "ClassroomScene");
ChatManager.Instance.LeaveChat();
lastPosition = player.transform.position;
player.transform.position = Vector3.zero;
}
IEnumerator LoadClassRoomScene(string scene_name)
{
AsyncOperation asyncLoadScene = SceneManager.LoadSceneAsync(scene_name);
while (!asyncLoadScene.isDone)
{
yield return null;
}
ClassProcessManager.Instance.enabled = true;
}
public void JoinToCampus()
{
room_name = "Campus";
PN.LeaveRoom();
ChatManager.Instance.LeaveChat();
Destroy(ConferenceManager.Instance.gameObject);
SceneManager.LoadScene("SampleScene");
player.transform.position = lastPosition;
}
public override void OnCreatedRoom()
{
Debug.Log("Create");
}
public override void OnJoinedRoom()
{
Debug.Log(PN.CurrentRoom);
GameStart();
}
public void LeaveGame()
{
lastPosition = Vector3.zero;
PN.Disconnect();
}
void GameStart()
{
SpawnPlayer();
ChatManager.Instance.currentChannelName = room_name;
ChatManager.Instance.ChatStart();
UIManager.Instance.ShowUI(Define.UI.HUD);
}
void SpawnPlayer()
{
if (room_name.Equals("Campus"))
player = PN.Instantiate(characterName, lastPosition, Quaternion.identity);
else
player = PN.Instantiate(characterName, Vector3.zero, Quaternion.identity);
ConferenceManager.Instance.photonView.RequestOwnership();
}
}