import { IMAGES, SPRITE_SPECS, SpriteSpec, Sprites } from "../config"; import { Entity, EntityNames } from "."; import { BoundingBox, ComponentNames, Grid, Interactable, Sprite, } from "../components"; import { Coord2D } from "../interfaces"; export class FunctionBox extends Entity { private static spriteSpec: SpriteSpec = SPRITE_SPECS.get( Sprites.FUNCTION_BOX, ) as SpriteSpec; private code: string; constructor(gridPosition: Coord2D, code: string) { super(EntityNames.FunctionBox); this.code = code; this.addComponent( new BoundingBox( { x: 0, y: 0, }, { width: FunctionBox.spriteSpec.width, height: FunctionBox.spriteSpec.height, }, 0, ), ); this.addComponent(new Grid(true, gridPosition)); this.addComponent( new Sprite( IMAGES.get(FunctionBox.spriteSpec.sheet)!, { x: 0, y: 0 }, { width: FunctionBox.spriteSpec.width, height: FunctionBox.spriteSpec.height, }, FunctionBox.spriteSpec.msPerFrame, FunctionBox.spriteSpec.frames, ), ); this.hooks.set(ComponentNames.Highlight, { add: () => { this.addComponent(new Interactable(() => this.viewInsides())); }, remove: () => { this.removeComponent(ComponentNames.Interactable); }, }); } public viewInsides() { console.log("I am a function box!"); } }