chore: attach promises to hydrate
This commit is contained in:
parent
ed0ede0577
commit
de5957fd05
|
@ -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();
|
|
||||||
},
|
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user