diff --git a/src/editor/engine/GameplayKits.js b/src/editor/engine/GameplayKits.js index d3517d3..738a193 100644 --- a/src/editor/engine/GameplayKits.js +++ b/src/editor/engine/GameplayKits.js @@ -233,14 +233,16 @@ game.self.onTouch(() => { { type: 'cylinder', x: 8, y: 1.5, z: 0, sx: 0.4, sy: 3, sz: 3, color: '#4dffd6', material: 'neon', name: 'Портал B', canCollide: false }, ], scripts: [{ attachTo: 'on-target', code: -`// Портал A: касание → телепорт к порталу B (стоит правее на +8 по X). -// Передвинь «Портал B» куда нужно и поправь координаты ниже. +`// Портал A: касание → телепорт к «Портал B» (ищем его по имени в момент входа). +// Передвигай «Портал B» куда угодно — телепорт всегда попадёт к нему. let cd = false; game.self.onTouch(() => { - if (cd) return; cd = true; - const p = game.self.position; - game.player.teleport(p.x + 8, p.y + 1, p.z); // к месту портала B - game.after(1, () => { cd = false; }); + if (cd) return; + const b = game.scene.findOne('Портал B'); // ищем второй портал + if (!b || !b.position) return; + cd = true; + game.player.teleport(b.position.x, b.position.y + 1, b.position.z); + game.after(1.2, () => { cd = false; }); // защита от повторного входа });` }], }, { @@ -265,14 +267,15 @@ game.self.onTouch(() => { icon: 'door', category: 'world', prims: [{ type: 'cube', x: 0, y: 2, z: 0, sx: 1, sy: 4, sz: 3, color: '#8a5a3c', material: 'matte', name: 'Дверь' }], scripts: [{ attachTo: 'on-target', code: -`// Дверь по E: открыта/закрыта — уезжает вниз и возвращается. +`// Дверь по E: уезжает В СТОРОНУ (вбок) и возвращается. Ширина двери sx=1, +// сдвигаем на 3 единицы вбок — проход открывается. let open = false; const p0 = game.self.position; // закрытое положение game.self.onInteract(() => { open = !open; - if (open) game.self.move(p0.x, p0.y - 4.2, p0.z); // уехала вниз (открыта) - else game.self.move(p0.x, p0.y, p0.z); // вернулась (закрыта) -}, { text: open ? 'Закрыть' : 'Открыть', key: 'e', distance: 5 });` }], + if (open) game.self.move(p0.x + 3, p0.y, p0.z); // уехала вбок (открыта) + else game.self.move(p0.x, p0.y, p0.z); // вернулась (закрыта) +}, { text: 'Открыть / закрыть', key: 'e', distance: 5 });` }], }, ];