diff --git a/QSB/ConversationSync/Messages/RemoteDialogueResyncMessage.cs b/QSB/ConversationSync/Messages/RemoteDialogueResyncMessage.cs new file mode 100644 index 00000000..01c71482 --- /dev/null +++ b/QSB/ConversationSync/Messages/RemoteDialogueResyncMessage.cs @@ -0,0 +1,51 @@ +using Mirror; +using QSB.ConversationSync.WorldObjects; +using QSB.Messaging; +using System.Linq; + +namespace QSB.ConversationSync.Messages +{ + internal class RemoteDialogueResyncMessage : QSBWorldObjectMessage + { + private bool _inRemoteDialogue; + private bool[] _activatedDialogues; + private int _dialogueIndex; + private bool _colliderEnabled; + + public RemoteDialogueResyncMessage(RemoteDialogueTrigger trigger) + { + _inRemoteDialogue = trigger._inRemoteDialogue; + _activatedDialogues = trigger._activatedDialogues; + _dialogueIndex = trigger._listDialogues + .IndexOf(x => x.dialogue == trigger._activeRemoteDialogue); + _colliderEnabled = trigger._collider.enabled; + } + + public override void Serialize(NetworkWriter writer) + { + base.Serialize(writer); + writer.Write(_inRemoteDialogue); + writer.Write(_activatedDialogues); + writer.Write(_dialogueIndex); + writer.Write(_colliderEnabled); + } + + public override void Deserialize(NetworkReader reader) + { + base.Deserialize(reader); + _inRemoteDialogue = reader.Read(); + _activatedDialogues = reader.Read(); + _dialogueIndex = reader.Read(); + _colliderEnabled = reader.Read(); + } + + public override void OnReceiveRemote() + { + var trigger = WorldObject.AttachedObject; + trigger._activatedDialogues = _activatedDialogues; + trigger._inRemoteDialogue = _inRemoteDialogue; + trigger._activeRemoteDialogue = trigger._listDialogues.ElementAtOrDefault(_dialogueIndex).dialogue; + trigger._collider.enabled = _colliderEnabled; + } + } +} diff --git a/QSB/ConversationSync/WorldObjects/QSBRemoteDialogueTrigger.cs b/QSB/ConversationSync/WorldObjects/QSBRemoteDialogueTrigger.cs index 10fcb503..7e9f6ff2 100644 --- a/QSB/ConversationSync/WorldObjects/QSBRemoteDialogueTrigger.cs +++ b/QSB/ConversationSync/WorldObjects/QSBRemoteDialogueTrigger.cs @@ -1,4 +1,6 @@ -using QSB.WorldSync; +using QSB.ConversationSync.Messages; +using QSB.Messaging; +using QSB.WorldSync; namespace QSB.ConversationSync.WorldObjects { @@ -6,7 +8,10 @@ namespace QSB.ConversationSync.WorldObjects { public override void SendResyncInfo(uint to) { - // todo SendResyncInfo + if (QSBCore.IsHost) + { + this.SendMessage(new RemoteDialogueResyncMessage(AttachedObject)); + } } public void RemoteEnterDialogue(int dialogueIndex)