fix(lua): троттлинг lightingTimeUpdate до 250мс на shim-стороне

Day/Night скрипт в Roblox: while true do wait(0.01); SetMinutes(+0.1) end
= 100+ Hz обновлений Lighting.ClockTime. Каждое слало lightingTimeUpdate
через send() из coroutine, что (вероятно) вызывает WASM access crash.

Тротлинг прямо в SetMinutesAfterMidnight — не чаще раза в 250мс.
Lua-сторона продолжает делать высокочастотные обновления _minutes/ClockTime
(скрипт работает корректно), но в JS уходит только 4 раза в секунду.
This commit is contained in:
min 2026-06-08 15:49:04 +03:00
parent 265c225772
commit 6bec44d778

View File

@ -910,10 +910,15 @@ export function registerRobloxShim(lua, opts) {
lighting.FogColor = new RbxColor3(0.75, 0.75, 0.75); lighting.FogColor = new RbxColor3(0.75, 0.75, 0.75);
lighting._minutes = 14 * 60; lighting._minutes = 14 * 60;
lighting.GetMinutesAfterMidnight = function () { return lighting._minutes; }; lighting.GetMinutesAfterMidnight = function () { return lighting._minutes; };
let _lastLightSent = 0;
lighting.SetMinutesAfterMidnight = function (m) { lighting.SetMinutesAfterMidnight = function (m) {
lighting._minutes = (Number(m) || 0) % 1440; lighting._minutes = (Number(m) || 0) % 1440;
lighting.ClockTime = lighting._minutes / 60; lighting.ClockTime = lighting._minutes / 60;
// Шлём в GameRuntime для обновления реального неба Babylon // Тротлинг: не чаще раза в 250мс. Скрипты Day/Night обновляют это
// каждый кадр (100+ Hz), это убивает WASM.
const now = performance.now();
if (now - _lastLightSent < 250) return;
_lastLightSent = now;
send('lightingTimeUpdate', { hour: lighting.ClockTime }); send('lightingTimeUpdate', { hour: lighting.ClockTime });
}; };
lighting.GetMoonDirection = function () { return new RbxVector3(0, 1, 0); }; lighting.GetMoonDirection = function () { return new RbxVector3(0, 1, 0); };