150 lines
4.2 KiB
C#
150 lines
4.2 KiB
C#
using FishNet.Connection;
|
|
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;
|
|
[SerializeField] private GameObject notificationPrefab;
|
|
|
|
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 += OnServerConnectionStateChange;
|
|
_networkManager.ClientManager.OnClientConnectionState += OnClientConnectionStateChange;
|
|
}
|
|
}
|
|
|
|
|
|
private void OnDestroy()
|
|
{
|
|
if (_networkManager != null)
|
|
{
|
|
_networkManager.ServerManager.OnServerConnectionState -= OnServerConnectionStateChange;
|
|
_networkManager.ClientManager.OnClientConnectionState -= OnClientConnectionStateChange;
|
|
_networkManager.ServerManager.OnRemoteConnectionState -= OnRemoteConnectionStateChange;
|
|
//_networkManager.ClientManager.OnRemot
|
|
}
|
|
}
|
|
|
|
private void OnRemoteConnectionStateChange(NetworkConnection arg1, RemoteConnectionStateArgs arg2)
|
|
{
|
|
}
|
|
|
|
private void OnServerConnectionStateChange(ServerConnectionStateArgs args)
|
|
{
|
|
Debug.Log("Server Connection State Changed " + args.ConnectionState);
|
|
// if (args.ConnectionState == LocalConnectionState.Started) InitializeGameManager();
|
|
}
|
|
|
|
|
|
private void OnClientConnectionStateChange(ClientConnectionStateArgs args)
|
|
{
|
|
// InitializeGameManager();
|
|
var message = "Client Connection State Changed " + args.ConnectionState;
|
|
Debug.Log(message);
|
|
ShowNotification(message);
|
|
}
|
|
|
|
private void ShowNotification(string message)
|
|
{
|
|
}
|
|
|
|
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()
|
|
{
|
|
// we need to make sure that the network manager is initialized first
|
|
if (_networkManager == null)
|
|
{
|
|
Debug.LogError("NetworkManager not found");
|
|
return;
|
|
}
|
|
|
|
|
|
Debug.Log("Initializing GameManager...");
|
|
if (FindObjectOfType<GameManager>() == null)
|
|
{
|
|
// check if gameManagerPrefab is null
|
|
if (gameManagerPrefab == null)
|
|
{
|
|
Debug.LogError("GameManager prefab not found");
|
|
return;
|
|
}
|
|
|
|
Debug.Log("GameManager prefab found");
|
|
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;
|
|
}
|
|
|
|
public NetworkManager GetNetworkManager()
|
|
{
|
|
return _networkManager;
|
|
}
|
|
} |