add _waitingForEvent

This commit is contained in:
Mister_Nebula 2021-12-11 11:47:21 +00:00
parent 72938b4c7c
commit accef60619
2 changed files with 25 additions and 2 deletions

View File

@ -29,7 +29,7 @@ namespace QSB.Player.Events
public override void OnReceiveRemote(bool server, PlayerInformationMessage message)
{
DebugLog.DebugWrite($"Received playerstate of player ID {message.AboutId}", MessageType.Info);
RequestStateResyncEvent._waitingForEvent = false;
if (QSBPlayerManager.PlayerExists(message.AboutId))
{
QSBPlayerManager.HandleFullStateMessage(message);

View File

@ -16,18 +16,41 @@ namespace QSB.Player.Events
// Can be sent by any client (including host) to signal they want latest worldobject, player, and server infomation
public class RequestStateResyncEvent : QSBEvent<PlayerMessage>
{
public static bool _waitingForEvent;
public override bool RequireWorldObjectsReady => false;
public override void SetupListener() => GlobalMessenger.AddListener(EventNames.QSBRequestStateResync, Handler);
public override void CloseListener() => GlobalMessenger.RemoveListener(EventNames.QSBRequestStateResync, Handler);
private void Handler() => SendEvent(CreateMessage());
private void Handler()
{
if (_waitingForEvent)
{
return;
}
_waitingForEvent = true;
SendEvent(CreateMessage());
}
private PlayerMessage CreateMessage() => new()
{
AboutId = LocalPlayerId
};
public override void OnReceiveLocal(bool isHost, PlayerMessage message)
{
QSBCore.UnityEvents.FireInNUpdates(() =>
{
if (_waitingForEvent)
{
DebugLog.ToConsole($"Did not receive PlayerInformationEvent in time. Setting _waitingForEvent to false.", OWML.Common.MessageType.Info);
_waitingForEvent = false;
}
}, 60);
}
public override void OnReceiveRemote(bool isHost, PlayerMessage message)
{
// send response only to the requesting client