import { ISpriteSheet, PixelDefinition, SpriteSheetMetadata } from "../types"; export class DefaultSpriteSheet implements ISpriteSheet { private _spriteSheetCharacters: string[]; private _pixelDefinitions: PixelDefinition[]; constructor() { this._spriteSheetCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".split(''); this._pixelDefinitions = []; this.addDef("a", { index: 0, width: 4 }); this.addDef("b", { index: 1, width: 4 }); this.addDef("c", { index: 2, width: 4 }); this.addDef("d", { index: 3, width: 4 }); this.addDef("e", { index: 4, width: 4 }); this.addDef("f", { index: 5, width: 3 }); this.addDef("g", { index: 6, width: 4 }); this.addDef("h", { index: 7, width: 4 }); this.addDef("i", { index: 8, width: 1 }); this.addDef("j", { index: 9, width: 2 }); this.addDef("k", { index: 10, width: 4 }); this.addDef("l", { index: 11, width: 2 }); this.addDef("m", { index: 12, width: 5 }); this.addDef("n", { index: 13, width: 4 }); this.addDef("o", { index: 14, width: 4 }); this.addDef("p", { index: 15, width: 4 }); this.addDef("q", { index: 16, width: 4 }); this.addDef("r", { index: 17, width: 4 }); this.addDef("s", { index: 18, width: 4 }); this.addDef("t", { index: 19, width: 4 }); this.addDef("u", { index: 20, width: 4 }); this.addDef("v", { index: 21, width: 5 }); this.addDef("w", { index: 22, width: 5 }); this.addDef("x", { index: 23, width: 5 }); this.addDef("y", { index: 24, width: 4 }); this.addDef("z", { index: 25, width: 4 }); this.addDef("A", { index: 26, width: 4 }); this.addDef("B", { index: 27, width: 4 }); this.addDef("C", { index: 28, width: 4 }); this.addDef("D", { index: 29, width: 4 }); this.addDef("E", { index: 30, width: 4 }); this.addDef("F", { index: 31, width: 4 }); this.addDef("G", { index: 32, width: 4 }); this.addDef("H", { index: 33, width: 4 }); this.addDef("I", { index: 34, width: 3 }); this.addDef("J", { index: 35, width: 4 }); this.addDef("K", { index: 36, width: 4 }); this.addDef("L", { index: 37, width: 4 }); this.addDef("M", { index: 38, width: 5 }); this.addDef("N", { index: 39, width: 5 }); this.addDef("O", { index: 40, width: 4 }); this.addDef("P", { index: 41, width: 4 }); this.addDef("Q", { index: 42, width: 5 }); this.addDef("R", { index: 43, width: 4 }); this.addDef("S", { index: 44, width: 4 }); this.addDef("T", { index: 45, width: 5 }); this.addDef("U", { index: 46, width: 4 }); this.addDef("V", { index: 47, width: 5 }); this.addDef("W", { index: 48, width: 5 }); this.addDef("X", { index: 49, width: 5 }); this.addDef("Y", { index: 50, width: 5 }); this.addDef("Z", { index: 51, width: 4 }); } public has(character: string): boolean { const char = character[0]; return this._spriteSheetCharacters.includes(char); } public get(character: string): PixelDefinition { character = character[0]; let totalPixelOffset = 0; for (let definition of this._pixelDefinitions) { if (definition.character === character) { const withData = { ...definition }; withData.spriteSheetOffset = totalPixelOffset; return withData; } totalPixelOffset += definition.width + 1; } return null; } private addDef(char: string, def: SpriteSheetMetadata) { this._pixelDefinitions.push({ character: char, ...def, spriteSheetOffset: 0 }); } }