fix(player): scene.setColor по ref + scene.setScale (порт)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
min 2026-06-05 19:13:05 +03:00
parent e4125e6488
commit b6397a3ad0
2 changed files with 22 additions and 2 deletions

View File

@ -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;

View File

@ -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)) {