Files
2026-02-21 16:45:37 +08:00

203 lines
5.7 KiB
C#

using UnityEngine;
public class WorkerMenu : MonoBehaviour
{
public GUISkin Skin;
public Vector2 WidthAndHeight = new Vector2(600f, 400f);
private string roomName = "myRoom";
private Vector2 scrollPos = Vector2.zero;
private bool connectFailed;
public static readonly string SceneNameMenu = "DemoWorker-Scene";
public static readonly string SceneNameGame = "DemoWorkerGame-Scene";
private string errorDialog;
private double timeToClearDialog;
public string ErrorDialog
{
get
{
return errorDialog;
}
private set
{
errorDialog = value;
if (!string.IsNullOrEmpty(value))
{
timeToClearDialog = Time.time + 4f;
}
}
}
public void Awake()
{
PhotonNetwork.automaticallySyncScene = true;
if (PhotonNetwork.connectionStateDetailed == ClientState.PeerCreated)
{
PhotonNetwork.ConnectUsingSettings("0.9");
}
if (string.IsNullOrEmpty(PhotonNetwork.playerName))
{
PhotonNetwork.playerName = "Guest" + Random.Range(1, 9999);
}
}
public void OnGUI()
{
if (Skin != null)
{
GUI.skin = Skin;
}
if (!PhotonNetwork.connected)
{
if (PhotonNetwork.connecting)
{
GUILayout.Label("Connecting to: " + PhotonNetwork.ServerAddress);
}
else
{
GUILayout.Label(string.Concat("Not connected. Check console output. Detailed connection state: ", PhotonNetwork.connectionStateDetailed, " Server: ", PhotonNetwork.ServerAddress));
}
if (connectFailed)
{
GUILayout.Label("Connection failed. Check setup and use Setup Wizard to fix configuration.");
GUILayout.Label(string.Format("Server: {0}", new object[1] { PhotonNetwork.ServerAddress }));
GUILayout.Label("AppId: " + PhotonNetwork.PhotonServerSettings.AppID.Substring(0, 8) + "****");
if (GUILayout.Button("Try Again", GUILayout.Width(100f)))
{
connectFailed = false;
PhotonNetwork.ConnectUsingSettings("0.9");
}
}
return;
}
Rect rect = new Rect(((float)Screen.width - WidthAndHeight.x) / 2f, ((float)Screen.height - WidthAndHeight.y) / 2f, WidthAndHeight.x, WidthAndHeight.y);
GUI.Box(rect, "Join or Create Room");
GUILayout.BeginArea(rect);
GUILayout.Space(40f);
GUILayout.BeginHorizontal();
GUILayout.Label("Player name:", GUILayout.Width(150f));
PhotonNetwork.playerName = GUILayout.TextField(PhotonNetwork.playerName);
GUILayout.Space(158f);
if (GUI.changed)
{
PlayerPrefs.SetString("playerName", PhotonNetwork.playerName);
}
GUILayout.EndHorizontal();
GUILayout.Space(15f);
GUILayout.BeginHorizontal();
GUILayout.Label("Roomname:", GUILayout.Width(150f));
roomName = GUILayout.TextField(roomName);
if (GUILayout.Button("Create Room", GUILayout.Width(150f)))
{
PhotonNetwork.CreateRoom(roomName, new RoomOptions
{
MaxPlayers = 10
}, null);
}
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();
if (GUILayout.Button("Join Room", GUILayout.Width(150f)))
{
PhotonNetwork.JoinRoom(roomName);
}
GUILayout.EndHorizontal();
if (!string.IsNullOrEmpty(ErrorDialog))
{
GUILayout.Label(ErrorDialog);
if (timeToClearDialog < (double)Time.time)
{
timeToClearDialog = 0.0;
ErrorDialog = string.Empty;
}
}
GUILayout.Space(15f);
GUILayout.BeginHorizontal();
GUILayout.Label(PhotonNetwork.countOfPlayers + " users are online in " + PhotonNetwork.countOfRooms + " rooms.");
GUILayout.FlexibleSpace();
if (GUILayout.Button("Join Random", GUILayout.Width(150f)))
{
PhotonNetwork.JoinRandomRoom();
}
GUILayout.EndHorizontal();
GUILayout.Space(15f);
if (PhotonNetwork.GetRoomList().Length == 0)
{
GUILayout.Label("Currently no games are available.");
GUILayout.Label("Rooms will be listed here, when they become available.");
}
else
{
GUILayout.Label(PhotonNetwork.GetRoomList().Length + " rooms available:");
scrollPos = GUILayout.BeginScrollView(scrollPos);
RoomInfo[] roomList = PhotonNetwork.GetRoomList();
foreach (RoomInfo roomInfo in roomList)
{
GUILayout.BeginHorizontal();
GUILayout.Label(roomInfo.Name + " " + roomInfo.PlayerCount + "/" + roomInfo.MaxPlayers);
if (GUILayout.Button("Join", GUILayout.Width(150f)))
{
PhotonNetwork.JoinRoom(roomInfo.Name);
}
GUILayout.EndHorizontal();
}
GUILayout.EndScrollView();
}
GUILayout.EndArea();
}
public void OnJoinedRoom()
{
Debug.Log("OnJoinedRoom");
}
public void OnPhotonCreateRoomFailed()
{
ErrorDialog = "Error: Can't create room (room name maybe already used).";
Debug.Log("OnPhotonCreateRoomFailed got called. This can happen if the room exists (even if not visible). Try another room name.");
}
public void OnPhotonJoinRoomFailed(object[] cause)
{
ErrorDialog = "Error: Can't join room (full or unknown room name). " + cause[1];
Debug.Log("OnPhotonJoinRoomFailed got called. This can happen if the room is not existing or full or closed.");
}
public void OnPhotonRandomJoinFailed()
{
ErrorDialog = "Error: Can't join random room (none found).";
Debug.Log("OnPhotonRandomJoinFailed got called. Happens if no room is available (or all full or invisible or closed). JoinrRandom filter-options can limit available rooms.");
}
public void OnCreatedRoom()
{
Debug.Log("OnCreatedRoom");
PhotonNetwork.LoadLevel(SceneNameGame);
}
public void OnDisconnectedFromPhoton()
{
Debug.Log("Disconnected from Photon.");
}
public void OnFailedToConnectToPhoton(object parameters)
{
connectFailed = true;
Debug.Log(string.Concat("OnFailedToConnectToPhoton. StatusCode: ", parameters, " ServerAddress: ", PhotonNetwork.ServerAddress));
}
public void OnConnectedToMaster()
{
Debug.Log("As OnConnectedToMaster() got called, the PhotonServerSetting.AutoJoinLobby must be off. Joining lobby by calling PhotonNetwork.JoinLobby().");
PhotonNetwork.JoinLobby();
}
}