// vis2k: GUILayout instead of spacey += ...; removed Update hotkeys to avoid
// confusion if someone accidentally presses one.
using System;
using UnityEngine;
namespace Mirror
{
/// Shows NetworkManager controls in a GUI at runtime.
[DisallowMultipleComponent]
[AddComponentMenu("Network/NetworkManagerHUD")]
[RequireComponent(typeof(NetworkManager))]
[HelpURL("https://mirror-networking.gitbook.io/docs/components/network-manager-hud")]
public class NetworkManagerHUD : MonoBehaviour
{
NetworkManager manager;
[Obsolete("showGUI will be removed unless someone has a valid use case. Simply use or don't use the HUD component.")]
public bool showGUI = true;
public int offsetX;
public int offsetY;
void Awake()
{
manager = GetComponent();
}
void OnGUI()
{
#pragma warning disable 618
if (!showGUI) return;
#pragma warning restore 618
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()
{
// server / client status message
if (NetworkServer.active)
{
GUILayout.Label("Server: active. Transport: " + Transport.activeTransport);
}
if (NetworkClient.isConnected)
{
GUILayout.Label("Client: address=" + manager.networkAddress);
}
}
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();
}
}
}
}
}