119 lines
3.2 KiB
C#
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;
|
|
}
|
|
} |