evershade/Assets/Scripts/GameInit.cs

119 lines
3.2 KiB
C#

using FishNet.Managing;
using FishNet.Object;
using FishNet.Transporting;
using Managers;
using UnityEngine;
public class GameInit : MonoBehaviour
{
[SerializeField] private GameObject systemsManagerPrefab;
[SerializeField] private GameObject networkManagerPrefab;
[SerializeField] private NetworkObject gameManagerPrefab;
private NetworkManager _networkManager;
public static GameInit Instance { get; set; }
private void Awake()
{
InitializeSystemsManager();
InitializeNetworkManager();
_networkManager = FindObjectOfType<NetworkManager>();
if (_networkManager == null) Debug.LogError("NetworkManager not found");
// ensure this is singleton
if (Instance == null)
{
Instance = this;
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(gameObject);
}
}
private void Start()
{
if (_networkManager != null)
{
_networkManager.ServerManager.OnServerConnectionState += OnServerReady;
_networkManager.ClientManager.OnClientConnectionState += OnClientReady;
}
}
private void OnDestroy()
{
if (_networkManager != null)
{
_networkManager.ServerManager.OnServerConnectionState -= OnServerReady;
_networkManager.ClientManager.OnClientConnectionState -= OnClientReady;
}
}
private void OnServerReady(ServerConnectionStateArgs args)
{
Debug.Log("Server Connection State Changed " + args.ConnectionState);
// if (args.ConnectionState == LocalConnectionState.Started) InitializeGameManager();
}
private void OnClientReady(ClientConnectionStateArgs args)
{
// InitializeGameManager();
}
private void InitializeSystemsManager()
{
if (FindObjectOfType<SaveManager>() == null)
{
var systemsManagerInstance = Instantiate(systemsManagerPrefab);
DontDestroyOnLoad(systemsManagerInstance);
}
}
private void InitializeNetworkManager()
{
if (FindObjectOfType<NetworkManager>() == null)
{
var networkManagerInstance = Instantiate(networkManagerPrefab);
DontDestroyOnLoad(networkManagerInstance);
}
}
public void InitializeGameManager()
{
Debug.Log("Initializing GameManager...");
if (FindObjectOfType<GameManager>() == null)
{
// check if gameManagerPrefab is null
if (gameManagerPrefab == null)
{
Debug.LogError("GameManager prefab not found");
return;
}
var gameManagerInstance = Instantiate(gameManagerPrefab);
// check if instance was created
if (gameManagerInstance == null)
{
Debug.LogError("GameManager instance not found");
return;
}
_networkManager.ServerManager.Spawn(gameManagerInstance);
// gameManagerInstance.SetActive(true);
}
}
public NetworkObject GetGameManagerPrefab()
{
if (gameManagerPrefab == null) Debug.LogError("GameManager prefab not found");
return gameManagerPrefab;
}
}