chore: attach promises to hydrate

This commit is contained in:
cha0s 2020-06-21 23:06:05 -05:00
parent ed0ede0577
commit de5957fd05

View File

@ -103,7 +103,10 @@ export default class Animated extends decorate(Trait) {
} }
hydrate() { hydrate() {
return this.promiseAnimations(); return Promise.all([
this.loadAnimations(),
this.loadAnimationImagesIfPossible(),
]);
} }
jitterFor(key) { jitterFor(key) {
@ -117,10 +120,22 @@ export default class Animated extends decorate(Trait) {
if (this.animationsPromise) { if (this.animationsPromise) {
return; return;
} }
this.promiseAnimations(); if (!this.animationsPromise) {
const animationPromises = [];
// Load all animations.
for (const key in this._animations) {
const {uri} = this._animations[key];
const promise = Animation.load(uri).then((animation) => {
// Zip with key to make populating animations and views trivial.
return {animation, key};
});
animationPromises.push(promise);
}
this.animationsPromise = Promise.all(animationPromises);
}
// Store keyed animations. // Store keyed animations.
this.animations = {}; this.animations = {};
this.animationsPromise.then((animations) => { return this.animationsPromise.then((animations) => {
animations.forEach(({animation, key}) => { animations.forEach(({animation, key}) => {
this.animations[key] = animation; this.animations[key] = animation;
// Set direction upfront. // Set direction upfront.
@ -128,8 +143,6 @@ export default class Animated extends decorate(Trait) {
}); });
// Bounding box update. // Bounding box update.
this.entity.updateVisibleBoundingBox(); this.entity.updateVisibleBoundingBox();
}).catch((error) => {
console.error(`Failed loading some or all animations for '${this.entity.uri}'.`);
}); });
} }
@ -145,7 +158,7 @@ export default class Animated extends decorate(Trait) {
} }
// Store keyed animation views. // Store keyed animation views.
this.animationViews = {}; this.animationViews = {};
this.animationsPromise.then((animations) => { return this.animationsPromise.then((animations) => {
animations.forEach(({animation, key}) => { animations.forEach(({animation, key}) => {
this.animationViews[key] = new AnimationView(animation); this.animationViews[key] = new AnimationView(animation);
// Calculate any offset. // Calculate any offset.
@ -158,8 +171,6 @@ export default class Animated extends decorate(Trait) {
} }
}); });
this.setSpriteScale(); this.setSpriteScale();
}).catch((error) => {
console.error(`Failed loading some or all animation images for '${this.entity.uri}'.`);
}); });
} }
@ -180,23 +191,6 @@ export default class Animated extends decorate(Trait) {
} }
} }
promiseAnimations() {
if (!this.animationsPromise) {
const animationPromises = [];
// Load all animations.
for (const key in this._animations) {
const {uri} = this._animations[key];
const promise = Animation.load(uri).then((animation) => {
// Zip with key to make populating animations and views trivial.
return {animation, key};
});
animationPromises.push(promise);
}
this.animationsPromise = Promise.all(animationPromises);
}
return this.animationsPromise;
}
setSpriteScale() { setSpriteScale() {
if (!this.animationViews) { if (!this.animationViews) {
return; return;
@ -285,17 +279,6 @@ export default class Animated extends decorate(Trait) {
this.setSpriteScale(); this.setSpriteScale();
}, },
traitAdded: (type) => {
if (-1 === [
'animated',
'visible',
].indexOf(type)) {
return;
}
this.loadAnimations();
this.loadAnimationImagesIfPossible();
},
}; };
} }