fix(studio): портал ищет второй портал по имени, дверь уезжает вбок
- Портал: вместо хардкода +8 по X — findOne('Портал B') в момент касания и
телепорт к реальной позиции второго портала (его можно двигать куда угодно).
findOne на старте давал null (sceneSnapshot через rAF) → искать в onTouch.
- Дверь по E: сдвиг вбок (+3 по X) вместо ухода вниз (выглядело как исчезновение).
Текст подсказки «Открыть / закрыть».
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
cfc79f325f
commit
4906c82792
@ -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); // уехала вниз (открыта)
|
||||
if (open) game.self.move(p0.x + 3, p0.y, p0.z); // уехала вбок (открыта)
|
||||
else game.self.move(p0.x, p0.y, p0.z); // вернулась (закрыта)
|
||||
}, { text: open ? 'Закрыть' : 'Открыть', key: 'e', distance: 5 });` }],
|
||||
}, { text: 'Открыть / закрыть', key: 'e', distance: 5 });` }],
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user