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>();
}
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;
}
}
}

View File

@ -5,21 +5,21 @@ using QSB.Utility;
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()
{
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));
}

View File

@ -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<CharacterDialogueTree>
{
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?
}
}