fix(studio): Ctrl+D дублирует объект РОВНО на месте оригинала (не смещает +1 по X)

duplicateSelected для model/userModel/primitive ставил копию на sel.x+1 →
визуальное смещение. Теперь копия появляется в той же точке (как Roblox Studio).
Block остаётся с поиском свободной клетки (воксель нельзя в занятую).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
min 2026-06-07 10:38:34 +03:00
parent e477d652f6
commit 6c0c3dc26e

View File

@ -5380,7 +5380,8 @@ export class BabylonScene {
const sx = sel.x, sy = sel.y, sz = sel.z;
const rotY = sel.rotationY || 0;
const srcId = sel.instanceId;
this.modelManager.addInstance(typeId, sx + 1, sy, sz, rotY)
// Дубль появляется РОВНО на месте оригинала (как в Roblox Studio).
this.modelManager.addInstance(typeId, sx, sy, sz, rotY)
.then(newId => {
if (newId != null) {
this._copyScriptsToNewObject('model', srcId, newId);
@ -5396,7 +5397,7 @@ export class BabylonScene {
const sx = sel.x, sy = sel.y, sz = sel.z;
const rotY = sel.rotationY || 0;
const srcUmId = sel.instanceId;
this.userModelManager.addInstance(typeId, sx + 1, sy, sz, rotY, {
this.userModelManager.addInstance(typeId, sx, sy, sz, rotY, {
currentUserId: this._currentUserId || null,
}).then(newId => {
if (newId != null) {
@ -5408,7 +5409,7 @@ export class BabylonScene {
});
} else if (sel.type === 'primitive') {
const newId = this.primitiveManager.addInstance(sel.primitiveType, {
x: sel.x + 1, y: sel.y, z: sel.z,
x: sel.x, y: sel.y, z: sel.z,
sx: sel.sx, sy: sel.sy, sz: sel.sz,
// Сохраняем вращение копии (без этого сбрасывалось, баг 2026-06-04).
rotationX: sel.rotationX || 0,