Skip to content

Commit 76fdf70

Browse files
fix: two transforms coexist during cloning (#2895)
1 parent c420cf0 commit 76fdf70

1 file changed

Lines changed: 10 additions & 5 deletions

File tree

packages/core/src/Entity.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ import { DisorderedArray } from "./utils/DisorderedArray";
1919
* Entity, be used as components container.
2020
*/
2121
export class Entity extends EngineObject {
22+
/** @internal */
23+
static _tempComponentConstructors: ComponentConstructor[] = [];
24+
2225
/**
2326
* @internal
2427
*/
@@ -508,7 +511,13 @@ export class Entity extends EngineObject {
508511
}
509512

510513
private _createCloneEntity(): Entity {
511-
const cloneEntity = new Entity(this.engine, this.name);
514+
const componentConstructors = Entity._tempComponentConstructors;
515+
const components = this._components;
516+
for (let i = 0, n = components.length; i < n; i++) {
517+
componentConstructors[i] = components[i].constructor as ComponentConstructor;
518+
}
519+
const cloneEntity = new Entity(this.engine, this.name, ...componentConstructors);
520+
componentConstructors.length = 0;
512521
const templateResource = this._templateResource;
513522
if (templateResource) {
514523
cloneEntity._templateResource = templateResource;
@@ -521,10 +530,6 @@ export class Entity extends EngineObject {
521530
for (let i = 0, n = srcChildren.length; i < n; i++) {
522531
cloneEntity.addChild(srcChildren[i]._createCloneEntity());
523532
}
524-
const components = this._components;
525-
for (let i = 0, n = components.length; i < n; i++) {
526-
cloneEntity.addComponent(<ComponentConstructor>components[i].constructor);
527-
}
528533
return cloneEntity;
529534
}
530535

0 commit comments

Comments
 (0)