mirror of
				https://github.com/DerTyp7/defrain-shooter-unity.git
				synced 2025-10-30 21:17:09 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			133 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			133 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System.Collections.Generic;
 | |
| using UnityEngine;
 | |
| 
 | |
| namespace Mirror.Discovery
 | |
| {
 | |
|     [DisallowMultipleComponent]
 | |
|     [AddComponentMenu("Network/NetworkDiscoveryHUD")]
 | |
|     [HelpURL("https://mirror-networking.gitbook.io/docs/components/network-discovery")]
 | |
|     [RequireComponent(typeof(NetworkDiscovery))]
 | |
|     public class NetworkDiscoveryHUD : MonoBehaviour
 | |
|     {
 | |
|         readonly Dictionary<long, ServerResponse> discoveredServers = new Dictionary<long, ServerResponse>();
 | |
|         Vector2 scrollViewPos = Vector2.zero;
 | |
| 
 | |
|         public NetworkDiscovery networkDiscovery;
 | |
| 
 | |
| #if UNITY_EDITOR
 | |
|         void OnValidate()
 | |
|         {
 | |
|             if (networkDiscovery == null)
 | |
|             {
 | |
|                 networkDiscovery = GetComponent<NetworkDiscovery>();
 | |
|                 UnityEditor.Events.UnityEventTools.AddPersistentListener(networkDiscovery.OnServerFound, OnDiscoveredServer);
 | |
|                 UnityEditor.Undo.RecordObjects(new Object[] { this, networkDiscovery }, "Set NetworkDiscovery");
 | |
|             }
 | |
|         }
 | |
| #endif
 | |
| 
 | |
|         void OnGUI()
 | |
|         {
 | |
|             if (NetworkManager.singleton == null)
 | |
|                 return;
 | |
| 
 | |
|             if (!NetworkClient.isConnected && !NetworkServer.active && !NetworkClient.active)
 | |
|                 DrawGUI();
 | |
| 
 | |
|             if (NetworkServer.active || NetworkClient.active)
 | |
|                 StopButtons();
 | |
|         }
 | |
| 
 | |
|         void DrawGUI()
 | |
|         {
 | |
|             GUILayout.BeginArea(new Rect(10, 10, 300, 500));
 | |
|             GUILayout.BeginHorizontal();
 | |
| 
 | |
|             if (GUILayout.Button("Find Servers"))
 | |
|             {
 | |
|                 discoveredServers.Clear();
 | |
|                 networkDiscovery.StartDiscovery();
 | |
|             }
 | |
| 
 | |
|             // LAN Host
 | |
|             if (GUILayout.Button("Start Host"))
 | |
|             {
 | |
|                 discoveredServers.Clear();
 | |
|                 NetworkManager.singleton.StartHost();
 | |
|                 networkDiscovery.AdvertiseServer();
 | |
|             }
 | |
| 
 | |
|             // Dedicated server
 | |
|             if (GUILayout.Button("Start Server"))
 | |
|             {
 | |
|                 discoveredServers.Clear();
 | |
|                 NetworkManager.singleton.StartServer();
 | |
|                 networkDiscovery.AdvertiseServer();
 | |
|             }
 | |
| 
 | |
|             GUILayout.EndHorizontal();
 | |
| 
 | |
|             // show list of found server
 | |
| 
 | |
|             GUILayout.Label($"Discovered Servers [{discoveredServers.Count}]:");
 | |
| 
 | |
|             // servers
 | |
|             scrollViewPos = GUILayout.BeginScrollView(scrollViewPos);
 | |
| 
 | |
|             foreach (ServerResponse info in discoveredServers.Values)
 | |
|                 if (GUILayout.Button(info.EndPoint.Address.ToString()))
 | |
|                     Connect(info);
 | |
| 
 | |
|             GUILayout.EndScrollView();
 | |
|             GUILayout.EndArea();
 | |
|         }
 | |
| 
 | |
|         void StopButtons()
 | |
|         {
 | |
|             GUILayout.BeginArea(new Rect(10, 40, 100, 25));
 | |
| 
 | |
|             // stop host if host mode
 | |
|             if (NetworkServer.active && NetworkClient.isConnected)
 | |
|             {
 | |
|                 if (GUILayout.Button("Stop Host"))
 | |
|                 {
 | |
|                     NetworkManager.singleton.StopHost();
 | |
|                     networkDiscovery.StopDiscovery();
 | |
|                 }
 | |
|             }
 | |
|             // stop client if client-only
 | |
|             else if (NetworkClient.isConnected)
 | |
|             {
 | |
|                 if (GUILayout.Button("Stop Client"))
 | |
|                 {
 | |
|                     NetworkManager.singleton.StopClient();
 | |
|                     networkDiscovery.StopDiscovery();
 | |
|                 }
 | |
|             }
 | |
|             // stop server if server-only
 | |
|             else if (NetworkServer.active)
 | |
|             {
 | |
|                 if (GUILayout.Button("Stop Server"))
 | |
|                 {
 | |
|                     NetworkManager.singleton.StopServer();
 | |
|                     networkDiscovery.StopDiscovery();
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             GUILayout.EndArea();
 | |
|         }
 | |
| 
 | |
|         void Connect(ServerResponse info)
 | |
|         {
 | |
|             networkDiscovery.StopDiscovery();
 | |
|             NetworkManager.singleton.StartClient(info.uri);
 | |
|         }
 | |
| 
 | |
|         public void OnDiscoveredServer(ServerResponse info)
 | |
|         {
 | |
|             // Note that you can check the versioning to decide if you can connect to the server or not using this method
 | |
|             discoveredServers[info.serverId] = info;
 | |
|         }
 | |
|     }
 | |
| }
 | 
