using Unity.Services.Lobbies.Models; using UnityEngine; public sealed class MainMenuController : MonoBehaviour { private string joinCode = string.Empty; private string playerName = string.Empty; private Vector2 lobbyScrollPosition; private void OnGUI() { NetworkSessionController session = NetworkSessionController.Instance; GUI.Box(new Rect(24, 24, 480, 620), string.Empty); GUILayout.BeginArea(new Rect(44, 44, 440, 580)); GUILayout.Label("FRIENDSLOP // MOUNTAIN FACTORY"); GUILayout.Space(10); if (session == null) { GUILayout.Label("Network bootstrap is unavailable."); GUILayout.EndArea(); return; } if (session.IsOnline) { GUILayout.Label(session.Status); GUILayout.EndArea(); return; } if (string.IsNullOrEmpty(playerName)) playerName = session.LocalPlayerName; GUILayout.Label("Player name"); playerName = GUILayout.TextField(playerName, 24); session.SetLocalPlayerName(playerName); GUILayout.Space(10); GUI.enabled = !session.IsBusy; if (GUILayout.Button("Create Relay Host", GUILayout.Height(34))) _ = session.StartHostAsync(); GUILayout.Space(12); GUILayout.Label("Join by code"); joinCode = GUILayout.TextField(joinCode).ToUpperInvariant(); if (GUILayout.Button("Join via Relay", GUILayout.Height(30))) _ = session.StartClientAsync(joinCode); GUILayout.Space(14); GUILayout.BeginHorizontal(); GUILayout.Label("Open factories"); if (GUILayout.Button("Refresh", GUILayout.Width(90))) _ = session.RefreshPublicLobbiesAsync(); GUILayout.EndHorizontal(); lobbyScrollPosition = GUILayout.BeginScrollView(lobbyScrollPosition, GUILayout.Height(220)); foreach (Lobby lobby in session.PublicLobbies) { GUILayout.BeginHorizontal(GUI.skin.box); GUILayout.Label($"{lobby.Name} {lobby.Players.Count}/{lobby.MaxPlayers}", GUILayout.ExpandWidth(true)); GUI.enabled = !session.IsBusy && lobby.AvailableSlots > 0; if (GUILayout.Button("Join", GUILayout.Width(70))) _ = session.JoinPublicLobbyAsync(lobby.Id); GUI.enabled = !session.IsBusy; GUILayout.EndHorizontal(); } GUILayout.EndScrollView(); GUILayout.FlexibleSpace(); GUILayout.Label(session.Status); GUI.enabled = true; GUILayout.EndArea(); } }