fix(g7): расширил радиус Touched на 1.2 — куб ловится при сближении

Куб с физикой отталкивается от игрока (DynamicsManager push) и успевает
отскочить до следующего кадра. Строгий AABB ловил только при защемлении
в углу. Расширение SLACK=1.2 единицы ловит 'почти-контакт' — куб
собирается при подходе на ~1 единицу.
This commit is contained in:
min 2026-06-09 18:12:01 +03:00
parent 8295d6f0fe
commit 1a174f2854

View File

@ -2039,14 +2039,19 @@ export function registerRobloxShim(lua, opts) {
try { HEARTBEAT_SIGNAL.Fire(dt); } catch (_) {}
try { STEPPED_SIGNAL.Fire(performance.now() / 1000, dt); } catch (_) {}
// Авто-детект Touched на спавненных частях (id >= 800000):
// BabylonScene._detectTouchEvents срабатывает только для скриптов
// с явным target. Спавненные через __rbxl_spawn_part примитивы
// (падающие кубы, снаряды) Babylon не знает, поэтому делаем
// AABB-check игрок↔part прямо в shim каждый кадр.
// Спавненные через __rbxl_spawn_part примитивы (падающие кубы,
// снаряды) Babylon не знает (target=null), поэтому делаем
// proximity-check игрок↔part прямо в shim каждый кадр.
//
// Используем РАСШИРЕННЫЙ радиус (не строгий AABB), потому что
// физтело куба отталкивается от игрока при контакте — куб может
// успеть отскочить ДО следующего кадра. Расширяем зону на 1.2
// единицы, чтобы поймать "почти-контакт".
try {
const pp = api._realPlayerPos;
if (!pp) return;
const phw = 0.4, phh = 0.9, phd = 0.4;
const SLACK = 1.2; // расширение зоны касания
for (const [id, part] of partById.entries()) {
if (id < 800000) continue;
if (!part || part.Destroyed) continue;
@ -2054,9 +2059,9 @@ export function registerRobloxShim(lua, opts) {
const pos = part._state?.Position;
const size = part._state?.Size;
if (!pos || !size) continue;
const hw = size.X / 2 + 0.1;
const hh = size.Y / 2 + 0.1;
const hd = size.Z / 2 + 0.1;
const hw = size.X / 2 + SLACK;
const hh = size.Y / 2 + SLACK;
const hd = size.Z / 2 + SLACK;
const overlap =
pp.x + phw > pos.X - hw && pp.x - phw < pos.X + hw &&
pp.y + phh > pos.Y - hh && pp.y - phh < pos.Y + hh &&