From 13865485d941d0c1c1fae8185b0c666f97833f8e Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Fri, 12 Aug 2022 20:36:27 -0700 Subject: [PATCH] QSBCharacterDialogueTree initial state sync (enough) --- QSB/ConversationSync/ConversationManager.cs | 6 +++--- .../Messages/ConversationStartEndMessage.cs | 10 +++++----- .../WorldObjects/QSBCharacterDialogueTree.cs | 16 +++++++++------- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/QSB/ConversationSync/ConversationManager.cs b/QSB/ConversationSync/ConversationManager.cs index 2b1a78f7..f394e6f2 100644 --- a/QSB/ConversationSync/ConversationManager.cs +++ b/QSB/ConversationSync/ConversationManager.cs @@ -45,7 +45,7 @@ public class ConversationManager : WorldObjectManager QSBWorldSync.Init(); } - public uint GetPlayerTalkingToTree(CharacterDialogueTree tree) => + public uint GetPlayerTalkingToTree(CharacterDialogueTree tree) => QSBPlayerManager.PlayerList.FirstOrDefault(x => x.CurrentCharacterDialogueTree?.AttachedObject == tree) ?.PlayerId ?? uint.MaxValue; @@ -62,7 +62,7 @@ public class ConversationManager : WorldObjectManager new ConversationMessage(ConversationType.CloseCharacter, id).Send(); public void SendConvState(QSBCharacterDialogueTree tree, bool state) - => tree.SendMessage(new ConversationStartEndMessage(state)); + => tree.SendMessage(new ConversationStartEndMessage(QSBPlayerManager.LocalPlayerId, state)); public void DisplayPlayerConversationBox(uint playerId, string text) { @@ -109,4 +109,4 @@ public class ConversationManager : WorldObjectManager newBox.SetActive(true); return newBox; } -} \ No newline at end of file +} diff --git a/QSB/ConversationSync/Messages/ConversationStartEndMessage.cs b/QSB/ConversationSync/Messages/ConversationStartEndMessage.cs index ce88fc4b..1a1d8eb2 100644 --- a/QSB/ConversationSync/Messages/ConversationStartEndMessage.cs +++ b/QSB/ConversationSync/Messages/ConversationStartEndMessage.cs @@ -5,21 +5,21 @@ using QSB.Utility; namespace QSB.ConversationSync.Messages; -public class ConversationStartEndMessage : QSBWorldObjectMessage +public class ConversationStartEndMessage : QSBWorldObjectMessage { - public ConversationStartEndMessage(bool start) : base(start) { } + public ConversationStartEndMessage(uint playerId, bool start) : base((playerId, start)) { } public override void OnReceiveRemote() { - if (Data) + if (Data.start) { - QSBPlayerManager.GetPlayer(From).CurrentCharacterDialogueTree = WorldObject; + QSBPlayerManager.GetPlayer(Data.playerId).CurrentCharacterDialogueTree = WorldObject; WorldObject.AttachedObject.GetInteractVolume().DisableInteraction(); WorldObject.AttachedObject.RaiseEvent(nameof(CharacterDialogueTree.OnStartConversation)); } else { - QSBPlayerManager.GetPlayer(From).CurrentCharacterDialogueTree = null; + QSBPlayerManager.GetPlayer(Data.playerId).CurrentCharacterDialogueTree = null; WorldObject.AttachedObject.GetInteractVolume().EnableInteraction(); WorldObject.AttachedObject.RaiseEvent(nameof(CharacterDialogueTree.OnEndConversation)); } diff --git a/QSB/ConversationSync/WorldObjects/QSBCharacterDialogueTree.cs b/QSB/ConversationSync/WorldObjects/QSBCharacterDialogueTree.cs index 86f68878..17e8d329 100644 --- a/QSB/ConversationSync/WorldObjects/QSBCharacterDialogueTree.cs +++ b/QSB/ConversationSync/WorldObjects/QSBCharacterDialogueTree.cs @@ -1,9 +1,6 @@ -using QSB.WorldSync; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using QSB.ConversationSync.Messages; +using QSB.Messaging; +using QSB.WorldSync; namespace QSB.ConversationSync.WorldObjects; @@ -11,6 +8,11 @@ public class QSBCharacterDialogueTree : WorldObject { public override void SendInitialState(uint to) { - // todo : implement this??? does it need it? + var playerId = ConversationManager.Instance.GetPlayerTalkingToTree(AttachedObject); + if (playerId != uint.MaxValue) + { + this.SendMessage(new ConversationStartEndMessage(playerId, true) { To = to }); + } + // TODO: maybe also sync the dialogue box and player box? } }