fix(player): scene.setColor по ref + scene.setScale (порт)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
e4125e6488
commit
b6397a3ad0
@ -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;
|
||||
|
||||
@ -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)) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user