fix(g25): передаём lookAt-точки чтобы камера вращалась к финишу
cameraCutscene без lookAt держит угол постоянным (setTarget не зовётся). Добавил 3-й arg в __rbxl_camera_cutscene и 4 lookAt-точки указывающие вдоль пути — камера плавно поворачивается к финишу.
This commit is contained in:
parent
d4b84cf73d
commit
189a23ff7c
@ -2166,9 +2166,14 @@ ${SNIPPET_BROADCAST}
|
|||||||
|
|
||||||
local won = false
|
local won = false
|
||||||
|
|
||||||
-- При старте — облёт уровня камерой по точкам
|
-- При старте — облёт уровня камерой по точкам.
|
||||||
-- (точки x,y,z через запятую; segDuration — длительность одного отрезка)
|
-- 1-й arg — путь камеры (4 точки x,y,z),
|
||||||
__rbxl_camera_cutscene("0,18,-10, 12,12,8, -12,12,18, 0,10,28", 1.8)
|
-- 2-й — длительность одного отрезка,
|
||||||
|
-- 3-й — куда камера смотрит в каждой точке (тоже 4 точки).
|
||||||
|
__rbxl_camera_cutscene(
|
||||||
|
"0,18,-10, 12,12,8, -12,12,18, 0,10,28", 1.8,
|
||||||
|
"0,2,8, 0,2,14, 0,2,20, 0,2,27"
|
||||||
|
)
|
||||||
|
|
||||||
local winSound = Instance.new("Sound", workspace)
|
local winSound = Instance.new("Sound", workspace)
|
||||||
winSound.SoundId = "win"; winSound.Volume = 1
|
winSound.SoundId = "win"; winSound.Volume = 1
|
||||||
|
|||||||
@ -1966,16 +1966,20 @@ export function registerRobloxShim(lua, opts) {
|
|||||||
send('player.heal', { amount: Number(amount) || 0 });
|
send('player.heal', { amount: Number(amount) || 0 });
|
||||||
});
|
});
|
||||||
// Камера-облёт — паритет с JS game.camera.cutscene(points, opts).
|
// Камера-облёт — паритет с JS game.camera.cutscene(points, opts).
|
||||||
// pointsFlat: x1,y1,z1,x2,y2,z2,... — потому что массив объектов
|
// pointsFlat/lookAtFlat: x1,y1,z1,x2,y2,z2,... — потому что массив
|
||||||
// в wasmoon через C-boundary неудобен.
|
// объектов в wasmoon через C-boundary неудобен.
|
||||||
global.set('__rbxl_camera_cutscene', (pointsFlat, segDuration) => {
|
global.set('__rbxl_camera_cutscene', (pointsFlat, segDuration, lookAtFlat) => {
|
||||||
const arr = String(pointsFlat || '').split(',').map((s) => Number(s) || 0);
|
const parse = (s) => {
|
||||||
const points = [];
|
const out = [];
|
||||||
for (let i = 0; i + 2 < arr.length; i += 3) {
|
const arr = String(s || '').split(',').map((v) => Number(v) || 0);
|
||||||
points.push({ x: arr[i], y: arr[i + 1], z: arr[i + 2] });
|
for (let i = 0; i + 2 < arr.length; i += 3) {
|
||||||
}
|
out.push({ x: arr[i], y: arr[i + 1], z: arr[i + 2] });
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
};
|
||||||
send('camera.cutscene', {
|
send('camera.cutscene', {
|
||||||
points,
|
points: parse(pointsFlat),
|
||||||
|
lookAt: lookAtFlat ? parse(lookAtFlat) : [],
|
||||||
segDuration: Number(segDuration) || 1.5,
|
segDuration: Number(segDuration) || 1.5,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user