feat(ui): finish retail toolbar controls

Discover all seven panel launchers from their DAT panel-id attributes, route mounted panels through event-driven retained window state, and ghost unavailable panels. Port Use and Examine selection/target behavior with exact Appraise dispatch and retail cursor modes.

Co-Authored-By: Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-11 12:11:53 +02:00
parent 21fefce0e0
commit d3d1c895a0
19 changed files with 478 additions and 72 deletions

View file

@ -113,9 +113,7 @@ public sealed class CursorFeedbackController
// window occludes the world (no found object → pending). The one
// UI-side source retail-style cells contribute is an occupied item
// slot's own item.
RetailCursorTargetMode targetMode = _itemInteraction?.IsTargetModeActive == true
? RetailCursorTargetMode.UseTarget
: RetailCursorTargetMode.None;
RetailCursorTargetMode targetMode = ModeFromInteraction(_itemInteraction);
uint hoverTarget = hover is null
? _worldTargetProvider?.Invoke() ?? 0u
: targetMode == RetailCursorTargetMode.UseTarget
@ -265,9 +263,18 @@ public sealed class CursorFeedbackController
private RetailCursorTargetMode EffectiveTargetMode(CursorFeedbackSnapshot snapshot)
=> snapshot.TargetMode == RetailCursorTargetMode.None
&& _itemInteraction?.IsTargetModeActive == true
? RetailCursorTargetMode.UseTarget
: snapshot.TargetMode;
? ModeFromInteraction(_itemInteraction)
: snapshot.TargetMode;
private static RetailCursorTargetMode ModeFromInteraction(
ItemInteractionController? interaction)
=> interaction?.InteractionState.Current.Kind switch
{
InteractionModeKind.Use => RetailCursorTargetMode.Use,
InteractionModeKind.Examine => RetailCursorTargetMode.Examine,
InteractionModeKind.UseItemOnTarget => RetailCursorTargetMode.UseTarget,
_ => RetailCursorTargetMode.None,
};
private static CursorFeedbackKind KindForResize(ResizeEdges edges)
{