feat(ui): port retail dialog factory lifecycle

Replace the single mutable confirmation service with retail's property-backed DialogFactory model: fresh DAT roots, context ids, queue groups, priority preemption, callback/close-notice ordering, and context cancellation. Route /die, server confirmation aborts, and guarded item use through focused semantic owners.

Co-Authored-By: Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-13 16:30:05 +02:00
parent 43f7c7807c
commit 66bdae7a83
22 changed files with 1442 additions and 220 deletions

View file

@ -2208,6 +2208,9 @@ public sealed class GameWindow : IDisposable
Cursor: new AcDream.App.UI.RetailUiCursorBindings(
cursorFeedbackController,
retailCursorManager),
Confirmations: new AcDream.App.UI.ConfirmationRuntimeBindings(
(type, context, accepted) =>
_liveSession?.SendConfirmationResponse(type, context, accepted)),
StackSplitQuantity: _stackSplitQuantity,
Plugins: _uiRegistry,
Persistence: persistence,
@ -2659,12 +2662,9 @@ public sealed class GameWindow : IDisposable
onUseDone: error => _itemInteractionController?.CompleteUse(error),
itemMana: ItemMana,
onConfirmationRequest: request =>
_retailUiRuntime?.ConfirmationDialogs?.Show(
request.Message,
accepted => session.SendConfirmationResponse(
request.Type,
request.ContextId,
accepted)),
_retailUiRuntime?.HandleConfirmationRequest(request),
onConfirmationDone: done =>
_retailUiRuntime?.HandleConfirmationDone(done),
friends: Friends,
squelch: Squelch,
onDesiredComponents: components => DesiredComponents = components);
@ -2764,7 +2764,7 @@ public sealed class GameWindow : IDisposable
LastOutsideCorpsePosition: () =>
LocalPlayer.GetPosition(0x0Eu),
ShowConfirmation: (message, completed) =>
_retailUiRuntime?.ConfirmationDialogs?.Show(message, completed),
_retailUiRuntime?.ShowConfirmation(message, completed),
Suicide: liveSession.SendSuicide,
ClearChat: _ => chat.Clear(),
SaveUi: name => _retailUiRuntime?.SaveNamedLayout(name),