Files
survival-game/Assets/Mirror/Examples/EdgegapLobby/Scripts/UILobbyStatus.cs
2025-06-16 15:14:23 +02:00

122 lines
3.4 KiB
C#

using System;
using Edgegap;
using UnityEngine;
using UnityEngine.UI;
namespace Mirror.Examples.EdgegapLobby
{
public class UILobbyStatus : MonoBehaviour
{
public GameObject[] ShowDisconnected;
public GameObject[] ShowServer;
public GameObject[] ShowHost;
public GameObject[] ShowClient;
public Button StopServer;
public Button StopHost;
public Button StopClient;
public Text StatusText;
private Status _status;
private EdgegapLobbyKcpTransport _transport;
enum Status
{
Offline,
Server,
Host,
Client
}
void Awake()
{
Refresh();
StopServer.onClick.AddListener(() =>
{
NetworkManager.singleton.StopServer();
});
StopHost.onClick.AddListener(() =>
{
NetworkManager.singleton.StopHost();
});
StopClient.onClick.AddListener(() =>
{
NetworkManager.singleton.StopClient();
});
}
private void Start()
{
_transport = (EdgegapLobbyKcpTransport)NetworkManager.singleton.transport;
}
private void Update()
{
var status = GetStatus();
if (_status != status)
{
_status = status;
Refresh();
}
if (_transport)
{
StatusText.text = _transport.Status.ToString();
}
else
{
StatusText.text = "";
}
}
private void Refresh()
{
switch (_status)
{
case Status.Offline:
SetUI(ShowServer, false);
SetUI(ShowHost, false);
SetUI(ShowClient, false);
SetUI(ShowDisconnected, true);
break;
case Status.Server:
SetUI(ShowDisconnected, false);
SetUI(ShowHost, false);
SetUI(ShowClient, false);
SetUI(ShowServer, true);
break;
case Status.Host:
SetUI(ShowDisconnected, false);
SetUI(ShowServer, false);
SetUI(ShowClient, false);
SetUI(ShowHost, true);
break;
case Status.Client:
SetUI(ShowDisconnected, false);
SetUI(ShowServer, false);
SetUI(ShowHost, false);
SetUI(ShowClient, true);
break;
default:
throw new ArgumentOutOfRangeException();
}
}
private void SetUI(GameObject[] gos, bool active)
{
foreach (GameObject go in gos)
{
go.SetActive(active);
}
}
private Status GetStatus()
{
if (NetworkServer.active && NetworkClient.active)
{
return Status.Host;
}
if (NetworkServer.active)
{
return Status.Server;
}
if (NetworkClient.active)
{
return Status.Client;
}
return Status.Offline;
}
}
}