fix(engine): findOne(x).onTouch + findOne �� ������ (�������-��������� �������������) #19

Merged
min merged 1 commits from fix/pointer-ontouch-findone into main 2026-05-31 06:53:47 +00:00
Owner

������� game.fx.pointer �� ������������� �� ����. ����. �������: findOne(x).onTouch �� ����������� + findOne �� ������=null (race � sceneSnapshot). ��������� onTouch/onUntouch/onClick �� ����� ������ (inst.watchTouch), ��������� snapshot � init. ��������� �� ���� 333.

?? Generated with Claude Code

������� game.fx.pointer �� ������������� �� ����. ����. �������: findOne(x).onTouch �� ����������� + findOne �� ������=null (race � sceneSnapshot). ��������� onTouch/onUntouch/onClick �� ����� ������ (inst.watchTouch), ��������� snapshot � init. ��������� �� ���� 333. ?? Generated with [Claude Code](https://claude.com/claude-code)
min added 1 commit 2026-05-31 05:28:24 +00:00
fix(engine): findOne(x).onTouch работает + findOne на старте скрипта
All checks were successful
CI / Lint (pull_request) Successful in 1m8s
CI / Build (pull_request) Successful in 1m56s
CI / Secret scan (pull_request) Successful in 2m31s
CI / PR size check (pull_request) Successful in 6s
CI / Deploy to S1 + S2 (pull_request) Has been skipped
7c928462fc
Баг: стрелка-указатель game.fx.pointer не переключалась на следующую цель —
при касании цель не менялась, стрелка не выключалась.

Первопричина (две движковые проблемы):
1. findOne(x).onTouch(...) не существовал: Instance-proxy не имел методов
   касания, движок ловил touch только объектов со скриптом-target/триггеров.
2. Race: скрипт исполняется синхронно в init, а sceneSnapshot приходил позже
   (rAF) → findOne() на старте = null → подписки onTouch молча не вешались.

Фикс:
- Instance-proxy: + onTouch/onUntouch/onClick → шлёт inst.watchTouch{ref}.
  Worker: _instTouchHandlers + маршрут instTouch/instUntouch/instClick по ref.
- GameRuntime: handler inst.watchTouch/watchClick → _watchedTouchRefs;
  routeInstEvent(ref,type); сброс в teardown.
- BabylonScene._detectTouchEvents: блок watched-объектов (AABB по ref, rising/
  falling edge → routeInstEvent), _refToTarget(ref)→{kind,id},
  _touchState.clear() в enterPlayMode.
- Первичный snapshot сцены передаётся прямо в init
  (ScriptSandbox.setInitialScene → worker заполняет _sceneIndex до userFn) →
  findOne работает в синхронном теле скрипта на старте.

Проверено: телепорт игрока по 3 целям игры 333 — стрелка переключается
red-cube→blue-sphere→gold-chest, на финале удаляется.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
min merged commit 5724e25340 into main 2026-05-31 06:53:47 +00:00
min deleted branch fix/pointer-ontouch-findone 2026-05-31 06:53:47 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: rublox/studio#19
No description provided.