From 1634362018baa6661fa068f316ab26cc53836985 Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Wed, 22 Dec 2021 20:45:25 -0800 Subject: [PATCH] the rest of the player messages --- QSB/DeathSync/Events/PlayerDeathEvent.cs | 42 --------------- QSB/DeathSync/Events/PlayerDeathMessage.cs | 45 ++++++++++++---- QSB/DeathSync/Patches/DeathPatches.cs | 4 +- QSB/Events/EventNames.cs | 2 - QSB/Player/Events/PlayerEntangledEvent.cs | 50 ------------------ QSB/Player/Events/PlayerEntangledMessage.cs | 57 +++++++++++++++++++++ QSB/Player/PlayerEntanglementWatcher.cs | 8 +-- 7 files changed, 98 insertions(+), 110 deletions(-) delete mode 100644 QSB/DeathSync/Events/PlayerDeathEvent.cs delete mode 100644 QSB/Player/Events/PlayerEntangledEvent.cs create mode 100644 QSB/Player/Events/PlayerEntangledMessage.cs diff --git a/QSB/DeathSync/Events/PlayerDeathEvent.cs b/QSB/DeathSync/Events/PlayerDeathEvent.cs deleted file mode 100644 index dc7bb4b6..00000000 --- a/QSB/DeathSync/Events/PlayerDeathEvent.cs +++ /dev/null @@ -1,42 +0,0 @@ -using QSB.ClientServerStateSync; -using QSB.Events; -using QSB.Player; -using QSB.RespawnSync; -using QSB.Utility; - -namespace QSB.DeathSync.Events -{ - public class PlayerDeathEvent : QSBEvent - { - public override bool RequireWorldObjectsReady => false; - - public override void SetupListener() => GlobalMessenger.AddListener(EventNames.QSBPlayerDeath, Handler); - public override void CloseListener() => GlobalMessenger.RemoveListener(EventNames.QSBPlayerDeath, Handler); - - private void Handler(DeathType type) => SendEvent(CreateMessage(type)); - - private PlayerDeathMessage CreateMessage(DeathType type) => new() - { - AboutId = LocalPlayerId, - EnumValue = type, - NecronomiconIndex = Necronomicon.GetRandomIndex(type) - }; - - public override void OnReceiveLocal(bool server, PlayerDeathMessage message) - { - var player = QSBPlayerManager.GetPlayer(message.AboutId); - RespawnManager.Instance.OnPlayerDeath(player); - ClientStateManager.Instance.OnDeath(); - } - - public override void OnReceiveRemote(bool server, PlayerDeathMessage message) - { - var player = QSBPlayerManager.GetPlayer(message.AboutId); - var playerName = player.Name; - var deathMessage = Necronomicon.GetPhrase(message.EnumValue, message.NecronomiconIndex); - DebugLog.ToAll(string.Format(deathMessage, playerName)); - - RespawnManager.Instance.OnPlayerDeath(player); - } - } -} \ No newline at end of file diff --git a/QSB/DeathSync/Events/PlayerDeathMessage.cs b/QSB/DeathSync/Events/PlayerDeathMessage.cs index 9c5ced27..24496693 100644 --- a/QSB/DeathSync/Events/PlayerDeathMessage.cs +++ b/QSB/DeathSync/Events/PlayerDeathMessage.cs @@ -1,24 +1,47 @@ -using QSB.Messaging; +using QSB.ClientServerStateSync; +using QSB.Messaging; +using QSB.Player; +using QSB.RespawnSync; +using QSB.Utility; using QuantumUNET.Transport; namespace QSB.DeathSync.Events { - public class PlayerDeathMessage : EnumMessage + public class PlayerDeathMessage : QSBEnumMessage { - public int NecronomiconIndex { get; set; } + private int NecronomiconIndex; - public override void Deserialize(QNetworkReader reader) - { - base.Deserialize(reader); - EnumValue = (DeathType)reader.ReadInt32(); - NecronomiconIndex = reader.ReadInt32(); - } + public PlayerDeathMessage(DeathType type) => NecronomiconIndex = Necronomicon.GetRandomIndex(type); + + public PlayerDeathMessage() { } public override void Serialize(QNetworkWriter writer) { base.Serialize(writer); - writer.Write((int)EnumValue); writer.Write(NecronomiconIndex); } + + public override void Deserialize(QNetworkReader reader) + { + base.Deserialize(reader); + NecronomiconIndex = reader.ReadInt32(); + } + + public override void OnReceiveLocal() + { + var player = QSBPlayerManager.GetPlayer(From); + RespawnManager.Instance.OnPlayerDeath(player); + ClientStateManager.Instance.OnDeath(); + } + + public override void OnReceiveRemote() + { + var player = QSBPlayerManager.GetPlayer(From); + var playerName = player.Name; + var deathMessage = Necronomicon.GetPhrase(Value, NecronomiconIndex); + DebugLog.ToAll(string.Format(deathMessage, playerName)); + + RespawnManager.Instance.OnPlayerDeath(player); + } } -} +} \ No newline at end of file diff --git a/QSB/DeathSync/Patches/DeathPatches.cs b/QSB/DeathSync/Patches/DeathPatches.cs index 55147d2c..9d13d29e 100644 --- a/QSB/DeathSync/Patches/DeathPatches.cs +++ b/QSB/DeathSync/Patches/DeathPatches.cs @@ -5,6 +5,8 @@ using QSB.Player; using QSB.ShipSync; using QSB.Utility; using System.Linq; +using QSB.DeathSync.Events; +using QSB.Messaging; using UnityEngine; namespace QSB.DeathSync.Patches @@ -195,7 +197,7 @@ namespace QSB.DeathSync.Patches if (!QSBPlayerManager.LocalPlayer.IsDead) { QSBPlayerManager.LocalPlayer.IsDead = true; - QSBEventManager.FireEvent(EventNames.QSBPlayerDeath, deathType); + new PlayerDeathMessage(deathType).Send(); } } diff --git a/QSB/Events/EventNames.cs b/QSB/Events/EventNames.cs index 8d508c8d..c81de841 100644 --- a/QSB/Events/EventNames.cs +++ b/QSB/Events/EventNames.cs @@ -26,7 +26,6 @@ // Custom event names -- change if you want! These can be anything, as long as both // sides of the GlobalMessenger (fireevent and addlistener) reference the same thing. - public const string QSBPlayerDeath = nameof(QSBPlayerDeath); public const string QSBServerTime = nameof(QSBServerTime); public const string QSBStartLift = nameof(QSBStartLift); public const string QSBGeyserState = nameof(QSBGeyserState); @@ -45,7 +44,6 @@ public const string QSBTextTranslated = nameof(QSBTextTranslated); public const string QSBEnterShrine = nameof(QSBEnterShrine); public const string QSBExitShrine = nameof(QSBExitShrine); - public const string QSBPlayerEntangle = nameof(QSBPlayerEntangle); public const string QSBDropItem = nameof(QSBDropItem); public const string QSBSocketItem = nameof(QSBSocketItem); public const string QSBMoveToCarry = nameof(QSBMoveToCarry); diff --git a/QSB/Player/Events/PlayerEntangledEvent.cs b/QSB/Player/Events/PlayerEntangledEvent.cs deleted file mode 100644 index 2ca7cc48..00000000 --- a/QSB/Player/Events/PlayerEntangledEvent.cs +++ /dev/null @@ -1,50 +0,0 @@ -using QSB.Events; -using QSB.QuantumSync; -using QSB.QuantumSync.WorldObjects; -using QSB.WorldSync; -using QSB.WorldSync.Events; - -namespace QSB.Player.Events -{ - internal class PlayerEntangledEvent : QSBEvent - { - public override bool RequireWorldObjectsReady => true; - - public override void SetupListener() => GlobalMessenger.AddListener(EventNames.QSBPlayerEntangle, Handler); - public override void CloseListener() => GlobalMessenger.RemoveListener(EventNames.QSBPlayerEntangle, Handler); - - private void Handler(int id) => SendEvent(CreateMessage(id)); - - private WorldObjectMessage CreateMessage(int id) => new() - { - AboutId = LocalPlayerId, - ObjectId = id - }; - - public override void OnReceiveLocal(bool server, WorldObjectMessage message) - { - var player = QSBPlayerManager.LocalPlayer; - if (message.ObjectId == -1) - { - player.EntangledObject = null; - return; - } - - var quantumObject = QSBWorldSync.GetWorldFromId(message.ObjectId); - player.EntangledObject = quantumObject; - } - - public override void OnReceiveRemote(bool server, WorldObjectMessage message) - { - var player = QSBPlayerManager.GetPlayer(message.AboutId); - if (message.ObjectId == -1) - { - player.EntangledObject = null; - return; - } - - var quantumObject = QSBWorldSync.GetWorldFromId(message.ObjectId); - player.EntangledObject = quantumObject; - } - } -} diff --git a/QSB/Player/Events/PlayerEntangledMessage.cs b/QSB/Player/Events/PlayerEntangledMessage.cs new file mode 100644 index 00000000..15071fce --- /dev/null +++ b/QSB/Player/Events/PlayerEntangledMessage.cs @@ -0,0 +1,57 @@ +using QSB.Messaging; +using QSB.QuantumSync.WorldObjects; +using QSB.WorldSync; +using QuantumUNET.Transport; + +namespace QSB.Player.Events +{ + // almost a world object message, but supports null (-1) as well + internal class PlayerEntangledMessage : QSBMessage + { + private int ObjectId; + + public PlayerEntangledMessage(int objectId) => ObjectId = objectId; + + public PlayerEntangledMessage() { } + + public override bool ShouldReceive => WorldObjectManager.AllObjectsReady; + + public override void OnReceiveLocal() + { + var player = QSBPlayerManager.LocalPlayer; + if (ObjectId == -1) + { + player.EntangledObject = null; + return; + } + + var quantumObject = QSBWorldSync.GetWorldFromId(ObjectId); + player.EntangledObject = quantumObject; + } + + public override void OnReceiveRemote() + { + var player = QSBPlayerManager.GetPlayer(From); + if (ObjectId == -1) + { + player.EntangledObject = null; + return; + } + + var quantumObject = QSBWorldSync.GetWorldFromId(ObjectId); + player.EntangledObject = quantumObject; + } + + public override void Serialize(QNetworkWriter writer) + { + base.Serialize(writer); + writer.Write(ObjectId); + } + + public override void Deserialize(QNetworkReader reader) + { + base.Deserialize(reader); + ObjectId = reader.ReadInt32(); + } + } +} diff --git a/QSB/Player/PlayerEntanglementWatcher.cs b/QSB/Player/PlayerEntanglementWatcher.cs index af38f4de..18b93ac2 100644 --- a/QSB/Player/PlayerEntanglementWatcher.cs +++ b/QSB/Player/PlayerEntanglementWatcher.cs @@ -1,5 +1,7 @@ using OWML.Utils; using QSB.Events; +using QSB.Messaging; +using QSB.Player.Events; using QSB.QuantumSync; using QSB.QuantumSync.WorldObjects; using QSB.WorldSync; @@ -32,13 +34,11 @@ namespace QSB.Player var collidingQuantumObject = controller._collidingQuantumObject; if (_previousCollidingQuantumObject != collidingQuantumObject) { - var objectIndex = (collidingQuantumObject != null) + var objectId = collidingQuantumObject != null ? QSBWorldSync.GetWorldFromUnity(collidingQuantumObject).ObjectId : -1; - QSBEventManager.FireEvent( - EventNames.QSBPlayerEntangle, - objectIndex); + new PlayerEntangledMessage(objectId).Send(); _previousCollidingQuantumObject = collidingQuantumObject; } }