feat(input): assess world objects on right click

Port SmartBox's release-completed sr_Examine gesture through the configurable SelectRight binding. Cancel camera drags at the shared retail three-pixel threshold, then reuse the canonical picker, selection pulse, and appraisal request path without inventing another wire or UI owner.

Co-authored-by: Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-24 05:42:28 +02:00
parent 6718ee45a0
commit 5ad32d5753
16 changed files with 394 additions and 13 deletions

View file

@ -190,6 +190,37 @@ procedural arrow. The indicator is persistent selection presentation. Retail
also has a separate, short-lived click confirmation owned by SmartBox; it is not
implemented in `CPhysicsPart::Draw` or `ACCWeenieObject::SetSelected`.
## Right-click selection and examination
`UIElement_SmartBoxWrapper::MouseUp @ 0x004E5820`
```text
on right mouse up:
if mouse movement owns the gesture:
finish mouse movement and do not examine
else if instant mouse-look owns the gesture:
leave mouse-look and do not examine
else if no higher-priority SmartBox search is pending:
searchReason = sr_Examine
FindObject(releaseX, releaseY)
```
`UIElement_SmartBoxWrapper::RecvNotice_SmartBoxObjectFound @ 0x004E5AD0`
```text
if a valid object was found for sr_Examine:
begin the normal SmartBox lighting pulse
SetSelectedObject(foundObjectId)
ClientUISystem.ExamineObject(foundObjectId)
else:
do nothing
```
The action is release-completed rather than mouse-down-completed so an RMB
camera drag does not appraise the object under the release point. Acdream maps
the configurable `SelectRight` action to the same complete-click gesture and
keeps `SelectionExamine` independently configurable (retail default E).
## SmartBox click lighting pulse
`UIElement_SmartBoxWrapper::RecvNotice_SmartBoxObjectFound @ 0x004E5AD0`