Moving Physics optim to DirtyScene
The Physics engine is now disabled only if no sprites are moving (if they have no velocity). Also, if a sprite is moving (if it has a velocity), the dirty state is set.
This commit is contained in:
parent
b57a9957a3
commit
bc19cbd525
@ -12,6 +12,7 @@ export abstract class DirtyScene extends ResizableScene {
|
|||||||
private isAlreadyTracking: boolean = false;
|
private isAlreadyTracking: boolean = false;
|
||||||
protected dirty:boolean = true;
|
protected dirty:boolean = true;
|
||||||
private objectListChanged:boolean = true;
|
private objectListChanged:boolean = true;
|
||||||
|
private physicsEnabled: boolean = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Track all objects added to the scene and adds a callback each time an animation is added.
|
* Track all objects added to the scene and adds a callback each time an animation is added.
|
||||||
@ -37,6 +38,27 @@ export abstract class DirtyScene extends ResizableScene {
|
|||||||
this.events.on(Events.RENDER, () => {
|
this.events.on(Events.RENDER, () => {
|
||||||
this.objectListChanged = false;
|
this.objectListChanged = false;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this.physics.disableUpdate();
|
||||||
|
this.events.on(Events.POST_UPDATE, () => {
|
||||||
|
let objectMoving = false;
|
||||||
|
for (const body of this.physics.world.bodies.entries) {
|
||||||
|
if (body.velocity.x !== 0 || body.velocity.y !== 0) {
|
||||||
|
this.objectListChanged = true;
|
||||||
|
objectMoving = true;
|
||||||
|
if (!this.physicsEnabled) {
|
||||||
|
this.physics.enableUpdate();
|
||||||
|
this.physicsEnabled = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!objectMoving && this.physicsEnabled) {
|
||||||
|
this.physics.disableUpdate();
|
||||||
|
this.physicsEnabled = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private trackAnimation(): void {
|
private trackAnimation(): void {
|
||||||
|
@ -186,7 +186,6 @@ export class GameScene extends DirtyScene implements CenterListener {
|
|||||||
private popUpElements : Map<number, DOMElement> = new Map<number, Phaser.GameObjects.DOMElement>();
|
private popUpElements : Map<number, DOMElement> = new Map<number, Phaser.GameObjects.DOMElement>();
|
||||||
private originalMapUrl: string|undefined;
|
private originalMapUrl: string|undefined;
|
||||||
private pinchManager: PinchManager|undefined;
|
private pinchManager: PinchManager|undefined;
|
||||||
private physicsEnabled: boolean = true;
|
|
||||||
private mapTransitioning: boolean = false; //used to prevent transitions happenning at the same time.
|
private mapTransitioning: boolean = false; //used to prevent transitions happenning at the same time.
|
||||||
private onVisibilityChangeCallback: () => void;
|
private onVisibilityChangeCallback: () => void;
|
||||||
|
|
||||||
@ -1088,8 +1087,6 @@ ${escapedMessage}
|
|||||||
}
|
}
|
||||||
|
|
||||||
createCollisionWithPlayer() {
|
createCollisionWithPlayer() {
|
||||||
this.physics.disableUpdate();
|
|
||||||
this.physicsEnabled = false;
|
|
||||||
//add collision layer
|
//add collision layer
|
||||||
this.Layers.forEach((Layer: Phaser.Tilemaps.TilemapLayer) => {
|
this.Layers.forEach((Layer: Phaser.Tilemaps.TilemapLayer) => {
|
||||||
this.physics.add.collider(this.CurrentPlayer, Layer, (object1: GameObject, object2: GameObject) => {
|
this.physics.add.collider(this.CurrentPlayer, Layer, (object1: GameObject, object2: GameObject) => {
|
||||||
@ -1223,20 +1220,7 @@ ${escapedMessage}
|
|||||||
this.dirty = false;
|
this.dirty = false;
|
||||||
mediaManager.updateScene();
|
mediaManager.updateScene();
|
||||||
this.currentTick = time;
|
this.currentTick = time;
|
||||||
if (this.CurrentPlayer.isMoving()) {
|
|
||||||
this.dirty = true;
|
|
||||||
}
|
|
||||||
this.CurrentPlayer.moveUser(delta);
|
this.CurrentPlayer.moveUser(delta);
|
||||||
if (this.CurrentPlayer.isMoving()) {
|
|
||||||
this.dirty = true;
|
|
||||||
if (!this.physicsEnabled) {
|
|
||||||
this.physics.enableUpdate();
|
|
||||||
this.physicsEnabled = true;
|
|
||||||
}
|
|
||||||
} else if (this.physicsEnabled) {
|
|
||||||
this.physics.disableUpdate();
|
|
||||||
this.physicsEnabled = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Let's handle all events
|
// Let's handle all events
|
||||||
while (this.pendingEvents.length !== 0) {
|
while (this.pendingEvents.length !== 0) {
|
||||||
|
Loading…
Reference in New Issue
Block a user