refactor(runtime): own communication and social state
Construct chat history, negotiated channels, friends, squelch, and reply targets in one presentation-independent Runtime owner. Make live routing, retained UI, devtools, and current-runtime projections borrow the exact instances, preserve reconnect reset semantics, and publish failure-isolated reentrant-safe chat commits. Co-authored-by: Codex <codex@openai.com>
This commit is contained in:
parent
e321410770
commit
c9d25ade50
19 changed files with 684 additions and 117 deletions
|
|
@ -7,6 +7,7 @@ using AcDream.App.Settings;
|
|||
using AcDream.App.World;
|
||||
using AcDream.Content;
|
||||
using AcDream.Runtime.Entities;
|
||||
using AcDream.Runtime.Gameplay;
|
||||
using AcDream.Runtime.Session;
|
||||
using DatReaderWriter;
|
||||
using Silk.NET.Input;
|
||||
|
|
@ -323,17 +324,18 @@ public sealed class GameWindow :
|
|||
private AcDream.App.World.LiveEntityRuntime? _liveEntities;
|
||||
private AcDream.App.World.LiveEntityLivenessController? _liveEntityLiveness;
|
||||
|
||||
// Phase F.1-H.1 — client-side state classes fed by GameEventWiring.
|
||||
// Exposed publicly so plugins + UI panels can bind directly.
|
||||
public readonly AcDream.Core.Chat.ChatLog Chat = new();
|
||||
// Phase I.6 — runtime state for retail's TurbineChat (0xF7DE) global
|
||||
// chat rooms. Empty/disabled until the server fires
|
||||
// SetTurbineChatChannels (0x0295) shortly after EnterWorld.
|
||||
public readonly AcDream.Core.Chat.TurbineChatState TurbineChat = new();
|
||||
// J4.1: Runtime owns communication/social state. App, UI, plugins, and
|
||||
// live-session routing borrow these exact instances.
|
||||
private readonly RuntimeCommunicationState _runtimeCommunication = new();
|
||||
public AcDream.Core.Chat.ChatLog Chat => _runtimeCommunication.Chat;
|
||||
public AcDream.Core.Chat.TurbineChatState TurbineChat =>
|
||||
_runtimeCommunication.TurbineChat;
|
||||
public AcDream.Core.Social.FriendsState Friends =>
|
||||
_runtimeCommunication.Friends;
|
||||
public AcDream.Core.Social.SquelchState Squelch =>
|
||||
_runtimeCommunication.Squelch;
|
||||
public readonly AcDream.Core.Combat.CombatState Combat = new();
|
||||
public readonly AcDream.Core.Items.ItemManaState ItemMana = new();
|
||||
public readonly AcDream.Core.Social.FriendsState Friends = new();
|
||||
public readonly AcDream.Core.Social.SquelchState Squelch = new();
|
||||
private readonly DesiredComponentSnapshotState _desiredComponents = new();
|
||||
public IReadOnlyList<(uint Id, uint Amount)> DesiredComponents =>
|
||||
_desiredComponents.Items;
|
||||
|
|
@ -1208,7 +1210,7 @@ public sealed class GameWindow :
|
|||
hostInputCamera.CameraController,
|
||||
contentEffectsAudio.Audio?.Engine),
|
||||
_hostQuiescence,
|
||||
Chat,
|
||||
_runtimeCommunication,
|
||||
Combat,
|
||||
LocalPlayer,
|
||||
optionalDevTools,
|
||||
|
|
@ -1264,7 +1266,7 @@ public sealed class GameWindow :
|
|||
_runtimeEntityObjects.Objects,
|
||||
contentEffectsAudio.MagicCatalog,
|
||||
SpellBook,
|
||||
Chat,
|
||||
_runtimeCommunication,
|
||||
LocalPlayer,
|
||||
ItemMana,
|
||||
_stackSplitQuantity,
|
||||
|
|
@ -1409,13 +1411,10 @@ public sealed class GameWindow :
|
|||
_combatAttackOperations,
|
||||
Combat,
|
||||
_combatFeedback,
|
||||
Chat,
|
||||
_runtimeCommunication,
|
||||
LocalPlayer,
|
||||
SpellBook,
|
||||
ItemMana,
|
||||
Friends,
|
||||
Squelch,
|
||||
TurbineChat,
|
||||
_externalContainers,
|
||||
_portalTunnelFallback,
|
||||
Console.WriteLine),
|
||||
|
|
@ -1591,6 +1590,7 @@ public sealed class GameWindow :
|
|||
_equippedChildRenderer,
|
||||
_liveEntities,
|
||||
_runtimeEntityObjects,
|
||||
_runtimeCommunication,
|
||||
_renderSceneShadow,
|
||||
_livePresentationBindings,
|
||||
_entityEffectAdvance,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue