class AnimationController { constructor() { this.x = 0; this.y = 0; this.scaleX = 1; this.scaleY = 1; this.rotation = 0; this.cleanup = false; this.drawable = null; this.animations = []; } setDrawable(drawable /*Drawable*/) { if(this.drawable != null && drawable == null) { this.drawable.x = this.x; this.drawable.y = this.y; this.drawable.scale.x = this.scaleX; this.drawable.scale.y = this.scaleY; this.drawable.rotation = this.rotation; } this.drawable = drawable; if (drawable != null) { this.x = drawable.x; this.y = drawable.y; this.scaleX = drawable.scale.x; this.scaleY = drawable.scale.y; this.rotation = drawable.rotation; Engine.EnterFrameManagerInstance.add(this, (dt) => this.update(dt)); } else { Engine.EnterFrameManagerInstance.remove(this); } } update(timeElapsed /*float*/) { if (this.drawable == null) return; var tRotation = this.rotation; var tx = X; var ty = Y; var newScaleX = this.scaleX; var newScaleY = this.scaleY; for (var i = 0; i < this.animations.length; i++) { var animation = this.animations[i]; if (animation.active) { animation.update(timeElapsed); tx += animation.x; ty += animation.y; newScaleX *= animation.scale.x; newScaleY *= animation.scale.y; tRotation += animation.rotation; } } this.cleanUpAnimations(); if (drawable != null) { this.drawable.x = tx; this.drawable.y = ty; this.drawable.scale.x = newScaleX; this.drawable.scale.y = newScaleY; this.drawable.rotation = tRotation; } } removeAllAnimations() { this.setDrawable(null); this.animations.length = 0; } cleanUpAnimations() { for (var i = this.animations.length - 1; i >= 0; i--) { if (!this.animations[i].active) { this.animations.remove(this.animations[i]); } } } addAnimation(animation /*Animation*/) { this.animations.push(animation); } removeAnimation(animation /*Animation*/) { this.animations.remove(animation); } }