@al8b/image 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -0
- package/dist/blending.d.mts +3 -0
- package/dist/blending.d.ts +3 -0
- package/dist/blending.js +65 -0
- package/dist/blending.js.map +1 -0
- package/dist/blending.mjs +40 -0
- package/dist/blending.mjs.map +1 -0
- package/dist/color-DJyRSbpZ.d.mts +16 -0
- package/dist/color-DJyRSbpZ.d.ts +16 -0
- package/dist/core/color.d.mts +1 -0
- package/dist/core/color.d.ts +1 -0
- package/dist/core/color.js +61 -0
- package/dist/core/color.js.map +1 -0
- package/dist/core/color.mjs +36 -0
- package/dist/core/color.mjs.map +1 -0
- package/dist/core/context.d.mts +25 -0
- package/dist/core/context.d.ts +25 -0
- package/dist/core/context.js +77 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/context.mjs +53 -0
- package/dist/core/context.mjs.map +1 -0
- package/dist/core/drawing.d.mts +2 -0
- package/dist/core/drawing.d.ts +2 -0
- package/dist/core/drawing.js +165 -0
- package/dist/core/drawing.js.map +1 -0
- package/dist/core/drawing.mjs +134 -0
- package/dist/core/drawing.mjs.map +1 -0
- package/dist/core/font.d.mts +19 -0
- package/dist/core/font.d.ts +19 -0
- package/dist/core/font.js +80 -0
- package/dist/core/font.js.map +1 -0
- package/dist/core/font.mjs +55 -0
- package/dist/core/font.mjs.map +1 -0
- package/dist/core/image.d.mts +84 -0
- package/dist/core/image.d.ts +84 -0
- package/dist/core/image.js +1018 -0
- package/dist/core/image.js.map +1 -0
- package/dist/core/image.mjs +993 -0
- package/dist/core/image.mjs.map +1 -0
- package/dist/core/map-rendering.d.mts +2 -0
- package/dist/core/map-rendering.d.ts +2 -0
- package/dist/core/map-rendering.js +95 -0
- package/dist/core/map-rendering.js.map +1 -0
- package/dist/core/map-rendering.mjs +70 -0
- package/dist/core/map-rendering.mjs.map +1 -0
- package/dist/core/pixel.d.mts +18 -0
- package/dist/core/pixel.d.ts +18 -0
- package/dist/core/pixel.js +99 -0
- package/dist/core/pixel.js.map +1 -0
- package/dist/core/pixel.mjs +73 -0
- package/dist/core/pixel.mjs.map +1 -0
- package/dist/core/shapes.d.mts +2 -0
- package/dist/core/shapes.d.ts +2 -0
- package/dist/core/shapes.js +218 -0
- package/dist/core/shapes.js.map +1 -0
- package/dist/core/shapes.mjs +187 -0
- package/dist/core/shapes.mjs.map +1 -0
- package/dist/core/sprite-rendering.d.mts +2 -0
- package/dist/core/sprite-rendering.d.ts +2 -0
- package/dist/core/sprite-rendering.js +135 -0
- package/dist/core/sprite-rendering.js.map +1 -0
- package/dist/core/sprite-rendering.mjs +108 -0
- package/dist/core/sprite-rendering.mjs.map +1 -0
- package/dist/core/text.d.mts +2 -0
- package/dist/core/text.d.ts +2 -0
- package/dist/core/text.js +105 -0
- package/dist/core/text.js.map +1 -0
- package/dist/core/text.mjs +78 -0
- package/dist/core/text.mjs.map +1 -0
- package/dist/core/transform.d.mts +2 -0
- package/dist/core/transform.d.ts +2 -0
- package/dist/core/transform.js +101 -0
- package/dist/core/transform.js.map +1 -0
- package/dist/core/transform.mjs +71 -0
- package/dist/core/transform.mjs.map +1 -0
- package/dist/drawing-Bo2U4IUE.d.mts +31 -0
- package/dist/drawing-e7iVDl14.d.ts +31 -0
- package/dist/index.d.mts +12 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +1098 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1066 -0
- package/dist/index.mjs.map +1 -0
- package/dist/map-rendering-CzeC061I.d.mts +20 -0
- package/dist/map-rendering-DcldCBtY.d.ts +20 -0
- package/dist/shapes-BY37IuhJ.d.ts +27 -0
- package/dist/shapes-CpCwX9Rp.d.mts +27 -0
- package/dist/sprite-rendering-Dac9FQ2x.d.ts +30 -0
- package/dist/sprite-rendering-DfQuLVXT.d.mts +30 -0
- package/dist/text-CIoUSRc-.d.mts +19 -0
- package/dist/text-HW25Qq3e.d.ts +19 -0
- package/dist/transform-Dqo6bY4r.d.mts +25 -0
- package/dist/transform-iwq8WdqR.d.ts +25 -0
- package/package.json +43 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/core/image.ts","../../src/blending.ts","../../src/core/color.ts","../../src/core/context.ts","../../src/core/drawing.ts","../../src/core/font.ts","../../src/core/map-rendering.ts","../../src/core/pixel.ts","../../src/core/shapes.ts","../../src/core/sprite-rendering.ts","../../src/core/text.ts","../../src/core/transform.ts"],"sourcesContent":["/**\n * Image - Canvas-based image class for game graphics\n *\n * Provides a canvas wrapper for image manipulation and drawing operations.\n */\n\nimport { BLENDING_MODES } from \"../blending\";\nimport * as ColorOps from \"./color\";\nimport { createDefaultContextState, type ImageContextState } from \"./context\";\nimport * as DrawingOps from \"./drawing\";\nimport * as FontOps from \"./font\";\nimport * as MapRenderingOps from \"./map-rendering\";\nimport * as PixelOps from \"./pixel\";\nimport * as ShapeOps from \"./shapes\";\nimport * as SpriteRenderingOps from \"./sprite-rendering\";\nimport * as TextOps from \"./text\";\nimport * as TransformOps from \"./transform\";\n\n/**\n * For variadic shape methods, the last argument may optionally be a color string.\n * This helper splits the args into point pairs and an optional color.\n */\nfunction splitColorArg(args: any[]): { points: any[]; color: string | undefined } {\n\tif (args.length > 0 && args.length % 2 === 1 && typeof args[args.length - 1] === \"string\") {\n\t\treturn { points: args.slice(0, -1), color: args[args.length - 1] };\n\t}\n\treturn { points: args, color: undefined };\n}\n\nexport class Image {\n\tprivate _canvas!: HTMLCanvasElement;\n\tprivate _context: CanvasRenderingContext2D | null = null;\n\tprivate _image: HTMLImageElement | null = null;\n\tprivate _state!: ImageContextState;\n\tprivate _centered: boolean;\n\n\tpublic width: number;\n\tpublic height: number;\n\n\tconstructor(widthOrImage: number | HTMLImageElement | HTMLCanvasElement, height?: number, centered: boolean = false) {\n\t\tthis._centered = centered;\n\n\t\tif (typeof widthOrImage === \"object\" && \"naturalWidth\" in widthOrImage) {\n\t\t\t// HTMLImageElement\n\t\t\tthis._image = widthOrImage as HTMLImageElement;\n\t\t\tthis.width = this._image.width;\n\t\t\tthis.height = this._image.height;\n\t\t} else if (typeof widthOrImage === \"object\" && \"getContext\" in widthOrImage) {\n\t\t\t// HTMLCanvasElement\n\t\t\tthis._canvas = widthOrImage as HTMLCanvasElement;\n\t\t\tthis.width = this._canvas.width;\n\t\t\tthis.height = this._canvas.height;\n\t\t} else {\n\t\t\t// Number\n\t\t\tthis._canvas = document.createElement(\"canvas\");\n\t\t\tthis.width = Math.round(widthOrImage as number);\n\t\t\tthis.height = Math.round(height || (widthOrImage as number));\n\t\t\tthis._canvas.width = this.width;\n\t\t\tthis._canvas.height = this.height;\n\t\t}\n\t}\n\n\t/**\n\t * Initialize or get the canvas context\n\t * Matches msImage initContext behavior exactly\n\t */\n\tinitContext(): CanvasRenderingContext2D {\n\t\t// Return early if context already exists (same as msImage line 68)\n\t\tif (this._context) {\n\t\t\treturn this._context;\n\t\t}\n\n\t\t// Convert image to canvas if needed (same as msImage lines 69-75)\n\t\tif (!this._canvas && this._image) {\n\t\t\tthis._canvas = document.createElement(\"canvas\");\n\t\t\tthis._canvas.width = this._image.width;\n\t\t\tthis._canvas.height = this._image.height;\n\t\t\tthis._context = this._canvas.getContext(\"2d\")!;\n\t\t\tthis._context.drawImage(this._image, 0, 0);\n\t\t\tthis._image = null;\n\t\t}\n\n\t\t// Always get fresh context (same as msImage line 80)\n\t\t// This ensures no leftover transforms from previous operations\n\t\tthis._context = this._canvas.getContext(\"2d\")!;\n\t\tif (this._context) {\n\t\t\tthis._context.lineCap = \"round\";\n\t\t}\n\n\t\t// Initialize state (same as msImage lines 77-106)\n\t\tif (!this._state) {\n\t\t\tthis._state = createDefaultContextState(this._centered);\n\t\t\tif (this._centered) {\n\t\t\t\tthis._state.translation_x = this.width / 2;\n\t\t\t\tthis._state.translation_y = this.height / 2;\n\t\t\t}\n\t\t}\n\n\t\treturn this._context;\n\t}\n\n\t/**\n\t * Get the canvas element\n\t */\n\tget canvas(): HTMLCanvasElement {\n\t\tthis.initContext();\n\t\treturn this._canvas;\n\t}\n\n\t/**\n\t * Get the image element (if still available)\n\t */\n\tget image(): HTMLImageElement | null {\n\t\treturn this._image;\n\t}\n\n\t/**\n\t * Get the rendering context\n\t */\n\tget context(): CanvasRenderingContext2D | null {\n\t\treturn this._context;\n\t}\n\n\t// ===== PIXEL OPERATIONS =====\n\n\tsetRGB(x: number, y: number, r: number | PixelOps.RGBColor, g?: number, b?: number): void {\n\t\tthis.initContext();\n\t\tPixelOps.setRGB(this._context!, x, y, r, g, b);\n\t}\n\n\tsetRGBA(x: number, y: number, r: number | PixelOps.RGBAColor, g?: number, b?: number, a?: number): void {\n\t\tthis.initContext();\n\t\tPixelOps.setRGBA(this._context!, x, y, r, g, b, a);\n\t}\n\n\tgetRGB(x: number, y: number, result?: PixelOps.RGBColor): PixelOps.RGBColor {\n\t\tthis.initContext();\n\t\treturn PixelOps.getRGB(this._context!, x, y, result);\n\t}\n\n\tgetRGBA(x: number, y: number, result?: PixelOps.RGBAColor): PixelOps.RGBAColor {\n\t\tthis.initContext();\n\t\treturn PixelOps.getRGBA(this._context!, x, y, result);\n\t}\n\n\t// ===== CANVAS OPERATIONS =====\n\n\tclear(color?: string): void {\n\t\tthis.initContext();\n\t\tconst c = this._context!.fillStyle;\n\t\tconst s = this._context!.strokeStyle;\n\t\tconst blending_save = this._context!.globalCompositeOperation;\n\n\t\tthis._context!.globalAlpha = 1;\n\t\tthis._context!.globalCompositeOperation = \"source-over\";\n\n\t\tif (color != null) {\n\t\t\tthis.setColor(color);\n\t\t} else {\n\t\t\tthis._context!.fillStyle = \"#000\";\n\t\t}\n\n\t\tthis._context!.fillRect(0, 0, this.width, this.height);\n\t\tthis._context!.fillStyle = c;\n\t\tthis._context!.strokeStyle = s;\n\t\tthis._context!.globalCompositeOperation = blending_save;\n\t}\n\n\t// ===== COLOR OPERATIONS =====\n\n\tsetColor(color?: string): void {\n\t\tthis.initContext();\n\t\tColorOps.setColor(this._context!, color);\n\t}\n\n\tsetAlpha(alpha: number): void {\n\t\tthis.initContext();\n\t\tthis._state.alpha = alpha;\n\t}\n\n\tsetPixelated(pixelated: number): void {\n\t\tthis.initContext();\n\t\tthis._state.pixelated = pixelated;\n\t}\n\n\tsetBlending(blending?: string): void {\n\t\tthis.initContext();\n\t\tconst mode = BLENDING_MODES[blending || \"normal\"] || \"source-over\";\n\t\tthis._context!.globalCompositeOperation = mode;\n\t}\n\n\tsetLineWidth(line_width: number): void {\n\t\tthis.initContext();\n\t\tthis._state.line_width = line_width;\n\t}\n\n\tsetLineDash(dash: number[] | any): void {\n\t\tthis.initContext();\n\t\tif (!Array.isArray(dash)) {\n\t\t\tthis._context!.setLineDash([]);\n\t\t} else {\n\t\t\tthis._context!.setLineDash(dash);\n\t\t}\n\t}\n\n\tsetLinearGradient(x1: number, y1: number, x2: number, y2: number, c1: string, c2: string): void {\n\t\tthis.initContext();\n\t\tColorOps.setLinearGradient(this._context!, x1, y1, x2, y2, c1, c2);\n\t}\n\n\tsetRadialGradient(x: number, y: number, radius: number, c1: string, c2: string): void {\n\t\tthis.initContext();\n\t\tColorOps.setRadialGradient(this._context!, x, y, radius, c1, c2);\n\t}\n\n\t// ===== FONT OPERATIONS =====\n\n\tsetFont(font?: string): void {\n\t\tthis.initContext();\n\t\tthis._state.font = font || \"Verdana\";\n\t\tthis.loadFont(this._state.font);\n\t}\n\n\tloadFont(font: string): Promise<void> | void {\n\t\treturn FontOps.loadFont(font);\n\t}\n\n\tisFontReady(font?: string): boolean {\n\t\treturn FontOps.isFontReady(font || this._state?.font || \"Verdana\");\n\t}\n\n\t// ===== TRANSFORM OPERATIONS =====\n\n\tsetTranslation(translation_x: number, translation_y: number): void {\n\t\tthis.initContext();\n\t\tTransformOps.setTranslation(this._state, translation_x, translation_y);\n\t}\n\n\tsetScale(scale_x: number, scale_y: number): void {\n\t\tthis.initContext();\n\t\tTransformOps.setScale(this._state, scale_x, scale_y);\n\t}\n\n\tsetRotation(rotation: number): void {\n\t\tthis.initContext();\n\t\tTransformOps.setRotation(this._state, rotation);\n\t}\n\n\tsetDrawAnchor(anchor_x: number, anchor_y: number): void {\n\t\tthis.initContext();\n\t\tTransformOps.setDrawAnchor(this._state, anchor_x, anchor_y);\n\t}\n\n\tsetDrawRotation(object_rotation: number): void {\n\t\tthis.initContext();\n\t\tTransformOps.setDrawRotation(this._state, object_rotation);\n\t}\n\n\tsetDrawScale(object_scale_x: number, object_scale_y: number = object_scale_x): void {\n\t\tthis.initContext();\n\t\tTransformOps.setDrawScale(this._state, object_scale_x, object_scale_y);\n\t}\n\n\t// ===== DRAWING OPERATIONS =====\n\n\tfillRect(x: number, y: number, w: number, h: number, color?: string): void {\n\t\tthis.initContext();\n\t\tthis.setColor(color);\n\t\tDrawingOps.fillRect(this._context!, this._state, x, y, w, h);\n\t}\n\n\tfillRoundRect(x: number, y: number, w: number, h: number, round: number = 10, color?: string): void {\n\t\tthis.initContext();\n\t\tthis.setColor(color);\n\t\tDrawingOps.fillRoundRect(this._context!, this._state, x, y, w, h, round);\n\t}\n\n\tfillRound(x: number, y: number, w: number, h: number, color?: string): void {\n\t\tthis.initContext();\n\t\tthis.setColor(color);\n\t\tDrawingOps.fillRound(this._context!, this._state, x, y, w, h);\n\t}\n\n\tdrawRect(x: number, y: number, w: number, h: number, color?: string): void {\n\t\tthis.initContext();\n\t\tthis.setColor(color);\n\t\tDrawingOps.drawRect(this._context!, this._state, x, y, w, h);\n\t}\n\n\tdrawRoundRect(x: number, y: number, w: number, h: number, round: number = 10, color?: string): void {\n\t\tthis.initContext();\n\t\tthis.setColor(color);\n\t\tDrawingOps.drawRoundRect(this._context!, this._state, x, y, w, h, round);\n\t}\n\n\tdrawRound(x: number, y: number, w: number, h: number, color?: string): void {\n\t\tthis.initContext();\n\t\tthis.setColor(color);\n\t\tDrawingOps.drawRound(this._context!, this._state, x, y, w, h);\n\t}\n\n\tdrawLine(x1: number, y1: number, x2: number, y2: number, color?: string): void {\n\t\tthis.initContext();\n\t\tthis.setColor(color);\n\t\tDrawingOps.drawLine(this._context!, this._state, x1, y1, x2, y2);\n\t}\n\n\t// ===== SHAPE OPERATIONS =====\n\n\tdrawPolyline(...args: any[]): void {\n\t\tthis.initContext();\n\t\tconst { points, color } = splitColorArg(args);\n\t\tthis.setColor(color);\n\t\tShapeOps.drawPolyline(this._context!, this._state, points);\n\t}\n\n\tdrawPolygon(...args: any[]): void {\n\t\tthis.initContext();\n\t\tconst { points, color } = splitColorArg(args);\n\t\tthis.setColor(color);\n\t\tShapeOps.drawPolygon(this._context!, this._state, points);\n\t}\n\n\tfillPolygon(...args: any[]): void {\n\t\tthis.initContext();\n\t\tconst { points, color } = splitColorArg(args);\n\t\tthis.setColor(color);\n\t\tShapeOps.fillPolygon(this._context!, this._state, points);\n\t}\n\n\tdrawQuadCurve(...args: any[]): void {\n\t\tthis.initContext();\n\t\tconst { points, color } = splitColorArg(args);\n\t\tthis.setColor(color);\n\t\tShapeOps.drawQuadCurve(this._context!, this._state, points);\n\t}\n\n\tdrawBezierCurve(...args: any[]): void {\n\t\tthis.initContext();\n\t\tconst { points, color } = splitColorArg(args);\n\t\tthis.setColor(color);\n\t\tShapeOps.drawBezierCurve(this._context!, this._state, points);\n\t}\n\n\tdrawArc(x: number, y: number, radius: number, angle1: number, angle2: number, ccw: boolean, color?: string): void {\n\t\tthis.initContext();\n\t\tthis.setColor(color);\n\t\tShapeOps.drawArc(this._context!, this._state, x, y, radius, angle1, angle2, ccw);\n\t}\n\n\tfillArc(x: number, y: number, radius: number, angle1: number, angle2: number, ccw: boolean, color?: string): void {\n\t\tthis.initContext();\n\t\tthis.setColor(color);\n\t\tShapeOps.fillArc(this._context!, this._state, x, y, radius, angle1, angle2, ccw);\n\t}\n\n\t// ===== TEXT OPERATIONS =====\n\n\ttextWidth(text: string, size: number): number {\n\t\tthis.initContext();\n\t\treturn TextOps.textWidth(this._context!, this._state, text, size);\n\t}\n\n\tdrawText(text: string, x: number, y: number, size: number, color?: string): void {\n\t\tthis.initContext();\n\t\tthis.setColor(color);\n\t\tTextOps.drawText(this._context!, this._state, text, x, y, size);\n\t}\n\n\tdrawTextOutline(text: string, x: number, y: number, size: number, color?: string): void {\n\t\tthis.initContext();\n\t\tthis.setColor(color);\n\t\tTextOps.drawTextOutline(this._context!, this._state, text, x, y, size);\n\t}\n\n\t// ===== SPRITE RENDERING =====\n\n\tdrawSprite(sprite: SpriteRenderingOps.SpriteSource | string, x: number, y: number, w?: number, h?: number): void {\n\t\tthis.initContext();\n\t\tSpriteRenderingOps.drawSprite(this._context!, this._state, sprite, x, y, w, h);\n\t}\n\n\tdrawImage(sprite: SpriteRenderingOps.SpriteSource | string, x: number, y: number, w?: number, h?: number): void {\n\t\tthis.drawSprite(sprite, x, y, w, h);\n\t}\n\n\tdrawSpritePart(\n\t\tsprite: SpriteRenderingOps.SpriteSource | string,\n\t\tsx: number,\n\t\tsy: number,\n\t\tsw: number,\n\t\tsh: number,\n\t\tx: number,\n\t\ty: number,\n\t\tw?: number,\n\t\th?: number,\n\t): void {\n\t\tthis.initContext();\n\t\tSpriteRenderingOps.drawSpritePart(this._context!, this._state, sprite, sx, sy, sw, sh, x, y, w, h);\n\t}\n\n\tdrawImagePart(\n\t\tsprite: SpriteRenderingOps.SpriteSource | string,\n\t\tsx: number,\n\t\tsy: number,\n\t\tsw: number,\n\t\tsh: number,\n\t\tx: number,\n\t\ty: number,\n\t\tw?: number,\n\t\th?: number,\n\t): void {\n\t\tthis.drawSpritePart(sprite, sx, sy, sw, sh, x, y, w, h);\n\t}\n\n\t// ===== MAP RENDERING =====\n\n\tdrawMap(map: MapRenderingOps.MapSource | string, x: number, y: number, w: number, h: number): void {\n\t\tthis.initContext();\n\t\tMapRenderingOps.drawMap(this._context!, this._state, map, x, y, w, h);\n\t}\n}\n","export const BLENDING_MODES: Record<string, GlobalCompositeOperation> = {\n\tnormal: \"source-over\",\n\tadditive: \"lighter\",\n};\n\nconst MODES = [\n\t\"source-over\",\n\t\"source-in\",\n\t\"source-out\",\n\t\"source-atop\",\n\t\"destination-over\",\n\t\"destination-in\",\n\t\"destination-out\",\n\t\"destination-atop\",\n\t\"lighter\",\n\t\"copy\",\n\t\"xor\",\n\t\"multiply\",\n\t\"screen\",\n\t\"overlay\",\n\t\"darken\",\n\t\"lighten\",\n\t\"color-dodge\",\n\t\"color-burn\",\n\t\"hard-light\",\n\t\"soft-light\",\n\t\"difference\",\n\t\"exclusion\",\n\t\"hue\",\n\t\"saturation\",\n\t\"color\",\n\t\"luminosity\",\n];\n\nfor (const mode of MODES) {\n\tBLENDING_MODES[mode] = mode as GlobalCompositeOperation;\n}\n","/**\n * Color management for Image class\n * Handles color setting, pixel operations, and gradients\n */\n\nexport function setColor(context: CanvasRenderingContext2D, color?: string): void {\n\tif (color == null) {\n\t\treturn;\n\t}\n\tif (typeof color === \"string\") {\n\t\tcontext.fillStyle = color;\n\t\tcontext.strokeStyle = color;\n\t}\n}\n\nexport function setLinearGradient(\n\tcontext: CanvasRenderingContext2D,\n\tx1: number,\n\ty1: number,\n\tx2: number,\n\ty2: number,\n\tc1: string,\n\tc2: string,\n): void {\n\tconst grd = context.createLinearGradient(x1, y1, x2, y2);\n\tgrd.addColorStop(0, c1);\n\tgrd.addColorStop(1, c2);\n\tcontext.fillStyle = grd;\n\tcontext.strokeStyle = grd;\n}\n\nexport function setRadialGradient(\n\tcontext: CanvasRenderingContext2D,\n\tx: number,\n\ty: number,\n\tradius: number,\n\tc1: string,\n\tc2: string,\n): void {\n\tconst grd = context.createRadialGradient(x, y, 0, x, y, radius);\n\tgrd.addColorStop(0, c1);\n\tgrd.addColorStop(1, c2);\n\tcontext.fillStyle = grd;\n\tcontext.strokeStyle = grd;\n}\n","/**\n * Context management for Image class\n * Handles canvas context initialization and state management\n */\n\nexport interface ImageContextState {\n\talpha: number;\n\tpixelated: number;\n\tline_width: number;\n\ttranslation_x: number;\n\ttranslation_y: number;\n\trotation: number;\n\tscale_x: number;\n\tscale_y: number;\n\timage_transform: boolean;\n\tanchor_x: number;\n\tanchor_y: number;\n\tobject_rotation: number;\n\tobject_scale_x: number;\n\tobject_scale_y: number;\n\tfont: string;\n}\n\nexport function createDefaultContextState(centered: boolean): ImageContextState {\n\tif (centered) {\n\t\treturn {\n\t\t\talpha: 1,\n\t\t\tpixelated: 1,\n\t\t\tline_width: 1,\n\t\t\ttranslation_x: 0, // Will be set to width/2\n\t\t\ttranslation_y: 0, // Will be set to height/2\n\t\t\trotation: 0,\n\t\t\tscale_x: 1,\n\t\t\tscale_y: -1,\n\t\t\timage_transform: true,\n\t\t\tanchor_x: 0,\n\t\t\tanchor_y: 0,\n\t\t\tobject_rotation: 0,\n\t\t\tobject_scale_x: 1,\n\t\t\tobject_scale_y: -1,\n\t\t\tfont: \"BitCell\",\n\t\t};\n\t} else {\n\t\treturn {\n\t\t\talpha: 1,\n\t\t\tpixelated: 1,\n\t\t\tline_width: 1,\n\t\t\ttranslation_x: 0,\n\t\t\ttranslation_y: 0,\n\t\t\trotation: 0,\n\t\t\tscale_x: 1,\n\t\t\tscale_y: 1,\n\t\t\timage_transform: false,\n\t\t\tanchor_x: -1,\n\t\t\tanchor_y: 1,\n\t\t\tobject_rotation: 0,\n\t\t\tobject_scale_x: 1,\n\t\t\tobject_scale_y: 1,\n\t\t\tfont: \"BitCell\",\n\t\t};\n\t}\n}\n\nexport function updateImageTransform(state: ImageContextState): void {\n\tstate.image_transform =\n\t\tstate.translation_x !== 0 ||\n\t\tstate.translation_y !== 0 ||\n\t\tstate.scale_x !== 1 ||\n\t\tstate.scale_y !== 1 ||\n\t\tstate.rotation !== 0;\n}\n","/**\n * Drawing operations for Image class\n * Handles all drawing primitives (rectangles, circles, lines, etc.)\n */\n\nimport type { ImageContextState } from \"./context\";\n\nexport function initDrawOp(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tobject_transform = true,\n): boolean {\n\tlet res = false;\n\n\tif (state.image_transform) {\n\t\tcontext.save();\n\t\tres = true;\n\t\tcontext.translate(state.translation_x, state.translation_y);\n\t\tcontext.scale(state.scale_x, state.scale_y);\n\t\tcontext.rotate((state.rotation / 180) * Math.PI);\n\t\tcontext.translate(x, y);\n\t}\n\n\tif (object_transform && (state.object_rotation !== 0 || state.object_scale_x !== 1 || state.object_scale_y !== 1)) {\n\t\tif (!res) {\n\t\t\tcontext.save();\n\t\t\tres = true;\n\t\t\tcontext.translate(x, y);\n\t\t}\n\t\tif (state.object_rotation !== 0) {\n\t\t\tcontext.rotate((state.object_rotation / 180) * Math.PI);\n\t\t}\n\t\tif (state.object_scale_x !== 1 || state.object_scale_y !== 1) {\n\t\t\tcontext.scale(state.object_scale_x, state.object_scale_y);\n\t\t}\n\t}\n\n\treturn res;\n}\n\nexport function closeDrawOp(context: CanvasRenderingContext2D): void {\n\tcontext.restore();\n}\n\nexport function fillRect(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.fillRect(-w / 2 - (state.anchor_x * w) / 2, -h / 2 + (state.anchor_y * h) / 2, w, h);\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.fillRect(x - w / 2 - (state.anchor_x * w) / 2, y - h / 2 + (state.anchor_y * h) / 2, w, h);\n\t}\n}\n\nexport function fillRoundRect(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n\tround: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tif (initDrawOp(context, state, x, y)) {\n\t\t(context as any).fillRoundRect(-w / 2 - (state.anchor_x * w) / 2, -h / 2 + (state.anchor_y * h) / 2, w, h, round);\n\t\tcloseDrawOp(context);\n\t} else {\n\t\t(context as any).fillRoundRect(\n\t\t\tx - w / 2 - (state.anchor_x * w) / 2,\n\t\t\ty - h / 2 + (state.anchor_y * h) / 2,\n\t\t\tw,\n\t\t\th,\n\t\t\tround,\n\t\t);\n\t}\n}\n\nexport function fillRound(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tw = Math.abs(w);\n\th = Math.abs(h);\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.beginPath();\n\t\tcontext.ellipse((-state.anchor_x * w) / 2, 0 + (state.anchor_y * h) / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false);\n\t\tcontext.fill();\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.beginPath();\n\t\tcontext.ellipse(x - (state.anchor_x * w) / 2, y + (state.anchor_y * h) / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false);\n\t\tcontext.fill();\n\t}\n}\n\nexport function drawRect(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.strokeRect(-w / 2 - (state.anchor_x * w) / 2, -h / 2 + (state.anchor_y * h) / 2, w, h);\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.strokeRect(x - w / 2 - (state.anchor_x * w) / 2, y - h / 2 + (state.anchor_y * h) / 2, w, h);\n\t}\n}\n\nexport function drawRoundRect(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n\tround: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\tif (initDrawOp(context, state, x, y)) {\n\t\t(context as any).strokeRoundRect(-w / 2 - (state.anchor_x * w) / 2, -h / 2 + (state.anchor_y * h) / 2, w, h, round);\n\t\tcloseDrawOp(context);\n\t} else {\n\t\t(context as any).strokeRoundRect(\n\t\t\tx - w / 2 - (state.anchor_x * w) / 2,\n\t\t\ty - h / 2 + (state.anchor_y * h) / 2,\n\t\t\tw,\n\t\t\th,\n\t\t\tround,\n\t\t);\n\t}\n}\n\nexport function drawRound(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\tw = Math.abs(w);\n\th = Math.abs(h);\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.beginPath();\n\t\tcontext.ellipse(0 - (state.anchor_x * w) / 2, 0 + (state.anchor_y * h) / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false);\n\t\tcontext.stroke();\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.beginPath();\n\t\tcontext.ellipse(x - (state.anchor_x * w) / 2, y + (state.anchor_y * h) / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false);\n\t\tcontext.stroke();\n\t}\n}\n\nexport function drawLine(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx1: number,\n\ty1: number,\n\tx2: number,\n\ty2: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\tconst transform = initDrawOp(context, state, 0, 0, false);\n\tcontext.beginPath();\n\tcontext.moveTo(x1, y1);\n\tcontext.lineTo(x2, y2);\n\tcontext.stroke();\n\tif (transform) {\n\t\tcloseDrawOp(context);\n\t}\n}\n","/**\n * Font management for Image class\n * Handles font loading and readiness checking\n */\n\n// Font cache to track loaded fonts\nconst loadedFonts = new Set<string>();\nconst loadingFonts = new Map<string, Promise<void>>();\n\n/**\n * Load a font for use in the image\n * In a full implementation, this would integrate with a font loading system\n */\nexport function loadFont(font: string): Promise<void> | void {\n\tif (!font) {\n\t\treturn;\n\t}\n\n\t// If already loaded, return immediately\n\tif (loadedFonts.has(font)) {\n\t\treturn Promise.resolve();\n\t}\n\n\t// If currently loading, return existing promise\n\tif (loadingFonts.has(font)) {\n\t\treturn loadingFonts.get(font);\n\t}\n\n\t// Check if font is available via CSS Font Loading API\n\tif (typeof document !== \"undefined\" && \"fonts\" in document) {\n\t\tconst promise = document.fonts\n\t\t\t.load(`12pt ${font}`)\n\t\t\t.then(() => {\n\t\t\t\tloadedFonts.add(font);\n\t\t\t\tloadingFonts.delete(font);\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\t// Font loading failed, but we'll mark it as loaded anyway\n\t\t\t\tloadedFonts.add(font);\n\t\t\t\tloadingFonts.delete(font);\n\t\t\t});\n\n\t\tloadingFonts.set(font, promise);\n\t\treturn promise;\n\t}\n\n\t// Fallback: assume font is available\n\tloadedFonts.add(font);\n\treturn Promise.resolve();\n}\n\n/**\n * Check if a font is ready to use\n */\nexport function isFontReady(font: string): boolean {\n\tif (!font) {\n\t\treturn true;\n\t}\n\n\t// Check if font is in loaded set\n\tif (loadedFonts.has(font)) {\n\t\treturn true;\n\t}\n\n\t// Check via CSS Font Loading API\n\tif (typeof document !== \"undefined\" && \"fonts\" in document) {\n\t\treturn document.fonts.check(`12pt ${font}`);\n\t}\n\n\t// Fallback: assume font is ready\n\treturn true;\n}\n\n/**\n * Clear font cache (useful for testing)\n */\nexport function clearFontCache(): void {\n\tloadedFonts.clear();\n\tloadingFonts.clear();\n}\n","/**\n * Map rendering for Image class\n * Handles drawing map objects onto the canvas\n */\n\nimport type { ImageContextState } from \"./context\";\nimport { closeDrawOp, initDrawOp } from \"./drawing\";\n\nexport interface MapSource {\n\tready?: boolean | number;\n\tdraw?: (context: CanvasRenderingContext2D, x: number, y: number, w: number, h: number) => void;\n}\n\nconst resolveStringMap = (name: string): MapSource | null => {\n\tconst playerRuntime = (globalThis as any)?.player?.runtime;\n\tif (!playerRuntime) {\n\t\treturn null;\n\t}\n\n\t// Resolved maps are stored under runtime.maps; fall back to\n\t// screen.runtime.maps if provided by host environments.\n\tconst directMaps = playerRuntime.maps as Record<string, MapSource> | undefined;\n\tif (directMaps && directMaps[name]) {\n\t\treturn directMaps[name];\n\t}\n\n\tconst screenMaps = playerRuntime.screen?.runtime?.maps as Record<string, MapSource> | undefined;\n\tif (screenMaps && screenMaps[name]) {\n\t\treturn screenMaps[name];\n\t}\n\n\treturn null;\n};\n\nexport function drawMap(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tmap: MapSource | string,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n): void {\n\tconst resolvedMap: MapSource | null = typeof map === \"string\" ? resolveStringMap(map) : (map ?? null);\n\n\tif (!resolvedMap || !resolvedMap.ready || !resolvedMap.draw) {\n\t\treturn;\n\t}\n\n\tcontext.globalAlpha = state.alpha;\n\tcontext.imageSmoothingEnabled = !state.pixelated;\n\n\tif (initDrawOp(context, state, x, y)) {\n\t\tresolvedMap.draw(context, -w / 2 - (state.anchor_x * w) / 2, -h / 2 + (state.anchor_y * h) / 2, w, h);\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tresolvedMap.draw(context, x - w / 2 - (state.anchor_x * w) / 2, y - h / 2 + (state.anchor_y * h) / 2, w, h);\n\t}\n}\n","/**\n * Pixel-level operations for Image class\n * Handles individual pixel reading and writing\n */\n\nexport interface RGBColor {\n\tR: number;\n\tG: number;\n\tB: number;\n}\n\nexport interface RGBAColor extends RGBColor {\n\tA: number;\n}\n\nlet pixelDataCache: ImageData | null = null;\n\nexport function setRGB(\n\tcontext: CanvasRenderingContext2D,\n\tx: number,\n\ty: number,\n\tr: number | RGBColor,\n\tg?: number,\n\tb?: number,\n): void {\n\tif (pixelDataCache == null) {\n\t\tpixelDataCache = context.createImageData(1, 1);\n\t}\n\n\tif (typeof r === \"object\") {\n\t\tpixelDataCache.data[0] = r.R;\n\t\tpixelDataCache.data[1] = r.G;\n\t\tpixelDataCache.data[2] = r.B;\n\t} else {\n\t\tpixelDataCache.data[0] = r;\n\t\tpixelDataCache.data[1] = g || 0;\n\t\tpixelDataCache.data[2] = b || 0;\n\t}\n\tpixelDataCache.data[3] = 255;\n\n\tcontext.putImageData(pixelDataCache, x, y);\n}\n\nexport function setRGBA(\n\tcontext: CanvasRenderingContext2D,\n\tx: number,\n\ty: number,\n\tr: number | RGBAColor,\n\tg?: number,\n\tb?: number,\n\ta?: number,\n): void {\n\tif (pixelDataCache == null) {\n\t\tpixelDataCache = context.createImageData(1, 1);\n\t}\n\n\tif (typeof r === \"object\") {\n\t\tpixelDataCache.data[0] = r.R;\n\t\tpixelDataCache.data[1] = r.G;\n\t\tpixelDataCache.data[2] = r.B;\n\t\tpixelDataCache.data[3] = r.A != null ? r.A : 255;\n\t} else {\n\t\tpixelDataCache.data[0] = r;\n\t\tpixelDataCache.data[1] = g || 0;\n\t\tpixelDataCache.data[2] = b || 0;\n\t\tpixelDataCache.data[3] = a ?? 255;\n\t}\n\n\tcontext.putImageData(pixelDataCache, x, y);\n}\n\nexport function getRGB(\n\tcontext: CanvasRenderingContext2D,\n\tx: number,\n\ty: number,\n\tresult: RGBColor = {\n\t\tR: 0,\n\t\tG: 0,\n\t\tB: 0,\n\t},\n): RGBColor {\n\tconst d = context.getImageData(x, y, 1, 1);\n\tresult.R = d.data[0];\n\tresult.G = d.data[1];\n\tresult.B = d.data[2];\n\treturn result;\n}\n\nexport function getRGBA(\n\tcontext: CanvasRenderingContext2D,\n\tx: number,\n\ty: number,\n\tresult: RGBAColor = {\n\t\tR: 0,\n\t\tG: 0,\n\t\tB: 0,\n\t\tA: 255,\n\t},\n): RGBAColor {\n\tconst d = context.getImageData(x, y, 1, 1);\n\tresult.R = d.data[0];\n\tresult.G = d.data[1];\n\tresult.B = d.data[2];\n\tresult.A = d.data[3];\n\treturn result;\n}\n","/**\n * Advanced shape drawing operations\n * Handles polygons, polylines, curves, and arcs\n */\n\nimport type { ImageContextState } from \"./context\";\nimport { closeDrawOp, initDrawOp } from \"./drawing\";\n\nexport function drawPolyline(context: CanvasRenderingContext2D, state: ImageContextState, args: any[]): void {\n\tif (Array.isArray(args[0])) {\n\t\targs = args[0];\n\t}\n\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\n\tif (args.length < 4) {\n\t\treturn;\n\t}\n\n\tconst len = Math.floor(args.length / 2);\n\tconst transform = initDrawOp(context, state, 0, 0, false);\n\tcontext.beginPath();\n\tcontext.moveTo(args[0], args[1]);\n\n\tfor (let i = 1; i <= len - 1; i++) {\n\t\tcontext.lineTo(args[i * 2], args[i * 2 + 1]);\n\t}\n\n\tcontext.stroke();\n\tif (transform) {\n\t\tcloseDrawOp(context);\n\t}\n}\n\nexport function drawPolygon(context: CanvasRenderingContext2D, state: ImageContextState, args: any[]): void {\n\tif (Array.isArray(args[0])) {\n\t\targs = args[0];\n\t}\n\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\n\tif (args.length < 4) {\n\t\treturn;\n\t}\n\n\tconst len = Math.floor(args.length / 2);\n\tconst transform = initDrawOp(context, state, 0, 0, false);\n\tcontext.beginPath();\n\tcontext.moveTo(args[0], args[1]);\n\n\tfor (let i = 1; i <= len - 1; i++) {\n\t\tcontext.lineTo(args[i * 2], args[i * 2 + 1]);\n\t}\n\n\tcontext.closePath();\n\tcontext.stroke();\n\tif (transform) {\n\t\tcloseDrawOp(context);\n\t}\n}\n\nexport function fillPolygon(context: CanvasRenderingContext2D, state: ImageContextState, args: any[]): void {\n\tif (Array.isArray(args[0])) {\n\t\targs = args[0];\n\t}\n\n\tcontext.globalAlpha = state.alpha;\n\n\tif (args.length < 4) {\n\t\treturn;\n\t}\n\n\tconst len = Math.floor(args.length / 2);\n\tconst transform = initDrawOp(context, state, 0, 0, false);\n\tcontext.beginPath();\n\tcontext.moveTo(args[0], args[1]);\n\n\tfor (let i = 1; i <= len - 1; i++) {\n\t\tcontext.lineTo(args[i * 2], args[i * 2 + 1]);\n\t}\n\n\tcontext.fill();\n\tif (transform) {\n\t\tcloseDrawOp(context);\n\t}\n}\n\nexport function drawQuadCurve(context: CanvasRenderingContext2D, state: ImageContextState, args: any[]): void {\n\tif (Array.isArray(args[0])) {\n\t\targs = args[0];\n\t}\n\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\n\tif (args.length < 4) {\n\t\treturn;\n\t}\n\n\tconst transform = initDrawOp(context, state, 0, 0, false);\n\tcontext.beginPath();\n\tcontext.moveTo(args[0], args[1]);\n\n\tlet index = 2;\n\twhile (index <= args.length - 4) {\n\t\tcontext.quadraticCurveTo(args[index], args[index + 1], args[index + 2], args[index + 3]);\n\t\tindex += 4;\n\t}\n\n\tcontext.stroke();\n\tif (transform) {\n\t\tcloseDrawOp(context);\n\t}\n}\n\nexport function drawBezierCurve(context: CanvasRenderingContext2D, state: ImageContextState, args: any[]): void {\n\tif (Array.isArray(args[0])) {\n\t\targs = args[0];\n\t}\n\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\n\tif (args.length < 4) {\n\t\treturn;\n\t}\n\n\tconst transform = initDrawOp(context, state, 0, 0, false);\n\tcontext.beginPath();\n\tcontext.moveTo(args[0], args[1]);\n\n\tlet index = 2;\n\twhile (index <= args.length - 6) {\n\t\tcontext.bezierCurveTo(\n\t\t\targs[index],\n\t\t\targs[index + 1],\n\t\t\targs[index + 2],\n\t\t\targs[index + 3],\n\t\t\targs[index + 4],\n\t\t\targs[index + 5],\n\t\t);\n\t\tindex += 6;\n\t}\n\n\tcontext.stroke();\n\tif (transform) {\n\t\tcloseDrawOp(context);\n\t}\n}\n\nexport function drawArc(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tradius: number,\n\tangle1: number,\n\tangle2: number,\n\tccw: boolean,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.beginPath();\n\t\tcontext.arc(0, 0, radius, (angle1 / 180) * Math.PI, (angle2 / 180) * Math.PI, ccw);\n\t\tcontext.stroke();\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.beginPath();\n\t\tcontext.arc(x, y, radius, (angle1 / 180) * Math.PI, (angle2 / 180) * Math.PI, ccw);\n\t\tcontext.stroke();\n\t}\n}\n\nexport function fillArc(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tradius: number,\n\tangle1: number,\n\tangle2: number,\n\tccw: boolean,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.beginPath();\n\t\tcontext.arc(0, 0, radius, (angle1 / 180) * Math.PI, (angle2 / 180) * Math.PI, ccw);\n\t\tcontext.fill();\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.beginPath();\n\t\tcontext.arc(x, y, radius, (angle1 / 180) * Math.PI, (angle2 / 180) * Math.PI, ccw);\n\t\tcontext.fill();\n\t}\n}\n","/**\n * Sprite and image rendering for Image class\n * Handles drawing sprites and images onto the canvas\n */\n\nimport type { ImageContextState } from \"./context\";\nimport { closeDrawOp, initDrawOp } from \"./drawing\";\n\nexport interface SpriteSource {\n\tframes?: Array<{\n\t\tcanvas: HTMLCanvasElement;\n\t}>;\n\tcanvas?: HTMLCanvasElement;\n\timage?: HTMLImageElement;\n\tready?: boolean | number;\n\tfps?: number;\n\tanimation_start?: number;\n}\n\nexport function getSpriteFrame(sprite: SpriteSource | string): HTMLCanvasElement | null {\n\t// Handle Image instances\n\tif (typeof sprite === \"object\" && \"canvas\" in sprite && !(\"frames\" in sprite)) {\n\t\treturn sprite.canvas || (sprite.image as any) || null;\n\t}\n\n\t// Handle Sprite instances\n\tif (typeof sprite === \"object\" && sprite.frames && sprite.frames.length > 0) {\n\t\tif (!sprite.ready) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (sprite.frames.length > 1) {\n\t\t\t// Initialize animation_start lazily on first use to ensure animation starts from frame 0\n\t\t\t// This ensures smooth sequential animation: 0->1->2->...->N->0->1->...\n\t\t\tif (!sprite.animation_start || sprite.animation_start === 0) {\n\t\t\t\tsprite.animation_start = Date.now();\n\t\t\t}\n\t\t\tconst dt = 1000 / (sprite.fps || 5);\n\t\t\tconst frame = Math.floor((Date.now() - sprite.animation_start) / dt) % sprite.frames.length;\n\t\t\tif (frame >= 0 && frame < sprite.frames.length) {\n\t\t\t\treturn sprite.frames[frame].canvas;\n\t\t\t}\n\t\t\treturn sprite.frames[0].canvas;\n\t\t}\n\t\treturn sprite.frames[0].canvas;\n\t}\n\n\treturn null;\n}\n\nexport function drawSprite(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tsprite: SpriteSource | string,\n\tx: number,\n\ty: number,\n\tw?: number,\n\th?: number,\n): void {\n\tconst canvas = getSpriteFrame(sprite);\n\tif (canvas == null) {\n\t\treturn;\n\t}\n\n\tif (w == null) {\n\t\tw = canvas.width;\n\t}\n\tif (!h) {\n\t\th = (w / canvas.width) * canvas.height;\n\t}\n\n\tcontext.globalAlpha = state.alpha;\n\tcontext.imageSmoothingEnabled = !state.pixelated;\n\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.drawImage(canvas, -w / 2 - (state.anchor_x * w) / 2, -h / 2 + (state.anchor_y * h) / 2, w, h);\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.drawImage(canvas, x - w / 2 - (state.anchor_x * w) / 2, y - h / 2 + (state.anchor_y * h) / 2, w, h);\n\t}\n}\n\nexport function drawSpritePart(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tsprite: SpriteSource | string,\n\tsx: number,\n\tsy: number,\n\tsw: number,\n\tsh: number,\n\tx: number,\n\ty: number,\n\tw?: number,\n\th?: number,\n): void {\n\tconst canvas = getSpriteFrame(sprite);\n\tif (canvas == null) {\n\t\treturn;\n\t}\n\n\t// Image class uses w = canvas.width (Screen uses w = sw)\n\tif (w == null) {\n\t\tw = canvas.width;\n\t}\n\tif (!h) {\n\t\th = (w / sw) * sh;\n\t}\n\n\tcontext.globalAlpha = state.alpha;\n\tcontext.imageSmoothingEnabled = !state.pixelated;\n\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.drawImage(canvas, sx, sy, sw, sh, -w / 2 - (state.anchor_x * w) / 2, -h / 2 + (state.anchor_y * h) / 2, w, h);\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.drawImage(\n\t\t\tcanvas,\n\t\t\tsx,\n\t\t\tsy,\n\t\t\tsw,\n\t\t\tsh,\n\t\t\tx - w / 2 - (state.anchor_x * w) / 2,\n\t\t\ty - h / 2 + (state.anchor_y * h) / 2,\n\t\t\tw,\n\t\t\th,\n\t\t);\n\t}\n}\n","/**\n * Text rendering operations for Image class\n * Handles text drawing, measurement, and font management\n */\n\nimport type { ImageContextState } from \"./context\";\nimport { closeDrawOp, initDrawOp } from \"./drawing\";\n\nexport function textWidth(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\ttext: string,\n\tsize: number,\n): number {\n\tcontext.font = `${size}pt ${state.font}`;\n\treturn context.measureText(text).width;\n}\n\nexport function drawText(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\ttext: string,\n\tx: number,\n\ty: number,\n\tsize: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tcontext.font = `${size}pt ${state.font}`;\n\tcontext.textAlign = \"center\";\n\tcontext.textBaseline = \"middle\";\n\n\tconst w = context.measureText(text).width;\n\tconst h = size;\n\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.fillText(text, 0 - (state.anchor_x * w) / 2, 0 + (state.anchor_y * h) / 2);\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.fillText(text, x - (state.anchor_x * w) / 2, y + (state.anchor_y * h) / 2);\n\t}\n}\n\nexport function drawTextOutline(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\ttext: string,\n\tx: number,\n\ty: number,\n\tsize: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tcontext.font = `${size}pt ${state.font}`;\n\tcontext.lineWidth = state.line_width;\n\tcontext.textAlign = \"center\";\n\tcontext.textBaseline = \"middle\";\n\n\tconst w = context.measureText(text).width;\n\tconst h = size;\n\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.strokeText(text, 0 - (state.anchor_x * w) / 2, 0 + (state.anchor_y * h) / 2);\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.strokeText(text, x - (state.anchor_x * w) / 2, y + (state.anchor_y * h) / 2);\n\t}\n}\n","/**\n * Transform operations for Image class\n * Handles translation, rotation, scaling, and anchoring\n */\n\nimport type { ImageContextState } from \"./context\";\nimport { updateImageTransform } from \"./context\";\n\nexport function setTranslation(state: ImageContextState, translation_x: number, translation_y: number): void {\n\tstate.translation_x = translation_x;\n\tstate.translation_y = translation_y;\n\n\tif (!isFinite(state.translation_x)) {\n\t\tstate.translation_x = 0;\n\t}\n\tif (!isFinite(state.translation_y)) {\n\t\tstate.translation_y = 0;\n\t}\n\n\tupdateImageTransform(state);\n}\n\nexport function setScale(state: ImageContextState, scale_x: number, scale_y: number): void {\n\tstate.scale_x = scale_x;\n\tstate.scale_y = scale_y;\n\n\tif (!isFinite(state.scale_x) || state.scale_x === 0) {\n\t\tstate.scale_x = 1;\n\t}\n\tif (!isFinite(state.scale_y) || state.scale_y === 0) {\n\t\tstate.scale_y = 1;\n\t}\n\n\tupdateImageTransform(state);\n}\n\nexport function setRotation(state: ImageContextState, rotation: number): void {\n\tstate.rotation = rotation;\n\n\tif (!isFinite(state.rotation)) {\n\t\tstate.rotation = 0;\n\t}\n\n\tupdateImageTransform(state);\n}\n\nexport function setDrawAnchor(state: ImageContextState, anchor_x: number, anchor_y: number): void {\n\tstate.anchor_x = anchor_x;\n\tstate.anchor_y = anchor_y;\n\n\tif (typeof state.anchor_x !== \"number\") {\n\t\tstate.anchor_x = 0;\n\t}\n\tif (typeof state.anchor_y !== \"number\") {\n\t\tstate.anchor_y = 0;\n\t}\n}\n\nexport function setDrawRotation(state: ImageContextState, object_rotation: number): void {\n\tstate.object_rotation = object_rotation;\n}\n\nexport function setDrawScale(state: ImageContextState, object_scale_x: number, object_scale_y: number): void {\n\tstate.object_scale_x = object_scale_x;\n\tstate.object_scale_y = object_scale_y;\n}\n"],"mappings":"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","names":["BLENDING_MODES","normal","additive","MODES","mode","setColor","context","color","fillStyle","strokeStyle","setLinearGradient","x1","y1","x2","y2","c1","c2","grd","createLinearGradient","addColorStop","setRadialGradient","x","y","radius","createRadialGradient","createDefaultContextState","centered","alpha","pixelated","line_width","translation_x","translation_y","rotation","scale_x","scale_y","image_transform","anchor_x","anchor_y","object_rotation","object_scale_x","object_scale_y","font","updateImageTransform","state","initDrawOp","context","state","x","y","object_transform","res","image_transform","save","translate","translation_x","translation_y","scale","scale_x","scale_y","rotate","rotation","Math","PI","object_rotation","object_scale_x","object_scale_y","closeDrawOp","restore","fillRect","w","h","globalAlpha","alpha","anchor_x","anchor_y","fillRoundRect","round","fillRound","abs","beginPath","ellipse","fill","drawRect","lineWidth","line_width","strokeRect","drawRoundRect","strokeRoundRect","drawRound","stroke","drawLine","x1","y1","x2","y2","transform","moveTo","lineTo","loadedFonts","Set","loadingFonts","Map","loadFont","font","has","Promise","resolve","get","document","promise","fonts","load","then","add","delete","catch","set","isFontReady","check","resolveStringMap","name","playerRuntime","globalThis","player","runtime","directMaps","maps","screenMaps","screen","drawMap","context","state","map","x","y","w","h","resolvedMap","ready","draw","globalAlpha","alpha","imageSmoothingEnabled","pixelated","initDrawOp","anchor_x","anchor_y","closeDrawOp","pixelDataCache","setRGB","context","x","y","r","g","b","createImageData","data","R","G","B","putImageData","setRGBA","a","A","getRGB","result","d","getImageData","getRGBA","drawPolyline","context","state","args","Array","isArray","globalAlpha","alpha","lineWidth","line_width","length","len","Math","floor","transform","initDrawOp","beginPath","moveTo","i","lineTo","stroke","closeDrawOp","drawPolygon","closePath","fillPolygon","fill","drawQuadCurve","index","quadraticCurveTo","drawBezierCurve","bezierCurveTo","drawArc","x","y","radius","angle1","angle2","ccw","arc","PI","fillArc","getSpriteFrame","sprite","canvas","image","frames","length","ready","animation_start","Date","now","dt","fps","frame","Math","floor","drawSprite","context","state","x","y","w","h","width","height","globalAlpha","alpha","imageSmoothingEnabled","pixelated","initDrawOp","drawImage","anchor_x","anchor_y","closeDrawOp","drawSpritePart","sx","sy","sw","sh","textWidth","context","state","text","size","font","measureText","width","drawText","x","y","globalAlpha","alpha","textAlign","textBaseline","w","h","initDrawOp","fillText","anchor_x","anchor_y","closeDrawOp","drawTextOutline","lineWidth","line_width","strokeText","setTranslation","state","translation_x","translation_y","isFinite","updateImageTransform","setScale","scale_x","scale_y","setRotation","rotation","setDrawAnchor","anchor_x","anchor_y","setDrawRotation","object_rotation","setDrawScale","object_scale_x","object_scale_y","splitColorArg","args","length","points","slice","color","undefined","Image","_canvas","_context","_image","_state","_centered","width","height","widthOrImage","centered","document","createElement","Math","round","initContext","getContext","drawImage","lineCap","createDefaultContextState","translation_x","translation_y","canvas","image","context","setRGB","x","y","r","g","b","PixelOps","setRGBA","a","getRGB","result","getRGBA","clear","c","fillStyle","s","strokeStyle","blending_save","globalCompositeOperation","globalAlpha","setColor","fillRect","ColorOps","setAlpha","alpha","setPixelated","pixelated","setBlending","blending","mode","BLENDING_MODES","setLineWidth","line_width","setLineDash","dash","Array","isArray","setLinearGradient","x1","y1","x2","y2","c1","c2","setRadialGradient","radius","setFont","font","loadFont","isFontReady","setTranslation","TransformOps","setScale","scale_x","scale_y","setRotation","rotation","setDrawAnchor","anchor_x","anchor_y","setDrawRotation","object_rotation","setDrawScale","object_scale_x","object_scale_y","w","h","DrawingOps","fillRoundRect","fillRound","drawRect","drawRoundRect","drawRound","drawLine","drawPolyline","ShapeOps","drawPolygon","fillPolygon","drawQuadCurve","drawBezierCurve","drawArc","angle1","angle2","ccw","fillArc","textWidth","text","size","drawText","TextOps","drawTextOutline","drawSprite","sprite","SpriteRenderingOps","drawSpritePart","sx","sy","sw","sh","drawImagePart","drawMap","map","MapRenderingOps"]}
|