QSBCharacterDialogueTree initial state sync (enough)

This commit is contained in:
JohnCorby 2022-08-12 20:36:27 -07:00
parent ec5e6e9eb8
commit 13865485d9
3 changed files with 17 additions and 15 deletions

View File

@ -45,7 +45,7 @@ public class ConversationManager : WorldObjectManager
QSBWorldSync.Init<QSBCharacterDialogueTree, CharacterDialogueTree>(); QSBWorldSync.Init<QSBCharacterDialogueTree, CharacterDialogueTree>();
} }
public uint GetPlayerTalkingToTree(CharacterDialogueTree tree) => public uint GetPlayerTalkingToTree(CharacterDialogueTree tree) =>
QSBPlayerManager.PlayerList.FirstOrDefault(x => x.CurrentCharacterDialogueTree?.AttachedObject == tree) QSBPlayerManager.PlayerList.FirstOrDefault(x => x.CurrentCharacterDialogueTree?.AttachedObject == tree)
?.PlayerId ?? uint.MaxValue; ?.PlayerId ?? uint.MaxValue;
@ -62,7 +62,7 @@ public class ConversationManager : WorldObjectManager
new ConversationMessage(ConversationType.CloseCharacter, id).Send(); new ConversationMessage(ConversationType.CloseCharacter, id).Send();
public void SendConvState(QSBCharacterDialogueTree tree, bool state) 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) public void DisplayPlayerConversationBox(uint playerId, string text)
{ {
@ -109,4 +109,4 @@ public class ConversationManager : WorldObjectManager
newBox.SetActive(true); newBox.SetActive(true);
return newBox; return newBox;
} }
} }

View File

@ -5,21 +5,21 @@ using QSB.Utility;
namespace QSB.ConversationSync.Messages; namespace QSB.ConversationSync.Messages;
public class ConversationStartEndMessage : QSBWorldObjectMessage<QSBCharacterDialogueTree, bool> public class ConversationStartEndMessage : QSBWorldObjectMessage<QSBCharacterDialogueTree, (uint playerId, bool start)>
{ {
public ConversationStartEndMessage(bool start) : base(start) { } public ConversationStartEndMessage(uint playerId, bool start) : base((playerId, start)) { }
public override void OnReceiveRemote() 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.GetInteractVolume().DisableInteraction();
WorldObject.AttachedObject.RaiseEvent(nameof(CharacterDialogueTree.OnStartConversation)); WorldObject.AttachedObject.RaiseEvent(nameof(CharacterDialogueTree.OnStartConversation));
} }
else else
{ {
QSBPlayerManager.GetPlayer(From).CurrentCharacterDialogueTree = null; QSBPlayerManager.GetPlayer(Data.playerId).CurrentCharacterDialogueTree = null;
WorldObject.AttachedObject.GetInteractVolume().EnableInteraction(); WorldObject.AttachedObject.GetInteractVolume().EnableInteraction();
WorldObject.AttachedObject.RaiseEvent(nameof(CharacterDialogueTree.OnEndConversation)); WorldObject.AttachedObject.RaiseEvent(nameof(CharacterDialogueTree.OnEndConversation));
} }

View File

@ -1,9 +1,6 @@
using QSB.WorldSync; using QSB.ConversationSync.Messages;
using System; using QSB.Messaging;
using System.Collections.Generic; using QSB.WorldSync;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace QSB.ConversationSync.WorldObjects; namespace QSB.ConversationSync.WorldObjects;
@ -11,6 +8,11 @@ public class QSBCharacterDialogueTree : WorldObject<CharacterDialogueTree>
{ {
public override void SendInitialState(uint to) 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?
} }
} }