feat(rbxl): Day/Night меняет skybox preset с fadeTo
Roblox Day/Night раньше менял только сцен-clearColor и hemiLight через
setTimeOfDay (это работало — пол темнел). Но небо оставалось голубым
потому что SkyboxManager (купол + горы + звёзды) рулится отдельно.
Теперь по часу мапим в preset SkyboxManager:
06-08, 17-19 → sunset (оранжевое небо)
08-17 → lowpoly-roblox (синее день)
19-06 → starry-night (звёзды + луна + тёмное)
Используем skybox.fadeTo({preset}, 2) для плавного 2-секундного перехода
между пресетами (Урок 62 — кастомное небо).
Это даст реальную смену день↔ночь как в оригинале Roblox-Zapper'а.
This commit is contained in:
parent
b820ad11bd
commit
742bca59ee
@ -213,8 +213,7 @@ export class GameRuntime {
|
||||
}
|
||||
} else if (cmd === 'lightingTimeUpdate') {
|
||||
// Roblox Lighting:SetMinutesAfterMidnight → Babylon небо.
|
||||
// Ускоряем в 8x чтобы юзер увидел переход день↔ночь
|
||||
// в течение ~5 секунд после Play.
|
||||
// Ускоряем в 8x + меняем пресет skybox (clear/sunset/night).
|
||||
try {
|
||||
const baseHour = Number(payload?.hour);
|
||||
if (baseHour >= 0 && baseHour < 24) {
|
||||
@ -222,11 +221,25 @@ export class GameRuntime {
|
||||
this._lightBaseHour = baseHour;
|
||||
this._lightStartReal = performance.now();
|
||||
}
|
||||
// Δigh-час относительно стартовой
|
||||
const dGame = baseHour - this._lightBaseHour;
|
||||
const accel = 8;
|
||||
const hour = ((this._lightBaseHour + dGame * accel) % 24 + 24) % 24;
|
||||
this.scene3d?.setTimeOfDay?.(hour);
|
||||
// Skybox preset по фазе:
|
||||
// 06-08 sunset, 08-17 clear, 17-19 sunset, 19-06 starry-night
|
||||
let targetPreset;
|
||||
if (hour >= 6 && hour < 8) targetPreset = 'sunset';
|
||||
else if (hour >= 8 && hour < 17) targetPreset = 'lowpoly-roblox';
|
||||
else if (hour >= 17 && hour < 19) targetPreset = 'sunset';
|
||||
else targetPreset = 'starry-night';
|
||||
if (this._lightPreset !== targetPreset) {
|
||||
this._lightPreset = targetPreset;
|
||||
try {
|
||||
const sb = this.scene3d?.skybox;
|
||||
if (sb?.fadeTo) sb.fadeTo({ preset: targetPreset }, 2);
|
||||
else this.scene3d?.setSkybox?.({ preset: targetPreset });
|
||||
} catch (_) {}
|
||||
}
|
||||
}
|
||||
} catch (_) {}
|
||||
} else if (cmd === 'particleCreated') {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user