Added MainMenu, Bootstrap and Factory scenes

This commit is contained in:
2026-08-04 18:04:42 +03:00
parent bca1cbb323
commit a259a64e80
43 changed files with 1991 additions and 10 deletions
@@ -0,0 +1,54 @@
using Unity.Netcode;
using Unity.Netcode.Transports.UTP;
using UnityEngine;
using UnityEngine.SceneManagement;
[RequireComponent(typeof(NetworkManager), typeof(UnityTransport))]
public sealed class NetworkSessionController : MonoBehaviour
{
public static NetworkSessionController Instance { get; private set; }
[SerializeField] private NetworkObject playerPrefab;
[SerializeField] private string menuSceneName = "MainMenu";
[SerializeField] private string gameplaySceneName = "Factory";
public string Status { get; private set; } = "Ready.";
public bool IsOnline => NetworkManager.Singleton != null && NetworkManager.Singleton.IsListening;
private NetworkManager networkManager;
private UnityTransport transport;
private void Awake()
{
if (Instance != null) { Destroy(gameObject); return; }
Instance = this; DontDestroyOnLoad(gameObject);
networkManager = GetComponent<NetworkManager>();
transport = GetComponent<UnityTransport>();
networkManager.NetworkConfig.NetworkTransport = transport;
networkManager.NetworkConfig.PlayerPrefab = playerPrefab.gameObject;
networkManager.NetworkConfig.EnableSceneManagement = true;
networkManager.OnServerStarted += LoadGameplayScene;
}
private void Start() => SceneManager.LoadScene(menuSceneName);
private void OnDestroy()
{
if (networkManager != null) networkManager.OnServerStarted -= LoadGameplayScene;
if (Instance == this) Instance = null;
}
public bool StartHost(ushort port)
{
transport.SetConnectionData("0.0.0.0", port, "0.0.0.0");
bool started = networkManager.StartHost();
Status = started ? $"Host started on {port}." : "Host failed to start.";
return started;
}
public bool StartClient(string address, ushort port)
{
transport.SetConnectionData(address.Trim(), port);
bool started = networkManager.StartClient();
Status = started ? $"Connecting to {address}:{port}..." : "Client failed to start.";
return started;
}
private void LoadGameplayScene()
{
Status = "Loading factory...";
networkManager.SceneManager.LoadScene(gameplaySceneName, LoadSceneMode.Single);
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 3a5771e8e4723ae498f3d83bf919341b