fix(engine): findOne(x).onTouch + findOne �� ������ (�������-��������� �������������) #19
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "fix/pointer-ontouch-findone"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
������� 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 не переключалась на следующую цель — при касании цель не менялась, стрелка не выключалась. Первопричина (две движковые проблемы): 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>