quantum-space-buddies/QSB/Events/PlayerState.cs
2020-08-09 21:46:51 +01:00

51 lines
1.5 KiB
C#

using QSB.Messaging;
using QSB.TransformSync;
using QSB.Utility;
using System;
using UnityEngine.Networking;
namespace QSB.Events
{
public class PlayerState : NetworkBehaviour
{
public static PlayerState LocalInstance { get; private set; }
private MessageHandler<PlayerStateMessage> _messageHandler;
private void Awake()
{
_messageHandler = new MessageHandler<PlayerStateMessage>(MessageType.FullState);
_messageHandler.OnClientReceiveMessage += OnClientReceiveMessage;
LocalInstance = this;
}
private void OnClientReceiveMessage(PlayerStateMessage message)
{
if (message.SenderId == PlayerTransformSync.LocalInstance.netId.Value)
{
return;
}
DebugLog.ToConsole($"Received game state for id {message.SenderId}");
UnityHelper.Instance.RunWhen(() => PlayerRegistry.GetTransformSync(message.SenderId) != null,
() => PlayerRegistry.HandleFullStateMessage(message));
}
public void Send()
{
foreach (var player in PlayerRegistry.PlayerList)
{
var message = new PlayerStateMessage
{
SenderId = player.NetId,
PlayerName = player.Name,
PlayerState = player.State
};
_messageHandler.SendToAll(message);
DebugLog.ToConsole($"* Sent state for {player.NetId}");
}
}
}
}