From 4f6869863ccd94b4c3e15e3ec0d153cea81c5d18 Mon Sep 17 00:00:00 2001 From: cha0s Date: Sun, 8 Sep 2019 08:12:31 -0500 Subject: [PATCH] refactor: ticking promise --- packages/entity/traits/alive.trait.js | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/packages/entity/traits/alive.trait.js b/packages/entity/traits/alive.trait.js index beb5299..f87b7f7 100644 --- a/packages/entity/traits/alive.trait.js +++ b/packages/entity/traits/alive.trait.js @@ -71,7 +71,7 @@ export class Alive extends decorate(Trait) { this._deathSound = this.params.deathSound; const conditionJSON = this.params.deathCondition; this._deathCondition = behaviorItemFromJSON(conditionJSON); - this._isDying = false; + this._dyingTickingPromise = false; } destroy() { @@ -123,15 +123,17 @@ export class Alive extends decorate(Trait) { }, forceDeath: () => { - if (this._isDying) { + if (this._dyingTickingPromise) { return; } - this._isDying = true; - this.entity.emit('dying'); - this._deathActions.once('actionsFinished', () => { - if (this.entity.is('existent')) { - this.entity.destroy(); + this._dyingTickingPromise = this._deathActions.tickingPromise( + this._context + ) + this._dyingTickingPromise.then(() => { + if (!this.entity.is('existent')) { + throw new Error("STATE PROBLEM: non-existent entity up for death"); } + this.entity.destroy(); }); }, @@ -139,8 +141,8 @@ export class Alive extends decorate(Trait) { } tick(elapsed) { - if (this._isDying) { - this._deathActions.tick(this._context, elapsed); + if (this._dyingTickingPromise) { + this._dyingTickingPromise.tick(elapsed); } else { this.entity.dieIfPossible();