improve server/client states

This commit is contained in:
Mister_Nebula 2021-12-20 11:49:03 +00:00
parent 1b0934be9f
commit c141c6bee5
7 changed files with 33 additions and 22 deletions

View File

@ -22,6 +22,12 @@ namespace QSB.ClientServerStateSync
QSBCore.UnityEvents.RunWhen(() => PlayerTransformSync.LocalInstance != null, () => QSBEventManager.FireEvent(EventNames.QSBClientState, ForceGetCurrentState()));
}
public void FireChangeClientStateEvent(ClientState newState)
{
ChangeClientState(newState);
QSBEventManager.FireEvent(EventNames.QSBClientState, newState);
}
public void ChangeClientState(ClientState newState)
{
if (QSBPlayerManager.LocalPlayer.State == newState)
@ -124,7 +130,7 @@ namespace QSB.ClientServerStateSync
}
}
QSBEventManager.FireEvent(EventNames.QSBClientState, newState);
FireChangeClientStateEvent(newState);
}
public void OnDeath()
@ -132,7 +138,7 @@ namespace QSB.ClientServerStateSync
var currentScene = QSBSceneManager.CurrentScene;
if (currentScene == OWScene.SolarSystem)
{
QSBEventManager.FireEvent(EventNames.QSBClientState, ClientState.DeadInSolarSystem);
FireChangeClientStateEvent(ClientState.DeadInSolarSystem);
}
else if (currentScene == OWScene.EyeOfTheUniverse)
{
@ -151,7 +157,7 @@ namespace QSB.ClientServerStateSync
if (currentScene == OWScene.SolarSystem)
{
DebugLog.DebugWrite($"RESPAWN!");
QSBEventManager.FireEvent(EventNames.QSBClientState, ClientState.AliveInSolarSystem);
FireChangeClientStateEvent(ClientState.AliveInSolarSystem);
}
else
{

View File

@ -33,6 +33,12 @@ namespace QSB.ClientServerStateSync
QSBCore.UnityEvents.RunWhen(() => PlayerTransformSync.LocalInstance != null, () => QSBEventManager.FireEvent(EventNames.QSBServerState, ForceGetCurrentState()));
}
public void FireChangeServerStateEvent(ServerState newState)
{
ChangeServerState(newState);
QSBEventManager.FireEvent(EventNames.QSBServerState, newState);
}
public void ChangeServerState(ServerState newState)
{
if (_currentState == newState)
@ -54,42 +60,41 @@ namespace QSB.ClientServerStateSync
case OWScene.Credits_Fast:
case OWScene.Credits_Final:
case OWScene.PostCreditsScene:
QSBEventManager.FireEvent(EventNames.QSBServerState, ServerState.Credits);
FireChangeServerStateEvent(ServerState.Credits);
break;
case OWScene.TitleScreen:
QSBEventManager.FireEvent(EventNames.QSBServerState, ServerState.NotLoaded);
FireChangeServerStateEvent(ServerState.NotLoaded);
break;
case OWScene.SolarSystem:
if (oldScene == OWScene.SolarSystem)
{
QSBEventManager.FireEvent(EventNames.QSBServerState, ServerState.WaitingForAllPlayersToReady);
FireChangeServerStateEvent(ServerState.WaitingForAllPlayersToReady);
}
else
{
QSBEventManager.FireEvent(EventNames.QSBServerState, ServerState.InSolarSystem);
FireChangeServerStateEvent(ServerState.InSolarSystem);
}
break;
case OWScene.EyeOfTheUniverse:
QSBEventManager.FireEvent(EventNames.QSBServerState, ServerState.WaitingForAllPlayersToReady);
FireChangeServerStateEvent(ServerState.WaitingForAllPlayersToReady);
break;
case OWScene.None:
case OWScene.Undefined:
default:
DebugLog.ToConsole($"Warning - newScene is {newScene}!", OWML.Common.MessageType.Warning);
QSBEventManager.FireEvent(EventNames.QSBServerState, ServerState.NotLoaded);
FireChangeServerStateEvent(ServerState.NotLoaded);
break;
}
}
private void OnTriggerSupernova()
{
DebugLog.DebugWrite($"TriggerSupernova");
QSBEventManager.FireEvent(EventNames.QSBServerState, ServerState.WaitingForAllPlayersToDie);
FireChangeServerStateEvent(ServerState.WaitingForAllPlayersToDie);
}
private ServerState ForceGetCurrentState()
@ -131,16 +136,16 @@ namespace QSB.ClientServerStateSync
QSBEventManager.FireEvent(EventNames.QSBStartLoop);
if (QSBSceneManager.CurrentScene == OWScene.SolarSystem)
{
QSBEventManager.FireEvent(EventNames.QSBServerState, ServerState.InSolarSystem);
FireChangeServerStateEvent(ServerState.InSolarSystem);
}
else if (QSBSceneManager.CurrentScene == OWScene.EyeOfTheUniverse)
{
QSBEventManager.FireEvent(EventNames.QSBServerState, ServerState.InEye);
FireChangeServerStateEvent(ServerState.InEye);
}
else
{
DebugLog.ToConsole($"Error - All players were ready in non-universe scene!?", OWML.Common.MessageType.Error);
QSBEventManager.FireEvent(EventNames.QSBServerState, ServerState.NotLoaded);
FireChangeServerStateEvent(ServerState.NotLoaded);
}
_blockNextCheck = true;

View File

@ -40,7 +40,7 @@ namespace QSB.DeathSync.Events
Locator.GetDeathManager().KillPlayer(DeathType.TimeLoop);
if (QSBCore.IsHost)
{
QSBEventManager.FireEvent(EventNames.QSBServerState, ServerState.WaitingForAllPlayersToDie);
ServerStateManager.Instance.FireChangeServerStateEvent(ServerState.WaitingForAllPlayersToDie);
}
break;

View File

@ -27,16 +27,16 @@ namespace QSB.DeathSync.Events
DebugLog.DebugWrite($" ~~~ LOOP START ~~~");
if (QSBSceneManager.CurrentScene == OWScene.SolarSystem)
{
QSBEventManager.FireEvent(EventNames.QSBClientState, ClientState.AliveInSolarSystem);
ClientStateManager.Instance.FireChangeClientStateEvent(ClientState.AliveInSolarSystem);
}
else if (QSBSceneManager.CurrentScene == OWScene.EyeOfTheUniverse)
{
QSBEventManager.FireEvent(EventNames.QSBClientState, ClientState.AliveInEye);
ClientStateManager.Instance.FireChangeClientStateEvent(ClientState.AliveInEye);
}
else
{
DebugLog.ToConsole($"Error - Got StartLoop event when not in universe!", OWML.Common.MessageType.Error);
QSBEventManager.FireEvent(EventNames.QSBClientState, ClientState.NotLoaded);
ClientStateManager.Instance.FireChangeClientStateEvent(ClientState.NotLoaded);
}
}
}

View File

@ -62,7 +62,7 @@ namespace QSB.Player.Events
// if host, send worldobject and server states
if (isHost)
{
QSBEventManager.FireEvent(EventNames.QSBServerState, ServerStateManager.Instance.GetServerState());
ServerStateManager.Instance.FireChangeServerStateEvent(ServerStateManager.Instance.GetServerState());
QSBEventManager.FireEvent(EventNames.QSBPlayerInformation);
if (WorldObjectManager.AllObjectsReady)

View File

@ -33,7 +33,7 @@ namespace QSB.StatueSync.Events
return;
}
QSBEventManager.FireEvent(EventNames.QSBServerState, ServerState.InStatueCutscene);
ServerStateManager.Instance.FireChangeServerStateEvent(ServerState.InStatueCutscene);
}
public override void OnReceiveRemote(bool server, StartStatueMessage message)
@ -45,7 +45,7 @@ namespace QSB.StatueSync.Events
return;
}
QSBEventManager.FireEvent(EventNames.QSBServerState, ServerState.InStatueCutscene);
ServerStateManager.Instance.FireChangeServerStateEvent(ServerState.InStatueCutscene);
}
}
}

View File

@ -295,7 +295,7 @@ namespace QSB.TimeSync
{
//?
DebugLog.ToConsole($"Warning - Server waiting for players to die, but players waiting for ready signal! Assume players correct.", MessageType.Warning);
QSBEventManager.FireEvent(EventNames.QSBServerState, ServerState.WaitingForAllPlayersToReady);
ServerStateManager.Instance.FireChangeServerStateEvent(ServerState.WaitingForAllPlayersToReady);
}
}