Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
112 changes: 17 additions & 95 deletions testproject/Assets/Tests/Manual/Scripts/NetworkManagerHud.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
using System.Runtime.CompilerServices;
using Unity.Multiplayer.Netcode;
using Unity.Multiplayer.Netcode.Transports.UNET;
using UnityEngine;

namespace TestProject.ManualTests
Expand All @@ -9,122 +7,46 @@ namespace TestProject.ManualTests
[DisallowMultipleComponent]
public class NetworkManagerHud : MonoBehaviour
{
private NetworkManager m_NetworkManager;
private UNetTransport m_Transport;
private GUIStyle m_LabelTextStyle;

// This is needed to make the port field more convenient. GUILayout.TextField is very limited and we want to be able to clear the field entirely so we can't cache this as ushort.
private string m_PortString;

public Vector2 DrawOffset = new Vector2(10, 10);

public Color LabelColor = Color.black;

private void Awake()
{
// Only cache networking manager but not transport here because transport could change anytime.
m_NetworkManager = GetComponent<NetworkManager>();
m_LabelTextStyle = new GUIStyle(GUIStyle.none);
}

private void OnGUI()
{
m_LabelTextStyle.normal.textColor = LabelColor;

m_Transport = (UNetTransport)m_NetworkManager.NetworkConfig.NetworkTransport;

if (m_PortString == null)
GUILayout.BeginArea(new Rect(10, 10, 300, 300));

if (!NetworkManager.Singleton.IsClient && !NetworkManager.Singleton.IsServer)
{
m_PortString = m_Transport.ConnectPort.ToString();
}

GUILayout.BeginArea(new Rect(DrawOffset, new Vector2(200, 200)));

if (IsRunning(m_NetworkManager))
{
DrawStatusGUI();
StartButtons();
}
else
{
DrawConnectGUI();
StatusLabels();
}

GUILayout.EndArea();
}

private void DrawConnectGUI()
private static void StartButtons()
{
GUILayout.BeginHorizontal();
GUILayout.Space(10);
GUILayout.Label("Address", m_LabelTextStyle);
GUILayout.Label("Port", m_LabelTextStyle);

GUILayout.EndHorizontal();

GUILayout.BeginHorizontal();

m_Transport.ConnectAddress = GUILayout.TextField(m_Transport.ConnectAddress);
m_PortString = GUILayout.TextField(m_PortString);
if (ushort.TryParse(m_PortString, out ushort port))
if (GUILayout.Button("Host"))
{
m_Transport.ConnectPort = port;
NetworkManager.Singleton.StartHost();
}

GUILayout.EndHorizontal();

if (GUILayout.Button("Host (Server + Client)"))

if (GUILayout.Button("Client"))
{
m_NetworkManager.StartHost();
NetworkManager.Singleton.StartClient();
}

GUILayout.BeginHorizontal();


if (GUILayout.Button("Server"))
{
m_NetworkManager.StartServer();
NetworkManager.Singleton.StartServer();
}

if (GUILayout.Button("Client"))
{
m_NetworkManager.StartClient();
}

GUILayout.EndHorizontal();
}

private void DrawStatusGUI()
private static void StatusLabels()
{
if (m_NetworkManager.IsServer)
{
var mode = m_NetworkManager.IsHost ? "Host" : "Server";
GUILayout.Label($"{mode} active on port: {m_Transport.ConnectPort.ToString()}", m_LabelTextStyle);
}
else
{
if (m_NetworkManager.IsConnectedClient)
{
GUILayout.Label($"Client connected {m_Transport.ConnectAddress}:{m_Transport.ConnectPort.ToString()}", m_LabelTextStyle);
}
}
var mode = NetworkManager.Singleton.IsHost ? "Host" : NetworkManager.Singleton.IsServer ? "Server" : "Client";

if (GUILayout.Button("Stop"))
{
if (m_NetworkManager.IsHost)
{
m_NetworkManager.StopHost();
}
else if (m_NetworkManager.IsServer)
{
m_NetworkManager.StopServer();
}
else if (m_NetworkManager.IsClient)
{
m_NetworkManager.StopClient();
}
}
GUILayout.Label($"Transport: {NetworkManager.Singleton.NetworkConfig.NetworkTransport.GetType().Name}");
GUILayout.Label($"Mode: {mode}");
}

[MethodImpl(MethodImplOptions.AggressiveInlining)]
private bool IsRunning(NetworkManager networkManager) => networkManager.IsServer || networkManager.IsClient;
}
}