import GeometryPoint from "./geometry/GeometryPoint.js"; export default class Movable { constructor(defaultAnimation, speed = 1) { this.currentAnimation = 'DEFAULT'; this.animations = { DEFAULT: defaultAnimation, }; this.position = new GeometryPoint(); this.speed = speed; this.jumpHeight = 35; this.fallSpeed = 0; } playAnimation(animation, timestamp) { this.currentAnimation = animation; this.animations[animation].play(timestamp); } addAnimation(name, animation) { this.animations[name] = animation; } moveLeft(delta = 1) { this.position.x -= this.speed * delta; } moveRight(delta = 1) { this.position.x += this.speed * delta; } getRect() { return this.animations[this.currentAnimation].getRect(); } getWidth() { return this.getRect().width; } getHeight() { return this.getRect().height; } getPositionFootLeft() { return new GeometryPoint( this.position.x - this.animations[this.currentAnimation].getWidth() * 0.5, this.position.y ); } getPositionFootRight() { return new GeometryPoint( this.position.x + this.getWidth() * 0.5, this.position.y ); } getPositionHeadLeft() { return new GeometryPoint( this.position.x - this.animations[this.currentAnimation].getWidth() * 0.5, this.position.y - this.animations[this.currentAnimation].getHeight() ); } getPositionHeadRight() { return new GeometryPoint( this.position.x + this.getWidth() * 0.5, this.position.y - this.animations[this.currentAnimation].getHeight() ); } jump() { this.fallSpeed -= this.jumpHeight; this.isJumping = true; } getFootHeight() { return new GeometryPoint( this.position.x, this.position.y + this.animations[this.currentAnimation].getHeight() ); } setFootHeight(height) { this.position.y = height - this.animations[this.currentAnimation].getHeight(); } draw(context) { this.animations[this.currentAnimation].setFootPosition(this.position.x, this.position.y); this.animations[this.currentAnimation].draw(context); } }