SanAndreasUnity/Assets/Scripts/Networking/CustomNetworkManager.cs
2022-01-30 01:06:45 +01:00

84 lines
2.2 KiB
C#

using System.Collections.Generic;
using UnityEngine;
using Mirror;
using SanAndreasUnity.Utilities;
using SanAndreasUnity.Behaviours;
namespace SanAndreasUnity.Net
{
public class CustomNetworkManager : NetworkManager
{
public override void OnClientConnect(NetworkConnection conn)
{
if (NetStatus.IsServer)
{
// just do default action
base.OnClientConnect(conn);
return;
}
// default method: if no scene was loaded, do Ready/AddPlayer
// we won't do this until loading process finishes
if (Loader.HasLoaded)
base.OnClientConnect(conn);
}
public override void OnClientSceneChanged(NetworkConnection conn)
{
if (NetStatus.IsServer)
{
// just do default action
base.OnClientSceneChanged(conn);
return;
}
// default method: do Ready/AddPlayer
// we won't do this until loading process finishes
if (Loader.HasLoaded)
base.OnClientSceneChanged(conn);
}
void OnLoaderFinished()
{
if (F.IsAppInEditMode)
return;
if (NetStatus.IsServer) // don't do anything on server
return;
if (!NetworkClient.isConnected)
{
// client is not connected ? hmm... then loading process could not have started
Debug.LogErrorFormat("Loader finished, but client is not connected");
return;
}
// make client ready
if (ClientScene.ready)
Debug.LogErrorFormat("Client was made ready before loader finished");
else
ClientScene.Ready(NetworkClient.connection);
// add player if specified
if (autoCreatePlayer && ClientScene.localPlayer == null)
{
ClientScene.AddPlayer();
}
}
public override void ConfigureServerFrameRate()
{
// don't set frame rate
// it will be done by other scripts
}
}
}