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') {
|
} else if (cmd === 'lightingTimeUpdate') {
|
||||||
// Roblox Lighting:SetMinutesAfterMidnight → Babylon небо.
|
// Roblox Lighting:SetMinutesAfterMidnight → Babylon небо.
|
||||||
// Ускоряем в 8x чтобы юзер увидел переход день↔ночь
|
// Ускоряем в 8x + меняем пресет skybox (clear/sunset/night).
|
||||||
// в течение ~5 секунд после Play.
|
|
||||||
try {
|
try {
|
||||||
const baseHour = Number(payload?.hour);
|
const baseHour = Number(payload?.hour);
|
||||||
if (baseHour >= 0 && baseHour < 24) {
|
if (baseHour >= 0 && baseHour < 24) {
|
||||||
@ -222,11 +221,25 @@ export class GameRuntime {
|
|||||||
this._lightBaseHour = baseHour;
|
this._lightBaseHour = baseHour;
|
||||||
this._lightStartReal = performance.now();
|
this._lightStartReal = performance.now();
|
||||||
}
|
}
|
||||||
// Δigh-час относительно стартовой
|
|
||||||
const dGame = baseHour - this._lightBaseHour;
|
const dGame = baseHour - this._lightBaseHour;
|
||||||
const accel = 8;
|
const accel = 8;
|
||||||
const hour = ((this._lightBaseHour + dGame * accel) % 24 + 24) % 24;
|
const hour = ((this._lightBaseHour + dGame * accel) % 24 + 24) % 24;
|
||||||
this.scene3d?.setTimeOfDay?.(hour);
|
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 (_) {}
|
} catch (_) {}
|
||||||
} else if (cmd === 'particleCreated') {
|
} else if (cmd === 'particleCreated') {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user