fix(ui): unify target-mode primary clicks
This commit is contained in:
parent
b7e7ca9ee2
commit
eb6229394a
12 changed files with 176 additions and 25 deletions
|
|
@ -371,16 +371,28 @@ controller tests. Full suite green before launch: 4,575 passed, 5 skipped.
|
|||
|
||||
### 3.3 Add one item primary-click chokepoint
|
||||
|
||||
- [ ] Define a controller-level activation router: target-mode acquisition first,
|
||||
- [x] Define a controller-level activation router: target-mode acquisition first,
|
||||
then window-specific fallback (select/open/use).
|
||||
- [ ] Return a typed result (`NotActive`, `ConsumedSuccess`, `ConsumedRejected`) so
|
||||
- [x] Return a typed result (`NotActive`, `ConsumedSuccess`, `ConsumedRejected`) so
|
||||
both valid and rejected target attempts are consumed and cannot accidentally fall
|
||||
through to selection, double-click use, or container opening.
|
||||
- [ ] Route toolbar, inventory grid, bags, paperdoll slots/body, main pack and world
|
||||
- [x] Route toolbar, inventory grid, bags, paperdoll slots/body, main pack and world
|
||||
objects through it. Widgets expose events; they do not depend on game controllers.
|
||||
- [ ] Add end-to-end tests for health-kit target use on self, inventory item, worn
|
||||
- [x] Add end-to-end tests for health-kit target use on self, inventory item, worn
|
||||
item, and world entity, including invalid-target behavior.
|
||||
|
||||
**Implementation (2026-07-11):** `ItemInteractionController.OfferPrimaryClick`
|
||||
is the sole typed target-mode offer. `ConsumedRejected` is intentionally terminal:
|
||||
invalid clicks clear retail target mode but never fall through to selection,
|
||||
container opening, or ordinary activation. Inventory contents/bags/main pack,
|
||||
paperdoll equipment/body, toolbar items, radar blips, and world picks all use the
|
||||
router; retained widgets remain controller-agnostic event sources. End-to-end
|
||||
retained tests pin self targeting and rejected inventory/worn targets without
|
||||
selection drift, while controller tests pin valid world/self and invalid target
|
||||
results. The consumed target is retained for retail's 500 ms double-click window,
|
||||
so the second Click/DoubleClick pair cannot reactivate or equip the rejected
|
||||
object after target mode clears. Issue #197 and AP-107 are retired.
|
||||
|
||||
### 3.4 Complete retail cursor precedence and catalog
|
||||
|
||||
- [ ] Port every reachable branch of `ClientUISystem::UpdateCursorState`, not only
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue