mirror of
				https://github.com/DerTyp7/defrain-shooter-unity.git
				synced 2025-10-31 21:47:07 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			149 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| // vis2k: GUILayout instead of spacey += ...; removed Update hotkeys to avoid
 | |
| // confusion if someone accidentally presses one.
 | |
| using UnityEngine;
 | |
| 
 | |
| namespace Mirror
 | |
| {
 | |
|     /// <summary>Shows NetworkManager controls in a GUI at runtime.</summary>
 | |
|     [DisallowMultipleComponent]
 | |
|     [AddComponentMenu("Network/NetworkManagerHUD")]
 | |
|     [RequireComponent(typeof(NetworkManager))]
 | |
|     [HelpURL("https://mirror-networking.gitbook.io/docs/components/network-manager-hud")]
 | |
|     public class NetworkManagerHUD : MonoBehaviour
 | |
|     {
 | |
|         NetworkManager manager;
 | |
| 
 | |
|         public int offsetX;
 | |
|         public int offsetY;
 | |
| 
 | |
|         void Awake()
 | |
|         {
 | |
|             manager = GetComponent<NetworkManager>();
 | |
|         }
 | |
| 
 | |
|         void OnGUI()
 | |
|         {
 | |
|             GUILayout.BeginArea(new Rect(10 + offsetX, 40 + offsetY, 215, 9999));
 | |
|             if (!NetworkClient.isConnected && !NetworkServer.active)
 | |
|             {
 | |
|                 StartButtons();
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 StatusLabels();
 | |
|             }
 | |
| 
 | |
|             // client ready
 | |
|             if (NetworkClient.isConnected && !NetworkClient.ready)
 | |
|             {
 | |
|                 if (GUILayout.Button("Client Ready"))
 | |
|                 {
 | |
|                     NetworkClient.Ready();
 | |
|                     if (NetworkClient.localPlayer == null)
 | |
|                     {
 | |
|                         NetworkClient.AddPlayer();
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             StopButtons();
 | |
| 
 | |
|             GUILayout.EndArea();
 | |
|         }
 | |
| 
 | |
|         void StartButtons()
 | |
|         {
 | |
|             if (!NetworkClient.active)
 | |
|             {
 | |
|                 // Server + Client
 | |
|                 if (Application.platform != RuntimePlatform.WebGLPlayer)
 | |
|                 {
 | |
|                     if (GUILayout.Button("Host (Server + Client)"))
 | |
|                     {
 | |
|                         manager.StartHost();
 | |
|                     }
 | |
|                 }
 | |
| 
 | |
|                 // Client + IP
 | |
|                 GUILayout.BeginHorizontal();
 | |
|                 if (GUILayout.Button("Client"))
 | |
|                 {
 | |
|                     manager.StartClient();
 | |
|                 }
 | |
|                 manager.networkAddress = GUILayout.TextField(manager.networkAddress);
 | |
|                 GUILayout.EndHorizontal();
 | |
| 
 | |
|                 // Server Only
 | |
|                 if (Application.platform == RuntimePlatform.WebGLPlayer)
 | |
|                 {
 | |
|                     // cant be a server in webgl build
 | |
|                     GUILayout.Box("(  WebGL cannot be server  )");
 | |
|                 }
 | |
|                 else
 | |
|                 {
 | |
|                     if (GUILayout.Button("Server Only")) manager.StartServer();
 | |
|                 }
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 // Connecting
 | |
|                 GUILayout.Label($"Connecting to {manager.networkAddress}..");
 | |
|                 if (GUILayout.Button("Cancel Connection Attempt"))
 | |
|                 {
 | |
|                     manager.StopClient();
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         void StatusLabels()
 | |
|         {
 | |
|             // host mode
 | |
|             // display separately because this always confused people:
 | |
|             //   Server: ...
 | |
|             //   Client: ...
 | |
|             if (NetworkServer.active && NetworkClient.active)
 | |
|             {
 | |
|                 GUILayout.Label($"<b>Host</b>: running via {Transport.activeTransport}");
 | |
|             }
 | |
|             // server only
 | |
|             else if (NetworkServer.active)
 | |
|             {
 | |
|                 GUILayout.Label($"<b>Server</b>: running via {Transport.activeTransport}");
 | |
|             }
 | |
|             // client only
 | |
|             else if (NetworkClient.isConnected)
 | |
|             {
 | |
|                 GUILayout.Label($"<b>Client</b>: connected to {manager.networkAddress} via {Transport.activeTransport}");
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         void StopButtons()
 | |
|         {
 | |
|             // stop host if host mode
 | |
|             if (NetworkServer.active && NetworkClient.isConnected)
 | |
|             {
 | |
|                 if (GUILayout.Button("Stop Host"))
 | |
|                 {
 | |
|                     manager.StopHost();
 | |
|                 }
 | |
|             }
 | |
|             // stop client if client-only
 | |
|             else if (NetworkClient.isConnected)
 | |
|             {
 | |
|                 if (GUILayout.Button("Stop Client"))
 | |
|                 {
 | |
|                     manager.StopClient();
 | |
|                 }
 | |
|             }
 | |
|             // stop server if server-only
 | |
|             else if (NetworkServer.active)
 | |
|             {
 | |
|                 if (GUILayout.Button("Stop Server"))
 | |
|                 {
 | |
|                     manager.StopServer();
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 | 
