From b6397a3ad0b22f5f321e44adad656fe3a1965d85 Mon Sep 17 00:00:00 2001 From: min Date: Fri, 5 Jun 2026 19:13:05 +0300 Subject: [PATCH] =?UTF-8?q?fix(player):=20scene.setColor=20=D0=BF=D0=BE=20?= =?UTF-8?q?ref=20+=20scene.setScale=20(=D0=BF=D0=BE=D1=80=D1=82)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 --- src/engine/GameRuntime.js | 19 +++++++++++++++++-- src/engine/ScriptSandboxWorker.js | 5 +++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/engine/GameRuntime.js b/src/engine/GameRuntime.js index 4d9a306..cac5068 100644 --- a/src/engine/GameRuntime.js +++ b/src/engine/GameRuntime.js @@ -2557,12 +2557,27 @@ export class GameRuntime { return; } + if (cmd === 'scene.setScale') { + try { + const k = Number(payload?.scale); + if (!Number.isFinite(k) || k < 0) return; + const pm = this.scene3d?.primitiveManager; + const rid = this._resolvePrimitiveId(payload?.id ?? payload?.ref); + const data = (pm && rid != null) ? pm.instances.get(rid) : null; + if (data?.mesh) { + if (data._worldMatrixFrozen) { try { data.mesh.unfreezeWorldMatrix?.(); } catch (e) {} data._worldMatrixFrozen = false; } + data.mesh.scaling.set(k, k, k); + } + } catch (e) {} + return; + } + if (cmd === 'scene.setColor') { try { const color = payload?.color; if (typeof color !== 'string') return; // Окрашиваемый блок (studs-block): ref 'block:x,y,z' → BlockManager. - const ref = payload?.id; + const ref = payload?.id ?? payload?.ref; if (typeof ref === 'string' && ref.startsWith('block:')) { const parts = ref.slice(6).split(',').map(Number); if (parts.length === 3 && parts.every(Number.isFinite)) { @@ -2572,7 +2587,7 @@ export class GameRuntime { } const pm = this.scene3d?.primitiveManager; if (!pm) return; - const rid = this._resolvePrimitiveId(payload?.id); + const rid = this._resolvePrimitiveId(payload?.id ?? payload?.ref); const data = rid != null ? pm.instances.get(rid) : null; if (data) { data.color = color; diff --git a/src/engine/ScriptSandboxWorker.js b/src/engine/ScriptSandboxWorker.js index 8ff0b55..a199667 100644 --- a/src/engine/ScriptSandboxWorker.js +++ b/src/engine/ScriptSandboxWorker.js @@ -467,6 +467,11 @@ function _getOrCreateInstance(ref, kindHint) { _send('scene.setColor', { ref, color: String(value) }); return true; } + if (prop === 'scale') { + const k = Number(value); + if (Number.isFinite(k) && k >= 0) _send('scene.setScale', { ref, scale: k }); + return true; + } if (prop === 'transparency' || prop === 'opacity') { const v = Number(value); if (Number.isFinite(v)) {