import { setRegion } from "./display"; import { Drawable } from "./drawable"; import type { IRegion, ISpriteDefinition } from "./types"; export class Figure extends Drawable { private frames: IRegion[]; private animationCounter = 0; private animationPeriod; constructor( public x: number, public y: number, definition: ISpriteDefinition, public frame: number = 0, ) { super(); this.x = x | 0; this.y = y | 0; this.frames = definition.frames; this.animationCounter = 0; this.animationPeriod = definition.animationPeriod ?? Number.POSITIVE_INFINITY; } override doDraw() { this.animationCounter++; if (this.animationCounter >= this.animationPeriod) { this.animationCounter = 0; this.frame = (this.frame + 1) % this.numFrames; } setRegion(this.x, this.y, this.width, this.height, this.image); } get width() { const frame = this.frames[(this.frame % this.numFrames)]; const line = frame[0]; return line?.length ?? 0; } get height() { const frame = this.frames[(this.frame % this.numFrames)]; return frame.length; } get numFrames() { return this.frames.length; } get image() { return this.frames[(this.frame % this.numFrames)]; } }