import { EEnemySize } from "../GameData/index.js"; import { Vector2 } from "../Util/index.js"; export class VisEnemy { _positions; _directions; _image; _context; _simEnemy; _angle = null; _gdRoot; constructor(gdRoot, simEnemy, width, height) { this._gdRoot = gdRoot; this._simEnemy = simEnemy; this._image = document.createElement("canvas"); this._image.width = width; this._image.height = height; this._context = this._image.getContext("2d"); this._positions = [simEnemy.position, simEnemy.position]; this._directions = [simEnemy.direction, simEnemy.direction]; } get positions() { return this._positions; } get image() { return this._image; } advanceStep() { const prevPos = this._positions[1]; const prevDir = this._directions[1]; this._positions = [prevPos, this._simEnemy.position]; this._directions = [prevDir, this._simEnemy.direction]; } update(t) { const directions = this._directions; const dir = Vector2.lerp(directions[0], directions[1], t); const angle = Math.atan2(dir.x, -dir.y) - Math.PI / 2; if (this._angle == angle) { return; } this._angle = angle; const ctx = this._context; ctx.clearRect(0, 0, this._image.width, this._image.height); ctx.save(); ctx.translate(this._image.width / 2, this._image.height / 2); ctx.rotate(angle); switch (this._simEnemy.size) { case EEnemySize.Tiny: ctx.scale(0.75, 0.75); break; case EEnemySize.Huge: ctx.scale(2, 2); break; } ctx.drawImage(this._gdRoot.image("enemy-" + (this._simEnemy.index | 0) + ".svg"), -this._image.width / 2, -this._image.height / 2, this._image.width, this._image.height); ctx.restore(); } } //# sourceMappingURL=VisEnemy.js.map