From e45a9968c4d0790259b072b912b491537d3895a0 Mon Sep 17 00:00:00 2001 From: min Date: Mon, 8 Jun 2026 19:03:09 +0300 Subject: [PATCH] =?UTF-8?q?feat(lighting):=20persistence=20=D0=BD=D0=B0?= =?UTF-8?q?=D1=81=D1=82=D1=80=D0=BE=D0=B5=D0=BA=20=D1=81=D0=B2=D0=B5=D1=82?= =?UTF-8?q?=D0=B0=20=D0=B2=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Слайдеры sun/hemi/ambient/exposure/contrast/saturation теперь сохраняются в projectData.scene.lighting при save и применяются обратно при load. Раньше параметры жили только в текущей сессии — после refresh страницы возвращались к дефолтам. Импортированные .rbxl карты также сохраняют выставленные пользователем параметры света. --- src/editor/engine/BabylonScene.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/editor/engine/BabylonScene.js b/src/editor/engine/BabylonScene.js index dc89f9a..3a7eb98 100644 --- a/src/editor/engine/BabylonScene.js +++ b/src/editor/engine/BabylonScene.js @@ -7776,6 +7776,15 @@ export class BabylonScene { crosshair: this._crosshair || 'dot', shadowQuality: this._shadowQuality || 'soft', environment: this.environment ? this.environment.serialize() : null, + // Кастомные настройки света — слайдеры из «Свет и атмосфера» + lighting: { + sunIntensity: this._sunIntensity ?? this._sunLight?.intensity ?? 0.8, + hemiIntensity: this._hemiIntensity ?? this._hemiLight?.intensity ?? 0.65, + sceneAmbient: this._sceneAmbient ?? 0.3, + exposure: this._exposure ?? 1.0, + contrast: this._contrast ?? 1.0, + saturation: this._saturation ?? 1.0, + }, skybox: this.skybox ? this.skybox.serialize() : null, leaderstats: this.leaderstats ? this.leaderstats.serialize() : null, achievements: this.achievements ? this.achievements.serialize() : null, @@ -8260,6 +8269,12 @@ export class BabylonScene { if (state.scene.environment && this.environment) { this.environment.load(state.scene.environment); } + // Кастомные настройки света/цветокоррекции — применяем через + // setLightingProps (он сам подхватит default-ы если значения нет). + if (state.scene.lighting) { + try { this.setLightingProps(state.scene.lighting); } + catch (e) { console.warn('[BabylonScene] lighting load failed:', e); } + } // Кастомное небо (задача 16) if (state.scene.skybox && this.skybox) { this.skybox.load(state.scene.skybox);