Skip to content

Commit

Permalink
feat: update code
Browse files Browse the repository at this point in the history
  • Loading branch information
cptbtptpbcptdtptp committed Dec 11, 2024
1 parent 0d57088 commit 0d004aa
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 8 deletions.
2 changes: 1 addition & 1 deletion packages/core/src/Camera.ts
Original file line number Diff line number Diff line change
Expand Up @@ -783,7 +783,7 @@ export class Camera extends Component {
private _updateShaderData(): void {
const shaderData = this.shaderData;

const transform = this.entity.transform;
const transform = this._entity.transform;
shaderData.setMatrix(Camera._inverseViewMatrixProperty, transform.worldMatrix);
shaderData.setVector3(Camera._cameraPositionProperty, transform.worldPosition);
shaderData.setVector3(Camera._cameraForwardProperty, transform.worldForward);
Expand Down
8 changes: 3 additions & 5 deletions packages/core/src/Entity.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { Matrix } from "@galacean/engine-math";
import { ignoreClone } from ".";
import { BoolUpdateFlag } from "./BoolUpdateFlag";
import { Component } from "./Component";
import { ComponentsDependencies } from "./ComponentsDependencies";
Expand Down Expand Up @@ -97,7 +96,6 @@ export class Entity extends EngineObject {
/** @internal */
_isTemplate: boolean = false;
/** @internal */
@ignoreClone
_updateFlagManager: UpdateFlagManager = new UpdateFlagManager();

private _transform: Transform;
Expand Down Expand Up @@ -224,7 +222,7 @@ export class Entity extends EngineObject {
this.name = name;
for (let i = 0, n = components.length; i < n; i++) {
const type = components[i];
if (!Transform.prototype.isPrototypeOf(type.prototype) || !this.transform) {
if (!(type.prototype instanceof Transform) || !this.transform) {
this.addComponent(type);
}
}
Expand All @@ -242,7 +240,7 @@ export class Entity extends EngineObject {
type: T,
...args: ComponentArguments<T>
): InstanceType<T> {
Transform.prototype.isPrototypeOf(type.prototype) && this.transform?.destroy();
type.prototype instanceof Transform && this.transform?.destroy();
ComponentsDependencies._addCheck(this, type);
const component = new type(this, ...args) as InstanceType<T>;
this._components.push(component);
Expand Down Expand Up @@ -466,7 +464,7 @@ export class Entity extends EngineObject {
}

/**
* Register world transform change flag.
* Listen for changes in the world pose of this `Entity`.
* @returns Change flag
*/
registerWorldChangeFlag(): BoolUpdateFlag {
Expand Down
18 changes: 16 additions & 2 deletions packages/core/src/Renderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@ export class Renderer extends Component implements IComponentCustomClone {
protected _dirtyUpdateFlag: number = 0;
@ignoreClone
protected _rendererLayer: Vector4 = new Vector4();
@ignoreClone
protected _transformEntity: Entity;

@deepClone
private _shaderData: ShaderData = new ShaderData(ShaderDataGroup.Renderer);
Expand Down Expand Up @@ -170,7 +172,7 @@ export class Renderer extends Component implements IComponentCustomClone {
this._addResourceReferCount(this.shaderData, 1);

this._onTransformChanged = this._onTransformChanged.bind(this);
entity._updateFlagManager.addListener(this._onTransformChanged);
this._setTransformEntity(entity);

shaderData.enableMacro(Renderer._receiveShadowMacro);
shaderData.setVector4(Renderer._rendererLayerProperty, this._rendererLayer);
Expand Down Expand Up @@ -364,7 +366,7 @@ export class Renderer extends Component implements IComponentCustomClone {
protected override _onDestroy(): void {
super._onDestroy();

this._entity._updateFlagManager.removeListener(this._onTransformChanged);
this._setTransformEntity(null);
this._addResourceReferCount(this.shaderData, -1);

const materials = this._materials;
Expand Down Expand Up @@ -460,6 +462,18 @@ export class Renderer extends Component implements IComponentCustomClone {
}
}

/**
* @internal
*/
protected _setTransformEntity(entity: Entity): void {
const preEntity = this._transformEntity;
if (entity !== preEntity) {
preEntity?._updateFlagManager.removeListener(this._onTransformChanged);
entity?._updateFlagManager.addListener(this._onTransformChanged);
this._transformEntity = entity;
}
}

/**
* @internal
*/
Expand Down
1 change: 1 addition & 0 deletions packages/core/src/Transform.ts
Original file line number Diff line number Diff line change
Expand Up @@ -887,6 +887,7 @@ export class Transform extends Component {

//--------------------------------------------------------------deprecated----------------------------------------------------------------
/**
* Listen for changes in the world position of this `Transform`.
* @deprecated
*/
registerWorldChangeFlag(): BoolUpdateFlag {
Expand Down
1 change: 1 addition & 0 deletions packages/core/src/mesh/SkinnedMeshRenderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,7 @@ export class SkinnedMeshRenderer extends MeshRenderer {
}
break;
case SkinUpdateFlag.RootBoneChanged:
this._setTransformEntity(<Entity>value);
this._dirtyUpdateFlag |= RendererUpdateFlags.WorldVolume;
break;
}
Expand Down

0 comments on commit 0d004aa

Please sign in to comment.