fix(selection): port SmartBox click lighting pulse

Port the retail high/low material-lighting cadence for successful world clicks, keep it instance-scoped in the modern renderer, and restore authored lighting after 0.8 seconds. Correct the selection oracle and pin timing plus per-frame buffer lifecycle with tests.

Co-authored-by: Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-17 23:00:04 +02:00
parent 146a963aeb
commit ea4f52ec51
11 changed files with 338 additions and 16 deletions

View file

@ -12379,6 +12379,8 @@ public sealed class GameWindow : IDisposable
if (payload is AcDream.App.UI.ItemDragPayload itemPayload)
{
uint target = PickWorldGuidAt(x, y, includeSelf: true) ?? 0u;
if (target != 0u)
_retailSelectionScene?.BeginLightingPulse(target);
_itemInteractionController?.PlaceIn3D(itemPayload, target);
}
}
@ -13129,6 +13131,11 @@ public sealed class GameWindow : IDisposable
if (picked is uint guid)
{
// Retail UIElement_SmartBoxWrapper::RecvNotice_SmartBoxObjectFound
// @ 0x004E5AD0 pulses every successfully found click before it
// branches into select/use/targeted-use behavior.
_retailSelectionScene?.BeginLightingPulse(guid);
if (_itemInteractionController?.OfferPrimaryClick(guid)
is not null and not AcDream.App.UI.ItemPrimaryClickResult.NotActive)
return;