feat(ui): drive toolbar use state from selection

Port the retail selected-object availability predicate into Core and project it through the shared interaction owner. The imported hand now follows canonical selection/object notices, keeps weapon and targeted-tool activation on the existing wield/use cursor paths, and ghosts empty or explicitly unusable selections per the connected UX requirement.

Co-authored-by: Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-23 08:07:47 +02:00
parent 0134122c28
commit 60387668d0
11 changed files with 269 additions and 16 deletions

View file

@ -579,8 +579,15 @@ HandleSelectionChanged(): // 0x004BF380
```
The exact item-type mask in the use-button ghost test is visible as separate
`InqType() & 4`, `& 2`, and `& 8` checks. Preserve those numeric tests until the
retail `ITEM_TYPE` names are pinned.
`InqType() & 4`, `& 2`, and `& 8` checks. The verbatim `ITEM_TYPE` enum now pins
those values as Clothing, Armor, and Jewelry respectively.
**2026-07-23 connected requirement:** acdream intentionally ghosts the hand
when the selection is empty. Retail instead sets state 1 and lets a click enter
generic `TARGET_MODE_USE` (see `ListenToElementMessage @ 0x004BEE90`). Selected
objects still use the exact predicate above and still activate through the
ordinary `ItemHolder::UseObject` path. The empty-selection difference is
registered as AP-122.
### 5.3 Meter notices