{
  "version": 3,
  "sources": ["../../../src/canvas.ts", "../../../src/types.ts", "../../../src/renderers/Tile.ts", "../../../src/util.ts", "../../../src/renderers/Fabricator.ts", "../../../src/renderers/ExpandoBox.ts", "../../../src/renderers/Loader.ts", "../../../src/renderers/Pusher.ts", "../../../src/renderers/Helm.ts", "../../../src/renderers/ShieldGenerator.ts", "../../../src/renderers/Hatch.ts", "../../../src/renderers/SimpleNoImageItem.ts", "../../../src/renderers/Turret.ts", "../../../src/renderers/TurretController.ts", "../../../src/renderers/ThrusterStarter.ts", "../../../src/renderers/Ejector.ts", "../../../src/renderers/Thruster.ts", "../../../src/renderers/MunitionsSupplyUnit.ts", "../../../src/renderers/Door.ts", "../../../src/renderers/Launcher.ts", "../../../src/renderers/_import.ts", "../../../src/main.ts", "../../../src/BpRenderer.ts", "../../../src/index.ts"],
  "sourcesContent": ["// https://github.com/Automattic/node-canvas/blob/master/browser.js\r\nimport { Canvas, createCanvas as node_createCanvas, loadImage as node_loadImage, SKRSContext2D, Image as SKRSImage } from \"@napi-rs/canvas\" // @build_node-only\r\nimport { isNode } from \"./main.js\"\r\n\r\nexport * from \"@napi-rs/canvas\" // @build_node-only\r\nexport { SKRSContext2D as CanvasRenderingContext2D, createCanvas, loadImage }\r\nexport type Image = SKRSImage & HTMLImageElement\r\n\r\nconst createCanvas = isNode ? node_createCanvas :\r\n\t(width: number, height: number) => {\r\n\t\treturn Object.assign(globalThis.document.createElement(\"canvas\"), { width: width, height: height }) as unknown as Canvas\r\n\t}\r\n\r\nconst loadImage = isNode ? (node_loadImage as (...args: Parameters<typeof node_loadImage>) => Promise<Image>)\r\n\t: (src: string | Buffer, options?: Record<string, any>): Promise<Image> => {\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tconst image = Object.assign(globalThis.document.createElement(\"img\"), options) as Image,\r\n\t\t\t\tcleanup = () => image.onload = image.onerror = null\r\n\r\n\t\t\timage.onload = () => { cleanup(); resolve(image) }\r\n\t\t\timage.onerror = () => { cleanup(); reject(new Error(`Failed to load the image \"${src}\"`)) }\r\n\r\n\t\t\timage.src = src as string\r\n\t\t})\r\n\t}\r\n\r\n", "import { Image } from \"./canvas.js\"\r\nimport { ConfigCmd, Item, Shape } from \"dsabp-js\"\r\nimport { BpRenderer } from \"./index.js\"\r\n\r\nexport type Hull = \"HULL_CORNER\" | \"HULL_H\" | \"HULL_V\"\r\n\r\nexport const TileFace = {\r\n\tTop: 1,\r\n\tRight: 2,\r\n\tBottom: 4,\r\n\tLeft: 8\r\n}\r\nexport type TileFace = typeof TileFace[keyof typeof TileFace]\r\n\r\n\r\nexport type RendererResolver = ({ main, item, shape, config, other }: RendererResolverParams) => Renderer\r\n\r\nexport type RendererResolverParams = {\r\n\tmain: BpRenderer;\r\n\ttoRel?: InstanceType<typeof BpRenderer>[\"toRel\"],\r\n\titem: Item;\r\n\tshape?: Shape;\r\n\tconfig?: Partial<ConfigCmd>;\r\n\tother?: any\r\n}\r\n\r\n\r\nexport interface Renderer {\r\n\tdiscriminator: string\r\n\trender: () => Promise<RenderResult[]> | RenderResult[]\r\n}\r\n\r\nexport interface RenderResult {\r\n\tlayer?: \"main\" | \"top\"\r\n\timage: Image\r\n\r\n\ttexturePosOff?: { x: number, y: number },\r\n\r\n\ttextureSizeOff?: { x: number, y: number },\r\n\r\n\tbaseBoundOff?: { x: number, y: number },\r\n\tsx?: number\r\n\tsy?: number\r\n\tsw?: number\r\n\tsh?: number\r\n}\r\n", "import { Item, Shape } from \"dsabp-js\"\r\nimport { CanvasRenderingContext2D, Image, createCanvas } from \"../canvas.js\"\r\nimport { rendererResolvers } from \"../main.js\"\r\nimport { Hull, TileFace } from \"../types.js\"\r\nimport { getImage, toImage } from \"../util.js\"\r\n\r\nconst TILE_SIZE = 80\r\nconst BLOCKS_START_INDEX = 8 * 6 - 1 // space above block tiles\r\nconst BORDERS_START_INDEX = 8 * 3 - 1\r\nconst borderColors = new Map<Item, string>()\r\n\t.set(Item.BLOCK, \"#2c2c2c\")\r\n\t.set(Item.BLOCK_ICE_GLASS, \"#3a535e\")\r\n\t.set(Item.BLOCK_ITEM_NET, \"#6e5639\")\r\n\t.set(Item.BLOCK_WALKWAY, \"#000000\")\r\n\t.set(Item.BLOCK_HYPER_RUBBER, \"#000000\")\r\n\r\nexport const connectedTileTypes = new Set([Item.BLOCK, Item.BLOCK_ICE_GLASS])\r\n\r\nconst CACHE_KEY_ATLAS = \"Tile_atlasSubWorld\"\r\nlet atlasWidth: number\r\n\r\nconst i = rendererResolvers.push(\r\n\t({ main, item, shape, other }) => {\r\n\t\tif (!other?.hull && !item.isBlock)\r\n\t\t\treturn\r\n\r\n\t\tconst connectedFaces = other?.connectedTileFaces\r\n\r\n\t\treturn {\r\n\t\t\tdiscriminator: (other?.hull ?? item.id)\r\n\t\t\t\t+ \"_\" + (shape ?? Shape.BLOCK).enumValue\r\n\t\t\t\t+ \"_\" + (connectedFaces ?? \"-\"),\r\n\t\t\tasync render() {\r\n\t\t\t\tconst canvas = createCanvas(TILE_SIZE, TILE_SIZE)\r\n\t\t\t\tconst ctx = canvas.getContext(\"2d\")\r\n\t\t\t\tconst isShaped = item.buildInfo?.[0].block_shaped\r\n\r\n\t\t\t\t// draw shape\r\n\t\t\t\tif (isShaped && shape != null && shape != Shape.BLOCK) {\r\n\t\t\t\t\tctx.beginPath()\r\n\t\t\t\t\tfor (let i = 0; i < shape.vertices.length; i++)\r\n\t\t\t\t\t\tctx[i == 0 ? \"moveTo\" : \"lineTo\"]((shape.vertices[i].x + 0.5) * canvas.width, (-shape.vertices[i].y + 0.5) * canvas.height)\r\n\t\t\t\t\tctx.closePath()\r\n\t\t\t\t\tctx.clip()\r\n\t\t\t\t\tctx.clearRect(0, 0, canvas.width, canvas.height)\r\n\t\t\t\t\tctx.clip(\"nonzero\")\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// draw tile\r\n\t\t\t\tawait drawTile(main.imageCache, ctx, other?.hull ?? item)\r\n\t\t\t\tif (isShaped)\r\n\t\t\t\t\tawait drawBorder(main.imageCache, ctx, item, shape ?? Shape.BLOCK, connectedFaces)\r\n\t\t\t\tctx.globalCompositeOperation = \"source-over\"\r\n\r\n\t\t\t\treturn [{ image: await toImage(canvas) }]\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n)\r\n\r\nexport const tileRendererResolver = rendererResolvers[i - 1]\r\n\r\nconst borderMap: Map<Shape, [border: number, angle?: number, flip?: \"H\" | \"V\"]> = new Map()\r\n\t.set(Shape.RAMP_DL, [5, 180])\r\n\t.set(Shape.RAMP_DR, [5, 90])\r\n\t.set(Shape.RAMP_UL, [5, -90])\r\n\t.set(Shape.RAMP_UR, [5])\r\n\t.set(Shape.SLAB_D, [6, 180])\r\n\t.set(Shape.SLAB_L, [6, -90])\r\n\t.set(Shape.SLAB_R, [6, 90])\r\n\t.set(Shape.SLAB_U, [6])\r\n\t.set(Shape.HALF_RAMP_2_D, [8, 180])\r\n\t.set(Shape.HALF_RAMP_2_DI, [8, 180, \"H\"])\r\n\t.set(Shape.HALF_RAMP_2_L, [8, -90])\r\n\t.set(Shape.HALF_RAMP_2_LI, [8, -90, \"V\"])\r\n\t.set(Shape.HALF_RAMP_2_R, [8, 90])\r\n\t.set(Shape.HALF_RAMP_2_RI, [8, 90, \"V\"])\r\n\t.set(Shape.HALF_RAMP_2_U, [8])\r\n\t.set(Shape.HALF_RAMP_2_UI, [8, 0, \"H\"])\r\n\t.set(Shape.HALF_RAMP_1_D, [9, 180])\r\n\t.set(Shape.HALF_RAMP_1_DI, [9, 180, \"H\"])\r\n\t.set(Shape.HALF_RAMP_1_L, [9, -90])\r\n\t.set(Shape.HALF_RAMP_1_LI, [9, -90, \"V\"])\r\n\t.set(Shape.HALF_RAMP_1_R, [9, 90])\r\n\t.set(Shape.HALF_RAMP_1_RI, [9, 90, \"V\"])\r\n\t.set(Shape.HALF_RAMP_1_U, [9])\r\n\t.set(Shape.HALF_RAMP_1_UI, [9, 0, \"H\"])\r\n\t.set(Shape.HALF_RAMP_3_D, [10, 180])\r\n\t.set(Shape.HALF_RAMP_3_DI, [10, 180, \"H\"])\r\n\t.set(Shape.HALF_RAMP_3_L, [10, -90])\r\n\t.set(Shape.HALF_RAMP_3_LI, [10, -90, \"V\"])\r\n\t.set(Shape.HALF_RAMP_3_R, [10, 90])\r\n\t.set(Shape.HALF_RAMP_3_RI, [10, 90, \"V\"])\r\n\t.set(Shape.HALF_RAMP_3_U, [10])\r\n\t.set(Shape.HALF_RAMP_3_UI, [10, 0, \"H\"])\r\n\t.set(Shape.QUARTER_DL, [11, 180])\r\n\t.set(Shape.QUARTER_DR, [11, 90])\r\n\t.set(Shape.QUARTER_UL, [11, -90])\r\n\t.set(Shape.QUARTER_UR, [11])\r\n\t.set(Shape.QUARTER_RAMP_DL, [12, 180])\r\n\t.set(Shape.QUARTER_RAMP_DR, [12, 90])\r\n\t.set(Shape.QUARTER_RAMP_UL, [12, -90])\r\n\t.set(Shape.QUARTER_RAMP_UR, [12])\r\n\t.set(Shape.BEVEL_DL, [13, 180])\r\n\t.set(Shape.BEVEL_DR, [13, 90])\r\n\t.set(Shape.BEVEL_UL, [13, -90])\r\n\t.set(Shape.BEVEL_UR, [13])\r\n\r\nasync function drawBorder(imageCache: Record<string, Image>, ctx: CanvasRenderingContext2D, item: Item, shape: Shape, faceBits?: number) {\r\n\tconst color = borderColors.get(item)\r\n\r\n\t// draw the shape related border\r\n\tconst args = borderMap.get(shape)\r\n\tif (args)\r\n\t\tawait drawTile(imageCache, ctx, args[0] + BORDERS_START_INDEX, args[1], args[2], color)\r\n\r\n\t// draw the main border\r\n\tf: if (connectedTileTypes.has(item)) {\r\n\t\t// whether the tile is connected to the input face\r\n\t\tconst c = (f: TileFace) => faceBits & f\r\n\r\n\t\t// amount of connected sides of the tile\r\n\t\tlet amount = 0\r\n\t\tif (c(TileFace.Bottom)) ++amount\r\n\t\tif (c(TileFace.Left)) ++amount\r\n\t\tif (c(TileFace.Right)) ++amount\r\n\t\tif (c(TileFace.Top)) ++amount\r\n\r\n\t\tif (amount == 4) break f\r\n\r\n\t\tlet mainIndex: number, angle: number\r\n\r\n\t\tif (!amount) {\r\n\t\t\tmainIndex = 4\r\n\t\t} else if (amount == 1) {\r\n\t\t\tmainIndex = 3\r\n\t\t\tangle = c(TileFace.Bottom) ? null :\r\n\t\t\t\tc(TileFace.Left) ? 90 :\r\n\t\t\t\t\tc(TileFace.Top) ? 180 :\r\n\t\t\t\t\t\t-90\r\n\t\t} else if (amount == 2) {\r\n\t\t\tif (c(TileFace.Top) && c(TileFace.Bottom)) {\r\n\t\t\t\tmainIndex = 2\r\n\t\t\t\tangle = 90\r\n\t\t\t} else if (c(TileFace.Left) && c(TileFace.Right)) {\r\n\t\t\t\tmainIndex = 2\r\n\t\t\t} else {\r\n\t\t\t\tmainIndex = 1\r\n\t\t\t\tangle = c(TileFace.Bottom) && c(TileFace.Left) ? null :\r\n\t\t\t\t\tc(TileFace.Left) && c(TileFace.Top) ? 90 :\r\n\t\t\t\t\t\tc(TileFace.Top) && c(TileFace.Right) ? 180 :\r\n\t\t\t\t\t\t\t-90\r\n\t\t\t}\r\n\t\t} else if (amount == 3) {\r\n\t\t\tmainIndex = 0\r\n\t\t\tif (!(c(TileFace.Right)))\r\n\t\t\t\tangle = 90\r\n\t\t\telse if (!(c(TileFace.Bottom)))\r\n\t\t\t\tangle = 180\r\n\t\t\telse if (!(c(TileFace.Left)))\r\n\t\t\t\tangle = -90\r\n\t\t}\r\n\r\n\t\tawait drawTile(imageCache, ctx, mainIndex + BORDERS_START_INDEX, angle, null, color)\r\n\t}\r\n}\r\n\r\n/** Draw a certain tile from the atlas */\r\nasync function drawTile(imageCache: Record<string, Image>, ctx: CanvasRenderingContext2D, thing: Item | Hull | number, angle?: number, flip?: \"H\" | \"V\", color?: string) {\r\n\tlet atlasImage = imageCache[CACHE_KEY_ATLAS]\r\n\tif (!atlasImage) {\r\n\t\tatlasImage = imageCache[CACHE_KEY_ATLAS] = await getImage(\"tiles_subworld\")\r\n\t\tatlasWidth = atlasImage.width / TILE_SIZE\r\n\t}\r\n\r\n\tlet index: number\r\n\tif (thing instanceof Item) {\r\n\t\tindex = thing.buildInfo[0].block + BLOCKS_START_INDEX\r\n\t} else if (typeof thing == \"string\") {\r\n\t\tif (thing == \"HULL_CORNER\")\r\n\t\t\tindex = 1\r\n\t\telse if (thing == \"HULL_H\")\r\n\t\t\tindex = 2\r\n\t\telse if (thing == \"HULL_V\")\r\n\t\t\tindex = 3\r\n\t\tindex += BLOCKS_START_INDEX\r\n\t} else {\r\n\t\tindex = thing\r\n\t}\r\n\r\n\tconst col = (index + 1) % atlasWidth\r\n\tconst row = Math.floor((index + 1) / atlasWidth)\r\n\r\n\tconst canvas2 = createCanvas(TILE_SIZE, TILE_SIZE)\r\n\tconst ctx2 = canvas2.getContext(\"2d\")\r\n\r\n\tif (angle != null || flip) {\r\n\t\tconst half = TILE_SIZE / 2\r\n\t\tctx2.save()\r\n\t\tctx2.translate(half, half)\r\n\t\tif (flip == \"H\")\r\n\t\t\tctx2.scale(-1, 1)\r\n\t\telse if (flip == \"V\")\r\n\t\t\tctx2.scale(1, -1)\r\n\t\tctx2.rotate(angle * Math.PI / 180)\r\n\t\tctx2.translate(-half, -half)\r\n\t}\r\n\r\n\tif (color) {\r\n\t\tctx2.fillStyle = color\r\n\t\tctx2.globalCompositeOperation = \"multiply\"\r\n\t\tctx2.fillRect(0, 0, TILE_SIZE, TILE_SIZE)\r\n\t\tctx2.globalCompositeOperation = \"destination-in\"\r\n\t}\r\n\r\n\tctx2.drawImage(\r\n\t\tatlasImage,\r\n\t\tcol * TILE_SIZE,\r\n\t\trow * TILE_SIZE,\r\n\t\tTILE_SIZE, TILE_SIZE,\r\n\t\t0, 0,\r\n\t\tTILE_SIZE, TILE_SIZE\r\n\t)\r\n\tif (angle != null || flip)\r\n\t\tctx2.restore()\r\n\r\n\tif (color) ctx2.globalCompositeOperation = \"source-over\"\r\n\tctx.drawImage(canvas2, 0, 0)\r\n}\r\n", "import { Blueprint, BuildCmd, ConfigCmd, FixedAngle, Item, Shape } from \"dsabp-js\"\r\nimport { createWriteStream } from \"fs\" // @build_node-only\r\nimport { access, mkdir } from \"fs/promises\" // @build_node-only\r\nimport { dirname, extname, join } from \"path\" // @build_node-only\r\nimport { Readable } from \"stream\" // @build_node-only\r\nimport { finished } from \"stream/promises\" // @build_node-only\r\nimport { BpRenderer } from \"./BpRenderer.js\"\r\nimport { Canvas, CanvasRenderingContext2D, Image, createCanvas, loadImage } from \"./canvas.js\"\r\nimport { MAX_SIZE, customImagePathHandler, imagesPath } from \"./index.js\"\r\nimport { isNode, rendererResolvers } from \"./main.js\"\r\nimport { connectedTileTypes, tileRendererResolver } from \"./renderers/Tile.js\"\r\nimport { Hull, Renderer, RendererResolverParams, TileFace } from \"./types.js\"\r\n\r\nexport function clearCanvas(c: Canvas, ctx: CanvasRenderingContext2D, width: number, height: number) {\r\n\tc.width = width\r\n\tc.height = height\r\n\tctx.clearRect(0, 0, width, height)\r\n}\r\n\r\nexport function putInCanvas(c: Canvas, ctx: CanvasRenderingContext2D, img: Image | Canvas) {\r\n\tclearCanvas(c, ctx, img.width, img.height)\r\n\tctx.drawImage(img, 0, 0)\r\n}\r\n\r\nexport function drawRotatedImage(ctx: CanvasRenderingContext2D, image: Canvas | Image, angle: number, x: number, y: number, originX: number, originY: number, dw = image.width, dh = image.height, sx: number = 0, sy: number = 0, sw: number = dw, sh: number = dh) {\r\n\tctx.save()\r\n\tctx.translate(x, y)\r\n\tctx.rotate(angle * Math.PI / 180)\r\n\tctx.drawImage(image, sx, sy, sw, sh, -originX, -originY, dw, dh)\r\n\tctx.restore()\r\n}\r\n\r\nexport function drawRotatedImages(ctx: CanvasRenderingContext2D, image: Canvas | Image, opts: [angle: number, x: number, y: number][], originX: number, originY: number, dw = image.width, dh = image.height) {\r\n\tfor (const opt of opts)\r\n\t\tdrawRotatedImage(ctx, image, opt[0], opt[1], opt[2], originX, originY, dw, dh)\r\n}\r\n\r\nexport function toImage(canvas: Canvas) {\r\n\treturn loadImage(isNode ? canvas.toBuffer(\"image/png\") : canvas.toDataURL())\r\n}\r\n\r\nfunction getExtname(path) {\r\n\tif (isNode) return extname(path)\r\n\tconst lastSlashIndex = path.lastIndexOf(\"/\")\r\n\tconst lastDotIndex = path.lastIndexOf(\".\")\r\n\treturn lastDotIndex > lastSlashIndex ? path.slice(lastDotIndex) : \"\"\r\n}\r\n\r\n// GET IMAGE\r\nexport async function getImage(src: string, crossOrigin?: \"anonymous\", isAbs?: boolean) {\r\n\tif (!src) return null\r\n\r\n\tif (customImagePathHandler) {\r\n\t\tconst newSrc = customImagePathHandler(src)\r\n\t\tif (newSrc) {\r\n\t\t\tsrc = newSrc\r\n\t\t\tisAbs = true\r\n\t\t}\r\n\t}\r\n\r\n\tisAbs = isAbs || src.startsWith(\"http\")\r\n\r\n\tconst extToAppend = (getExtname(src) == \"\" ? \".png\" : \"\"),\r\n\t\tpath = isAbs ? src : (isNode ? join(imagesPath, src + extToAppend) : (imagesPath + src + extToAppend))\r\n\r\n\tlet img: Image\r\n\tif (isNode) {\r\n\t\timg = isAbs\r\n\t\t\t? await loadImage(path)\r\n\t\t\t: isNode && await access(path).then(() => true).catch(() => false)\r\n\t\t\t\t? await loadImage(path)\r\n\t\t\t\t: undefined\r\n\t\tif (!isAbs && !img?.naturalWidth) {\r\n\t\t\t// image doesn't exist locally, try fetch\r\n\t\t\tconst res = await fetch(\"https://test.drednot.io/img/\" + src + extToAppend)\r\n\t\t\tawait mkdir(dirname(path), { recursive: true })\r\n\t\t\tconst stream = createWriteStream(path, { flags: \"w+\" })\r\n\t\t\tawait finished(Readable.fromWeb(res.body as any).pipe(stream))\r\n\t\t\treturn getImage(path, null, true)\r\n\t\t}\r\n\t} else {\r\n\t\timg = await loadImage(path, { crossOrigin } as any).catch(() => undefined)\r\n\t\t\t?? await loadImage(`${location.origin}/p?https://test.drednot.io/img/` + src + extToAppend, { crossOrigin } as any).catch(() => undefined)\r\n\t}\r\n\r\n\treturn img\r\n}\r\n\r\n// GET RENDERER\r\nexport function getRenderer({ main, item, shape, config, other }: RendererResolverParams) {\r\n\tif (!item.buildInfo?.[0])\r\n\t\tthrow \"Rendering not supported: \" + item.enumName\r\n\r\n\tif (!config)\r\n\t\tconfig = Object.assign(new ConfigCmd(), ConfigCmd.defaults)\r\n\r\n\tlet renderer: Renderer\r\n\r\n\tfor (const resolve of rendererResolvers)\r\n\t\tif ((renderer = resolve({ main, toRel: main.toRel.bind(main), item, shape, config, other })))\r\n\t\t\tbreak\r\n\r\n\tif (!renderer) {\r\n\t\trenderer = {\r\n\t\t\tdiscriminator: `${item.id}${shape ? \"_\" + shape.enumValue : \"\"}`,\r\n\t\t\trender: async () => [{ image: await getImage(item.buildInfo[0].image) }]\r\n\t\t}\r\n\t}\r\n\r\n\treturn renderer\r\n}\r\n\r\n// GET HULL RENDERER\r\nexport function getHullRenderer(main: BpRenderer, hull: Hull) {\r\n\treturn tileRendererResolver({\r\n\t\tmain,\r\n\t\titem: Item.NULL,\r\n\t\tother: { hull },\r\n\t\tshape: null\r\n\t})\r\n}\r\n\r\n// GET TINTED IMAGE\r\nexport const tintCanvas = createCanvas(0, 0)\r\nexport const tintCtx = tintCanvas.getContext(\"2d\")\r\nexport async function getTinted(img: Image | Promise<Image>, color: string, alpha?: number) {\r\n\timg = await img\r\n\ttintCanvas.width = img.width\r\n\ttintCanvas.height = img.height\r\n\ttintCtx.clearRect(0, 0, img.width, img.height)\r\n\r\n\tif (alpha != null)\r\n\t\ttintCtx.globalAlpha = alpha\r\n\ttintCtx.drawImage(img, 0, 0)\r\n\ttintCtx.fillStyle = color\r\n\ttintCtx.globalCompositeOperation = \"multiply\"\r\n\ttintCtx.fillRect(0, 0, img.width, img.height)\r\n\ttintCtx.globalCompositeOperation = \"destination-in\"\r\n\ttintCtx.drawImage(img, 0, 0)\r\n\treturn toImage(tintCanvas)\r\n}\r\n\r\n// GET ROTATED IMAGE\r\nexport const rotateCanvas = createCanvas(0, 0)\r\nexport const rotateCtx = rotateCanvas.getContext(\"2d\")\r\nexport async function getRotated(img: Image | Promise<Image>, angle: number, resize?: boolean) {\r\n\timg = await img\r\n\tangle *= (Math.PI / 180)\r\n\r\n\tlet width: number, height: number\r\n\tif (resize) {\r\n\t\tconst sin = Math.abs(Math.sin(angle)), cos = Math.abs(Math.cos(angle))\r\n\t\twidth = img.height * sin + img.width * cos\r\n\t\theight = img.height * cos + img.width * sin\r\n\t} else {\r\n\t\twidth = img.width\r\n\t\theight = img.height\r\n\t}\r\n\trotateCanvas.width = width\r\n\trotateCanvas.height = height\r\n\r\n\trotateCtx.save()\r\n\trotateCtx.clearRect(0, 0, width, height)\r\n\trotateCtx.translate(width / 2, height / 2)\r\n\trotateCtx.rotate(angle)\r\n\trotateCtx.drawImage(img, -img.width / 2, -img.height / 2)\r\n\trotateCtx.restore()\r\n\treturn toImage(rotateCanvas)\r\n}\r\n\r\n// GET SHIP BACKGROUND DATA - NOTE: Not fully tested, wall checks are broken\r\nexport async function getShipBackgroundData(renderer: BpRenderer, bp?: Blueprint, width = bp.width, height = bp.height) {\r\n\tconst checks: {\r\n\t\tnoWall: boolean\r\n\t\tnoWallSides: Set<\"top\" | \"right\" | \"bottom\" | \"left\">\r\n\t\tisMaxSize: boolean\r\n\t} = {\r\n\t\tnoWall: true,\r\n\t\tnoWallSides: new Set(),\r\n\t\tisMaxSize: width == MAX_SIZE && height == MAX_SIZE\r\n\t}\r\n\r\n\tif (bp) for (const cmd of bp.commands) {\r\n\t\tif (cmd instanceof BuildCmd && cmd.item) {\r\n\t\t\tconst { item, x, y } = cmd\r\n\r\n\t\t\tif (!checks.isMaxSize) {\r\n\t\t\t\tconst isHull = cmd.item.isBuildable && cmd.item.buildInfo?.[0].require_blocks?.[0].block.includes(\"HULL\")\r\n\t\t\t\tif (isHull) {\r\n\t\t\t\t\tchecks.noWall = false\r\n\t\t\t\t} else if (cmd.item.isBuildable) {\r\n\t\t\t\t\tif (x == 0)\r\n\t\t\t\t\t\tchecks.noWallSides.add(\"left\")\r\n\t\t\t\t\telse if (x == bp.width - 1)\r\n\t\t\t\t\t\tchecks.noWallSides.add(\"right\")\r\n\t\t\t\t\telse if (y == 0)\r\n\t\t\t\t\t\tchecks.noWallSides.add(\"bottom\")\r\n\t\t\t\t\telse if (y == bp.height - 1)\r\n\t\t\t\t\t\tchecks.noWallSides.add(\"top\")\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (renderer.knownObjectTypes.has(cmd.item)) {\r\n\t\t\t\tif (cmd.bits) {\r\n\t\t\t\t\tlet bitI = 0\r\n\t\t\t\t\tfor (const bit of cmd.bits) {\r\n\t\t\t\t\t\tif (bit) {\r\n\t\t\t\t\t\t\trenderer.knownObjects[x + bitI] ??= []\r\n\t\t\t\t\t\t\trenderer.knownObjects[x + bitI][y] = item\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbitI++\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\trenderer.knownObjects[x] ??= []\r\n\t\t\t\t\trenderer.knownObjects[x][y] = item\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tconst imgPaint = await getPaintImage(),\r\n\t\timgHullC = (await getHullRenderer(renderer, \"HULL_CORNER\").render())[0].image,\r\n\t\timgHullH = (await getHullRenderer(renderer, \"HULL_H\").render())[0].image,\r\n\t\timgHullV = (await getHullRenderer(renderer, \"HULL_V\").render())[0].image\r\n\r\n\tconst result = {\r\n\t\ttiles: [] as { type: \"paint\" | \"wallC\" | \"wallH\" | \"wallV\", image: Image }[][],\r\n\t\tchecks\r\n\t}\r\n\r\n\tfor (let x = 0; x < width; x++) {\r\n\t\tfor (let y = 0; y < height; y++) {\r\n\t\t\tlet img: Image\r\n\t\t\tif (!checks.noWallSides.has(\"left\") && x == 0) {\r\n\t\t\t\tif (!checks.noWallSides.has(\"bottom\") && y == 0)\r\n\t\t\t\t\timg = imgHullC\r\n\t\t\t\telse if (!checks.noWallSides.has(\"top\") && y == height - 1)\r\n\t\t\t\t\timg = imgHullC\r\n\t\t\t\telse\r\n\t\t\t\t\timg = imgHullV\r\n\t\t\t}\r\n\t\t\tif (!img && !checks.noWallSides.has(\"right\") && x == width - 1) {\r\n\t\t\t\tif (!checks.noWallSides.has(\"bottom\") && y == 0)\r\n\t\t\t\t\timg = imgHullC\r\n\t\t\t\telse if (!checks.noWallSides.has(\"top\") && y == height - 1)\r\n\t\t\t\t\timg = imgHullC\r\n\t\t\t\telse\r\n\t\t\t\t\timg = imgHullV\r\n\t\t\t}\r\n\t\t\tif (!img && !checks.noWallSides.has(\"bottom\") && y == 0)\r\n\t\t\t\timg = imgHullH\r\n\t\t\tif (!img && !checks.noWallSides.has(\"top\") && y == height - 1)\r\n\t\t\t\timg = imgHullH\r\n\t\t\tresult.tiles[x] ??= []\r\n\t\t\tresult.tiles[x][y] = {\r\n\t\t\t\ttype: img ? (img == imgHullH ? \"wallH\" : (img == imgHullV ? \"wallV\" : \"wallC\")) : \"paint\",\r\n\t\t\t\timage: img ?? imgPaint\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn result\r\n}\r\n\r\nexport function getPaintImage() {\r\n\treturn getTinted(getImage(\"bg_ship\"), \"rgb(187,187,187)\")\r\n}\r\n\r\n// GET DRAW ITEM DATA\r\nexport async function getDrawItemData(main: BpRenderer, item: Item, x: number, y: number, shape?: Shape, config?: Partial<ConfigCmd>, hullDirection?: FixedAngle, other?: Record<string, any>) {\r\n\tconst squareSize = main.squareSize\r\n\r\n\tconst resolverParams: RendererResolverParams = { main, item, shape, config, other: { hullDirection } }\r\n\tif (connectedTileTypes.has(item)) {\r\n\t\tlet connectedTileFaces = 0\r\n\t\tif (main.getKnownObject(x, y + 1) == item)\r\n\t\t\tconnectedTileFaces |= TileFace.Top\r\n\t\tif (main.getKnownObject(x + 1, y) == item)\r\n\t\t\tconnectedTileFaces |= TileFace.Right\r\n\t\tif (main.getKnownObject(x, y - 1) == item)\r\n\t\t\tconnectedTileFaces |= TileFace.Bottom\r\n\t\tif (main.getKnownObject(x - 1, y) == item)\r\n\t\t\tconnectedTileFaces |= TileFace.Left\r\n\t\tresolverParams.other.connectedTileFaces = connectedTileFaces\r\n\t}\r\n\r\n\tif (other) for (const key in other)\r\n\t\tresolverParams.other[key] = other[key]\r\n\r\n\tconst renderer = getRenderer(resolverParams)\r\n\tconst discr = renderer.discriminator\r\n\r\n\tlet renderResults = main.renderCache[discr]\r\n\tif (!renderResults) {\r\n\t\trenderResults = await renderer.render()\r\n\t\tmain.renderCache[discr] = renderResults\r\n\t}\r\n\r\n\tif (!renderResults?.[0]?.image) return [] // TODO: TEMP\r\n\r\n\tconst result = [] as {\r\n\t\tlayer: string,\r\n\t\timage: Image,\r\n\t\tangle?: number,\r\n\t\tsx?: number,\r\n\t\tsy?: number,\r\n\t\tsw?: number,\r\n\t\tsh?: number,\r\n\t\tpos: { x: number, y: number },\r\n\t\tdrawPosOff: { x: number, y: number },\r\n\t\toff: { x: number, y: number },\r\n\t\tsize: { w: number, h: number },\r\n\t\tbaseSize?: { w: number, h: number }\r\n\t}[]\r\n\r\n\tconst buildInfo = item.buildInfo[findBuildInfoIndex(item, hullDirection)]\r\n\r\n\tfor (const renderResult of renderResults) {\r\n\t\tconst { image, textureSizeOff, texturePosOff, baseBoundOff, sx, sy, sw, sh } = renderResult\r\n\t\tconst bounds = Object.assign({}, buildInfo.bounds)\r\n\r\n\t\tif (baseBoundOff) {\r\n\t\t\tbounds.x += baseBoundOff.x\r\n\t\t\tbounds.y += baseBoundOff.y\r\n\t\t}\r\n\t\tconst baseSize = {\r\n\t\t\tw: bounds.x * squareSize,\r\n\t\t\th: bounds.y * squareSize\r\n\t\t}\r\n\r\n\t\tconst sizeOff = {\r\n\t\t\tx: (bounds.x / 2) * squareSize,\r\n\t\t\ty: (bounds.y / 2) * squareSize\r\n\t\t}\r\n\r\n\t\tconst textureSizePosOff = { x: 0, y: 0 }\r\n\t\tif (textureSizeOff) {\r\n\t\t\tconst x = textureSizeOff.x / 2 * squareSize\r\n\t\t\tconst y = textureSizeOff.y / 2 * squareSize\r\n\t\t\tconst right = !hullDirection || hullDirection == FixedAngle.RIGHT\r\n\t\t\tif (right || hullDirection == FixedAngle.LEFT) {\r\n\t\t\t\tsizeOff.x += x\r\n\t\t\t\tsizeOff.y += y\r\n\t\t\t\ttextureSizePosOff.x += x * (right ? 1 : -1)\r\n\t\t\t\ttextureSizePosOff.y += y * (right ? 1 : -1)\r\n\t\t\t} else {\r\n\t\t\t\tconst up = hullDirection == FixedAngle.UP\r\n\t\t\t\tsizeOff.x += y\r\n\t\t\t\tsizeOff.y += x\r\n\t\t\t\ttextureSizePosOff.x -= y * (up ? 1 : -1)\r\n\t\t\t\ttextureSizePosOff.y -= x * (up ? 1 : -1)\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst drawPosOff = {\r\n\t\t\tx: squareSize / 2 - sizeOff.x + textureSizePosOff.x,\r\n\t\t\ty: squareSize / 2 - sizeOff.y + textureSizePosOff.y\r\n\t\t}\r\n\r\n\t\tconst hullDirR = !hullDirection || hullDirection == FixedAngle.RIGHT\r\n\t\tconst hullDirH = hullDirR || hullDirection == FixedAngle.LEFT\r\n\r\n\t\tif (texturePosOff) {\r\n\t\t\tif (hullDirH) {\r\n\t\t\t\tdrawPosOff.x += (texturePosOff.x * squareSize) * (hullDirR ? 1 : -1)\r\n\t\t\t\tdrawPosOff.y += (texturePosOff.y * squareSize) * (hullDirR ? 1 : -1)\r\n\t\t\t} else {\r\n\t\t\t\tconst hullDirUp = hullDirection == FixedAngle.UP\r\n\t\t\t\tdrawPosOff.x -= (texturePosOff.y * squareSize) * (hullDirUp ? 1 : -1)\r\n\t\t\t\tdrawPosOff.y -= (texturePosOff.x * squareSize) * (hullDirUp ? 1 : -1)\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst pos = {\r\n\t\t\tx: x * squareSize,\r\n\t\t\ty: (main.height - 1 - y) * squareSize\r\n\t\t}\r\n\r\n\t\tconst size = {\r\n\t\t\tw: sizeOff.x * 2,\r\n\t\t\th: sizeOff.y * 2\r\n\t\t}\r\n\r\n\t\tconst angle =\r\n\t\t\tconfig?.angle != null && buildInfo.build_angle == \"Any\"\r\n\t\t\t\t? -config?.angle\r\n\t\t\t\t: config?.fixedAngle != null && buildInfo.build_angle == \"Fixed\"\r\n\t\t\t\t\t? -config.fixedAngle.enumValue * 90\r\n\t\t\t\t\t: undefined\r\n\r\n\t\tresult.push({ layer: renderResult.layer, image, angle, sx, sy, sw, sh, pos, drawPosOff, off: sizeOff, size, baseSize })\r\n\t}\r\n\treturn result\r\n}\r\n\r\nexport function findBuildInfoIndex(item: Item, hullDirection: FixedAngle) {\r\n\tconst i = item.buildInfo.findIndex(bi =>\r\n\t\t(hullDirection == FixedAngle.UP || hullDirection == FixedAngle.DOWN) && bi.buildDirection == \"HORIZONTAL\"\r\n\t\t|| (hullDirection == FixedAngle.RIGHT || hullDirection == FixedAngle.LEFT) && bi.buildDirection == \"VERTICAL\"\r\n\t\t|| hullDirection == null && bi.build_angle\r\n\t)\r\n\treturn i == -1 ? (item.buildInfo[1] ? 1 : 0) : i\r\n}\r\n", "import { createCanvas } from \"../canvas.js\"\r\nimport { rendererResolvers } from \"../main.js\"\r\nimport { getImage, putInCanvas, toImage } from \"../util.js\"\r\n\r\nrendererResolvers.push(\r\n\t({ item }) => {\r\n\t\tif (item.fab_type == null)\r\n\t\t\treturn\r\n\r\n\t\treturn {\r\n\t\t\tdiscriminator: `${item.id}_${item.fab_type}`,\r\n\t\t\tasync render() {\r\n\t\t\t\tconst canvas = createCanvas(0, 0)\r\n\t\t\t\tconst ctx = canvas.getContext(\"2d\")\r\n\r\n\t\t\t\tconst imgFab = await getImage(item.buildInfo[0].image)\r\n\t\t\t\tconst imgIcon = await getImage(`fab_t_${item.fab_type.toLowerCase()}`)\r\n\r\n\t\t\t\tputInCanvas(canvas, ctx, imgFab)\r\n\r\n\t\t\t\tctx.drawImage(imgIcon, 61, 4) // fab icon offset\r\n\r\n\t\t\t\treturn [{ image: await toImage(canvas) }]\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n)\r\n", "import { Item } from \"dsabp-js\"\r\nimport { createCanvas } from \"../canvas.js\"\r\nimport { rendererResolvers } from \"../main.js\"\r\nimport { clearCanvas, drawRotatedImages, getImage, toImage } from \"../util.js\"\r\n\r\nrendererResolvers.push(\r\n\t({ item }) => {\r\n\t\tif (item != Item.EXPANDO_BOX)\r\n\t\t\treturn\r\n\r\n\t\treturn {\r\n\t\t\tdiscriminator: `${item.id}`,\r\n\t\t\tasync render() {\r\n\t\t\t\tconst canvas = createCanvas(0, 0)\r\n\t\t\t\tconst ctx = canvas.getContext(\"2d\")\r\n\r\n\t\t\t\tconst imgBase = await getImage(item.buildInfo[0].image)\r\n\t\t\t\tconst imgMid = await getImage(\"exbox_mid\")\r\n\t\t\t\tconst imgCorner = await getImage(\"exbox_corner\")\r\n\t\t\t\tconst imgCenter = await getImage(\"exbox_center\")\r\n\t\t\t\tconst imgBorder = await getImage(\"exbox_border\")\r\n\r\n\t\t\t\tclearCanvas(canvas, ctx, imgBase.width, imgBase.height) // not drawing base \r\n\r\n\t\t\t\tconst midX = imgBase.width / 2, midY = imgBase.height / 2\r\n\r\n\t\t\t\tdrawRotatedImages(ctx, imgBorder, [\r\n\t\t\t\t\t[0, midX, midY - 10], // R\r\n\t\t\t\t\t[90, midX + 10, midY], // B\r\n\t\t\t\t\t[180, midX, midY + 10], // L\r\n\t\t\t\t\t[-90, midX - 10, midY], // T\r\n\t\t\t\t], 0, imgBorder.height / 2, imgBorder.width, imgBase.height - 20) // origin = left center of image\r\n\r\n\t\t\t\tctx.drawImage(imgMid, 5, 5, imgBase.width - 10, imgBase.height - 10)\r\n\r\n\t\t\t\tdrawRotatedImages(ctx, imgCorner, [\r\n\t\t\t\t\t[0, midX, midY], // TL\r\n\t\t\t\t\t[90, midX, midY], // TR\r\n\t\t\t\t\t[180, midX, midY], // BR\r\n\t\t\t\t\t[-90, midX, midY], // BL\r\n\t\t\t\t], imgCorner.width, imgCorner.height) // origin = right bottom of image\r\n\r\n\t\t\t\tctx.drawImage(imgCenter, midX - imgCenter.width / 2, midY - imgCenter.height / 2)\r\n\r\n\t\t\t\treturn [{ image: await toImage(canvas) }]\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n)\r\n", "import { ConfigCmd, FilterMode, Item, LoaderPoint, LoaderPriority } from \"dsabp-js\"\r\nimport { Image, createCanvas } from \"../canvas.js\"\r\nimport { rendererResolvers } from \"../main.js\"\r\nimport { clearCanvas, drawRotatedImage, getImage, getRotated, getTinted, toImage } from \"../util.js\"\r\n\r\nconst baseColor = \"#2b9430\"\r\n\r\nconst priorityColors = new Map<LoaderPriority, string>()\r\n\t.set(LoaderPriority.HIGH, \"#00ff00\")\r\n\t.set(LoaderPriority.LOW, \"#ff0000\")\r\n\r\nconst modeColors = new Map<FilterMode, string>()\r\n\t.set(FilterMode.ALLOW_ALL, \"#009b00\")\r\n\t.set(FilterMode.ALLOW_FILTER_ONLY, \"#9b6700\")\r\n\t.set(FilterMode.BLOCK_ALL, \"#9b0000\")\r\n\t.set(FilterMode.BLOCK_FILTER_ONLY, \"#9b9b00\")\r\n\r\nconst armColor = \"#222222\"\r\n\r\nconst pickupRotations = new Map<LoaderPoint, number>()\r\n\t.set(LoaderPoint.BOTTOM, -90)\r\n\t.set(LoaderPoint.BOTTOM_LEFT, -45)\r\n\t.set(LoaderPoint.BOTTOM_RIGHT, -90 - 45)\r\n\t.set(LoaderPoint.LEFT, 0)\r\n\t.set(LoaderPoint.RIGHT, 180)\r\n\t.set(LoaderPoint.TOP, 90)\r\n\t.set(LoaderPoint.TOP_LEFT, 45)\r\n\t.set(LoaderPoint.TOP_RIGHT, 90 + 45)\r\n\r\nconst dropRotations = new Map<LoaderPoint, number>()\r\n\t.set(LoaderPoint.BOTTOM, 90)\r\n\t.set(LoaderPoint.BOTTOM_LEFT, 90 + 45)\r\n\t.set(LoaderPoint.BOTTOM_RIGHT, 45)\r\n\t.set(LoaderPoint.LEFT, 180)\r\n\t.set(LoaderPoint.RIGHT, 0)\r\n\t.set(LoaderPoint.TOP, -90)\r\n\t.set(LoaderPoint.TOP_LEFT, -90 - 45)\r\n\t.set(LoaderPoint.TOP_RIGHT, -45)\r\n\r\nconst CACHE_KEY_FLAT_ARMS = \"Loader_flatArms\",\r\n\tCACHE_KEY_DIAGONAL_ARMS = \"Loader_diagonalArms\"\r\n\r\nrendererResolvers.push(\r\n\t({ main, toRel, item, config }) => {\r\n\t\tif (item != Item.LOADER_NEW)\r\n\t\t\treturn\r\n\r\n\t\tconst filterMode = config.filterMode ?? ConfigCmd.defaults.filterMode\r\n\t\tconst priority = config.loader?.priority ?? ConfigCmd.defaults.loader.priority\r\n\t\tconst pickupPoint = config.loader?.pickupPoint ?? ConfigCmd.defaults.loader.pickupPoint\r\n\t\tconst dropPoint = config.loader?.dropPoint ?? ConfigCmd.defaults.loader.dropPoint\r\n\r\n\t\treturn {\r\n\t\t\tdiscriminator: `${item.id}_${filterMode.enumValue}_${priority.enumValue}_${pickupPoint.enumValue}_${dropPoint.enumValue}`,\r\n\t\t\tasync render() {\r\n\t\t\t\tconst canvas = createCanvas(0, 0)\r\n\t\t\t\tconst ctx = canvas.getContext(\"2d\")\r\n\t\t\t\tconst canvas2 = createCanvas(0, 0)\r\n\t\t\t\tconst ctx2 = canvas2.getContext(\"2d\")\r\n\r\n\t\t\t\tconst priorityColor = priorityColors.get(priority)\r\n\t\t\t\tconst pickupAngle = pickupRotations.get(pickupPoint)\r\n\t\t\t\tconst dropAngle = dropRotations.get(dropPoint)\r\n\r\n\t\t\t\tconst imgBase = await getTinted(getImage(item.buildInfo[0].image), baseColor)\r\n\t\t\t\tconst imgMid = await getImage(\"loader_flux\")\r\n\t\t\t\tconst imgArrow = await getTinted(getRotated(getImage(\"loader_arrow\"), dropAngle), modeColors.get(filterMode))\r\n\t\t\t\tconst imgPriority = !priorityColor ? null : await getTinted(getImage(\"loader_priority\"), priorityColor)\r\n\r\n\t\t\t\tconst extraPx = 8 // for diagonal hand rotation\r\n\r\n\t\t\t\tclearCanvas(canvas, ctx, imgBase.width, imgBase.height)\r\n\r\n\t\t\t\tclearCanvas(canvas2, ctx2, imgBase.width * 3 + extraPx * 2, imgBase.height * 3 + extraPx * 2)\r\n\t\t\t\tctx2.translate(imgBase.width + extraPx, imgBase.height + extraPx)\r\n\r\n\t\t\t\tctx.drawImage(imgBase, 0, 0)\r\n\t\t\t\tctx.drawImage(imgMid, 0, 0)\r\n\t\t\t\tctx.drawImage(imgArrow, 0, 0)\r\n\r\n\t\t\t\tif (imgPriority) {\r\n\t\t\t\t\tif (priority == LoaderPriority.LOW) {\r\n\t\t\t\t\t\tctx.save()\r\n\t\t\t\t\t\tctx.scale(1, -1)\r\n\t\t\t\t\t\tctx.drawImage(imgPriority, 0, 0 - imgPriority.height)\r\n\t\t\t\t\t\tctx.restore()\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tctx.drawImage(imgPriority, 0, 0)\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\tif (pickupAngle % 90 == 0) {\r\n\t\t\t\t\tconst arms = await getFlatArmsImage(main.imageCache)\r\n\t\t\t\t\tdrawRotatedImage(ctx2, arms, pickupAngle, arms.width * 0.25, arms.height / 2 - 4, arms.width * 0.75, arms.height / 2)\r\n\t\t\t\t} else {\r\n\t\t\t\t\tconst arms = await getDiagonalArmsImage(main.imageCache)\r\n\t\t\t\t\tdrawRotatedImage(ctx2, arms, pickupAngle + 45, arms.width * 0.25, arms.height / 4, arms.width * 0.75 + 8, arms.height / 4 - 8)\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\timage: await toImage(canvas)\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tlayer: \"top\",\r\n\t\t\t\t\t\timage: await toImage(canvas2),\r\n\t\t\t\t\t\ttextureSizeOff: toRel(canvas2.width - imgBase.width, canvas2.height - imgBase.height),\r\n\t\t\t\t\t\ttexturePosOff: toRel(-imgBase.width - extraPx, -imgBase.height - extraPx)\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n)\r\n\r\nasync function getFlatArmsImage(imageCache: Record<string, Image>) {\r\n\tconst cached = imageCache[CACHE_KEY_FLAT_ARMS]; if (cached) return cached\r\n\r\n\tconst imgHand = await getImage(\"loader_hand\"),\r\n\t\tcanvas = createCanvas(imgHand.width * 2, imgHand.height + 8),\r\n\t\tctx = canvas.getContext(\"2d\")\r\n\r\n\tctx.translate(0, 4)\r\n\r\n\tctx.strokeStyle = armColor\r\n\tctx.lineWidth = 4\r\n\tctx.beginPath()\r\n\tctx.moveTo(imgHand.width / 2, 0)\r\n\tctx.lineTo(imgHand.width * 1.5, 8)\r\n\tctx.stroke()\r\n\tctx.beginPath()\r\n\tctx.moveTo(imgHand.width / 2, imgHand.height)\r\n\tctx.lineTo(imgHand.width * 1.5, imgHand.height - 8)\r\n\tctx.stroke()\r\n\r\n\tctx.drawImage(imgHand, 0, 0)\r\n\tctx.scale(-1, -1)\r\n\tctx.drawImage(imgHand, -imgHand.width, -imgHand.height)\r\n\r\n\treturn imageCache[CACHE_KEY_FLAT_ARMS] = await toImage(canvas)\r\n}\r\n\r\nasync function getDiagonalArmsImage(imageCache: Record<string, Image>) {\r\n\tconst cached = imageCache[CACHE_KEY_DIAGONAL_ARMS]; if (cached) return cached\r\n\r\n\tconst imgHand = await getImage(\"loader_hand\")\r\n\tconst canvas = createCanvas(imgHand.width * 2, imgHand.height * 2)\r\n\tconst ctx = canvas.getContext(\"2d\")\r\n\r\n\tctx.translate(0, imgHand.height * 1.5 - 8)\r\n\tctx.rotate(-45 * Math.PI / 180)\r\n\tctx.strokeStyle = armColor\r\n\tctx.lineWidth = 4\r\n\tctx.beginPath()\r\n\tctx.moveTo(imgHand.width / 2, 0)\r\n\tctx.lineTo(imgHand.width * 1.5 + 16, 8)\r\n\tctx.stroke()\r\n\tctx.beginPath()\r\n\tctx.moveTo(imgHand.width / 2, imgHand.height)\r\n\tctx.lineTo(imgHand.width * 1.5 + 16, imgHand.height - 8)\r\n\tctx.stroke()\r\n\r\n\tctx.drawImage(imgHand, 0, 0)\r\n\tctx.scale(-1, -1)\r\n\tctx.drawImage(imgHand, -imgHand.width, -imgHand.height)\r\n\r\n\treturn imageCache[CACHE_KEY_DIAGONAL_ARMS] = await toImage(canvas)\r\n}\r\n", "import { ConfigCmd, Item, PusherMode } from \"dsabp-js\"\r\nimport { createCanvas } from \"../canvas.js\"\r\nimport { rendererResolvers } from \"../main.js\"\r\nimport { drawRotatedImage, getImage, getTinted, toImage } from \"../util.js\"\r\n\r\nconst baseColor = \"#2b9430\"\r\n\r\nrendererResolvers.push(\r\n\t({ toRel, item, config, other }) => {\r\n\t\tif (item != Item.PUSHER)\r\n\t\t\treturn\r\n\r\n\t\tconst angle = config.pusher?.angle ?? ConfigCmd.defaults.pusher.angle\r\n\t\tconst defaultMode = config.pusher?.defaultMode ?? ConfigCmd.defaults.pusher.defaultMode\r\n\t\tconst noPusherBeam = other.noPusherBeam\r\n\r\n\t\treturn {\r\n\t\t\tdiscriminator: `${item.id}_${angle}_${noPusherBeam || defaultMode.enumValue}`,\r\n\t\t\tasync render() {\r\n\t\t\t\tconst imgBase = await getTinted(getImage(item.buildInfo[0].image), baseColor)\r\n\t\t\t\tconst imgPusher = await getImage(\"pusher\")\r\n\r\n\t\t\t\tconst extraPx = 12\r\n\t\t\t\tconst canvas = createCanvas(imgBase.width + extraPx * 2, imgBase.height + extraPx * 2)\r\n\t\t\t\tconst ctx = canvas.getContext(\"2d\")\r\n\r\n\t\t\t\tctx.translate(extraPx, extraPx)\r\n\t\t\t\tctx.drawImage(imgBase, 0, 0)\r\n\r\n\t\t\t\tconst midX = imgBase.width / 2, midY = imgBase.height / 2\r\n\r\n\t\t\t\tconst pushMode = defaultMode\r\n\t\t\t\tif (pushMode != PusherMode.DO_NOTHING && !noPusherBeam) {\r\n\t\t\t\t\tif (pushMode == PusherMode.PULL) {\r\n\t\t\t\t\t\tconst imgBeam = await getTinted(getImage(\"pusher_beam\"), \"#ff88ff\", 0.8)\r\n\t\t\t\t\t\tdrawRotatedImage(ctx, imgBeam, 360 - angle, midX, midY, -imgBeam.width / 4.5, imgBeam.height / 2, imgBeam.width / 2, imgBeam.height, imgBeam.width / 1.5, 0, imgBeam.width / 1.5, imgBeam.height)\r\n\t\t\t\t\t\tdrawRotatedImage(ctx, imgBeam, 360 - angle, midX, midY, -imgBeam.width / 2 + 4, imgBeam.height / 2, imgBeam.width / 2 + 4, imgBeam.height, 0, 0, imgBeam.width / 2 + 4, imgBeam.height)\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tconst imgBeam = await getTinted(getImage(\"pusher_beam\"), \"#88ff88\", 0.8)\r\n\t\t\t\t\t\tdrawRotatedImage(ctx, imgBeam, 180 - angle, midX, midY, imgBeam.width, imgBeam.height / 2)\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdrawRotatedImage(ctx, imgPusher, -angle, midX, midY, midX, midY)\r\n\r\n\t\t\t\treturn [{\r\n\t\t\t\t\timage: await toImage(canvas),\r\n\t\t\t\t\ttextureSizeOff: toRel(canvas.width - imgBase.width, canvas.height - imgBase.height),\r\n\t\t\t\t\ttexturePosOff: toRel(-extraPx, -extraPx)\r\n\t\t\t\t}]\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n)\r\n", "import { Item } from \"dsabp-js\"\r\nimport { rendererResolvers } from \"../main.js\"\r\nimport { getImage } from \"../util.js\"\r\n\r\nrendererResolvers.push(\r\n\t({ toRel, item }) => {\r\n\t\tif (item != Item.HELM_STARTER && item != Item.HELM)\r\n\t\t\treturn\r\n\r\n\t\treturn {\r\n\t\t\tdiscriminator: `${item.id}`,\r\n\t\t\tasync render() {\r\n\t\t\t\tconst img = await getImage(item.buildInfo[0].image)\r\n\t\t\t\treturn [{\r\n\t\t\t\t\timage: img,\r\n\t\t\t\t\ttextureSizeOff: toRel(8, 4),\r\n\t\t\t\t\ttexturePosOff: toRel(-4, -2),\r\n\t\t\t\t\t...(item == Item.HELM_STARTER ? {\r\n\t\t\t\t\t\tsx: 6,\r\n\t\t\t\t\t\tsy: 6,\r\n\t\t\t\t\t\tsw: img.width - 12,\r\n\t\t\t\t\t\tsh: img.height - 12\r\n\t\t\t\t\t} : null)\r\n\t\t\t\t}]\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n)\r\n", "import { Item } from \"dsabp-js\"\r\nimport { createCanvas } from \"../canvas.js\"\r\nimport { rendererResolvers } from \"../main.js\"\r\nimport { getImage, putInCanvas, toImage } from \"../util.js\"\r\n\r\nrendererResolvers.push(\r\n\t({ item }) => {\r\n\t\tif (item != Item.SHIELD_GENERATOR)\r\n\t\t\treturn\r\n\r\n\t\treturn {\r\n\t\t\tdiscriminator: `${item.id}`,\r\n\t\t\tasync render() {\r\n\t\t\t\tconst canvas = createCanvas(0, 0)\r\n\t\t\t\tconst ctx = canvas.getContext(\"2d\")\r\n\r\n\t\t\t\tconst imgGen = await getImage(item.buildInfo[0].image)\r\n\t\t\t\tconst imgMatrix = await getImage(\"shield_matrix_idle\")\r\n\r\n\t\t\t\tputInCanvas(canvas, ctx, imgGen)\r\n\r\n\t\t\t\tctx.drawImage(imgMatrix,\r\n\t\t\t\t\timgGen.width / 2 - imgMatrix.width / 2,\r\n\t\t\t\t\timgGen.height / 2 - imgMatrix.height / 2\r\n\t\t\t\t)\r\n\r\n\t\t\t\treturn [{ image: await toImage(canvas) }]\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n)\r\n", "import { ConfigCmd, FilterMode, Item } from \"dsabp-js\"\r\nimport { createCanvas } from \"../canvas.js\"\r\nimport { rendererResolvers } from \"../main.js\"\r\nimport { RenderResult } from \"../types.js\"\r\nimport { clearCanvas, drawRotatedImage, getImage, getTinted, toImage } from \"../util.js\"\r\n\r\nconst glowPx = 5.8\r\n\r\nconst modeColors = new Map<FilterMode, string>()\r\n\t.set(FilterMode.ALLOW_ALL, \"#00c000\")\r\n\t.set(FilterMode.ALLOW_FILTER_ONLY, \"#c08000\")\r\n\t.set(FilterMode.BLOCK_ALL, \"#c00000\")\r\n\t.set(FilterMode.BLOCK_FILTER_ONLY, \"#c0c000\")\r\n\r\nrendererResolvers.push(\r\n\t({ toRel, item, config }) => {\r\n\t\tif (item != Item.ITEM_HATCH && item != Item.ITEM_HATCH_STARTER)\r\n\t\t\treturn undefined\r\n\r\n\t\tconst filterMode = config.filterMode ?? ConfigCmd.defaults.filterMode\r\n\r\n\t\treturn {\r\n\t\t\tdiscriminator: `${item.id}_${filterMode.enumValue}`,\r\n\t\t\tasync render() {\r\n\t\t\t\tconst canvas = createCanvas(0, 0)\r\n\t\t\t\tconst ctx = canvas.getContext(\"2d\")\r\n\r\n\t\t\t\tconst imgLid = await getImage(\"item_hatch\")\r\n\t\t\t\tconst imgPatch = await getTinted(getImage(\"item_hatch_patch\"), modeColors.get(filterMode))\r\n\r\n\t\t\t\tconst width = imgLid.height\r\n\r\n\t\t\t\tclearCanvas(canvas, ctx, width, width)\r\n\r\n\t\t\t\tctx.drawImage(imgLid, 0, 0)\r\n\t\t\t\tdrawRotatedImage(ctx, imgLid, 180, width / 2, width / 2, width / 2, width / 2)\r\n\r\n\t\t\t\tctx.drawImage(imgPatch, 0, 2)\r\n\t\t\t\tdrawRotatedImage(ctx, imgPatch, 180, width / 2 + 5, width / 2, imgPatch.width / 2, imgPatch.height / 2)\r\n\r\n\t\t\t\tconst results: RenderResult[] = [\r\n\t\t\t\t\t{ image: await toImage(canvas) }\r\n\t\t\t\t]\r\n\r\n\t\t\t\tif (item == Item.ITEM_HATCH_STARTER) {\r\n\t\t\t\t\tresults.push({\r\n\t\t\t\t\t\timage: await getGlowImage(),\r\n\t\t\t\t\t\ttextureSizeOff: toRel(glowPx * 2, glowPx * 2),\r\n\t\t\t\t\t\ttexturePosOff: toRel(-glowPx, -glowPx)\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn results\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n)\r\n\r\n// extract the starter glow part and draw it after the hatch\r\n// so the hatch image isn't bigger and doesn't result in a bad look when resized\r\nasync function getGlowImage() {\r\n\tconst img = await getImage(\"item_hatch_starter\")\r\n\tconst canvas = createCanvas(img.height, img.height)\r\n\tconst ctx = canvas.getContext(\"2d\")\r\n\tctx.drawImage(img, 0, 0)\r\n\tdrawRotatedImage(ctx, img, 180, canvas.width / 2 + 5, img.height / 2, img.width / 2, img.height / 2)\r\n\tctx.clearRect(glowPx, glowPx, canvas.width - glowPx * 2, canvas.height - glowPx * 2)\r\n\treturn toImage(canvas)\r\n}\r\n", "import { Item } from \"dsabp-js\"\r\nimport { rendererResolvers } from \"../main.js\"\r\nimport { getImage } from \"../util.js\"\r\n\r\n// These items don't have buildInfo.image but use item.image as the only image name\r\n// TODO: BULK_EJECTOR does not belong here\r\n\r\nrendererResolvers.push(\r\n\t({ item }) => {\r\n\t\tif (![Item.NAV_UNIT, Item.TURRET_CONTROLLER_NEW, Item.BULK_BAY_MARKER, Item.BULK_EJECTOR].includes(item))\r\n\t\t\treturn\r\n\r\n\t\treturn {\r\n\t\t\tdiscriminator: `${item.id}`,\r\n\t\t\tasync render() {\r\n\t\t\t\treturn [{ image: await getImage(item.id == 264 ? \"bulk_ejector\" : item.image.substring(\"item/\".length)) }]\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n)\r\n", "import { Item } from \"dsabp-js\"\r\nimport { createCanvas } from \"../canvas.js\"\r\nimport { rendererResolvers } from \"../main.js\"\r\nimport { getImage, toImage } from \"../util.js\"\r\n\r\nconst infoMap = new Map([\r\n\t[Item.TURRET_REMOTE, {\r\n\t\tbarrel: \"turret_barrel\",\r\n\t\taction: \"turret_action\",\r\n\t\tbarrelPos: { x: 78, y: 40+9 },\r\n\t\tactionPos: { x: 36, y: 40+5 }\r\n\t}],\r\n\t[Item.TURRET_REMOTE_STARTER, {\r\n\t\tbarrel: \"turret_barrel\",\r\n\t\taction: \"turret_action_rc_starter\",\r\n\t\tbarrelPos: { x: 78, y: 40+9 },\r\n\t\tactionPos: { x: 20-6, y: 40+5-6 }\r\n\t}],\r\n\t[Item.TURRET_BURST, {\r\n\t\tbarrel: \"turret_barrel_burst\",\r\n\t\taction: \"turret_action_burst\",\r\n\t\tbarrelPos: { x: 78, y: 40+9 },\r\n\t\tactionPos: { x: 40-4, y: 10 },\r\n\t}],\r\n\t[Item.TURRET_AUTO, {\r\n\t\tbarrel: \"turret_barrel\",\r\n\t\taction: \"turret_action_auto\",\r\n\t\tspinner: \"turret_auto_spinner\",\r\n\t\tbarrelPos: { x: 78, y: 33 },\r\n\t\tactionPos: { x: 40-5, y: 40-10 },\r\n\t\tsecondBarrelOffY: 10\r\n\t}],\r\n\t[Item.TURRET_ACUTE, {\r\n\t\tbarrel: \"turret_barrel_burst\",\r\n\t\taction: \"turret_action_acute\",\r\n\t\tbarrelPos: { x: 78, y: 40+9 },\r\n\t\tactionPos: { x: 20-10, y: 40+5 }\r\n\t}],\r\n\t[Item.TURRET_OBTUSE, {\r\n\t\tbarrel: \"turret_barrel_obtuse\",\r\n\t\taction: \"turret_action_obtuse\",\r\n\t\tbarrelPos: { x: 78, y: 40+6 },\r\n\t\tactionPos: { x: 40-12, y: 40-12 },\r\n\t}],\r\n])\r\n\r\nrendererResolvers.push(\r\n\t({ toRel, item }) => {\r\n\t\tconst info = infoMap.get(item)\r\n\t\tif (!info) return\r\n\r\n\t\treturn {\r\n\t\t\tdiscriminator: `${item.id}`,\r\n\t\t\tasync render() {\r\n\t\t\t\tconst imgBase = await getImage(\"turret_base\")\r\n\t\t\t\tconst imgBarrel = await getImage(info.barrel)\r\n\t\t\t\tconst imgAction = await getImage(info.action)\r\n\r\n\t\t\t\tconst canvas = createCanvas(190, imgBase.height)\r\n\t\t\t\tconst ctx = canvas.getContext(\"2d\")\r\n\r\n\t\t\t\tctx.drawImage(imgBase, -40, 0)\r\n\t\t\t\tctx.drawImage(imgBarrel, info.barrelPos.x, info.barrelPos.y)\r\n\t\t\t\tif (info.secondBarrelOffY != null)\r\n\t\t\t\t\tctx.drawImage(imgBarrel, info.barrelPos.x, info.barrelPos.y + info.secondBarrelOffY + imgBarrel.height)\r\n\t\t\t\tctx.drawImage(imgAction, info.actionPos.x, info.actionPos.y)\r\n\t\t\t\tif (info.spinner != null) {\r\n\t\t\t\t\tconst imgSpinner = await getImage(info.spinner)\r\n\t\t\t\t\tctx.drawImage(imgSpinner, info.actionPos.x, info.actionPos.y)\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn [{\r\n\t\t\t\t\timage: await toImage(canvas),\r\n\t\t\t\t\ttextureSizeOff: toRel(150, 0),\r\n\t\t\t\t\tbaseBoundOff: { x: 0.2, y: 0.2 } // original bounds are 0.2 smaller\r\n\t\t\t\t}]\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n)\r\n", "import { Item } from \"dsabp-js\"\r\nimport { createCanvas } from \"../canvas.js\"\r\nimport { rendererResolvers } from \"../main.js\"\r\nimport { getImage, toImage } from \"../util.js\"\r\n\r\nrendererResolvers.push(\r\n\t({ item }) => {\r\n\t\tif (item != Item.TURRET_CONTROLLER)\r\n\t\t\treturn\r\n\r\n\t\treturn {\r\n\t\t\tdiscriminator: `${item.id}`,\r\n\t\t\tasync render() {\r\n\t\t\t\tconst img = await getImage(\"turret_controller\")\r\n\r\n\t\t\t\tconst canvas = createCanvas(img.width, img.height)\r\n\t\t\t\tcanvas.getContext(\"2d\").drawImage(img, 0, 0)\r\n\r\n\t\t\t\treturn [{\r\n\t\t\t\t\timage: await toImage(canvas),\r\n\t\t\t\t\tbaseBoundOff: { x: 0.2, y: 0.2 }\r\n\t\t\t\t}]\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n)\r\n", "import { Item } from \"dsabp-js\"\r\nimport { createCanvas } from \"../canvas.js\"\r\nimport { rendererResolvers } from \"../main.js\"\r\nimport { getImage, toImage } from \"../util.js\"\r\n\r\nrendererResolvers.push(\r\n\t({ toRel, item }) => {\r\n\t\tif (item != Item.THRUSTER_STARTER)\r\n\t\t\treturn\r\n\r\n\t\treturn {\r\n\t\t\tdiscriminator: `${item.id}`,\r\n\t\t\tasync render() {\r\n\t\t\t\tconst img = await getImage(\"thruster_starter\")\r\n\r\n\t\t\t\tconst canvas = createCanvas(img.height - 38, img.width)\r\n\t\t\t\tconst ctx = canvas.getContext(\"2d\")\r\n\r\n\t\t\t\tctx.rotate(-90 * (Math.PI / 180))\r\n\t\t\t\tctx.drawImage(img, -40, -38)\r\n\r\n\t\t\t\treturn [{\r\n\t\t\t\t\timage: await toImage(canvas),\r\n\t\t\t\t\ttexturePosOff: toRel(-2, 0),\r\n\t\t\t\t\ttextureSizeOff: toRel(42, 0),\r\n\t\t\t\t\tbaseBoundOff: { x: 0.2, y: 0.2 }\r\n\t\t\t\t}]\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n)\r\n", "import { Item } from \"dsabp-js\"\r\nimport { createCanvas } from \"../canvas.js\"\r\nimport { rendererResolvers } from \"../main.js\"\r\nimport { getImage, toImage } from \"../util.js\"\r\n\r\nrendererResolvers.push(\r\n\t({ item, other }) => {\r\n\t\tif (item != Item.ITEM_EJECTOR)\r\n\t\t\treturn\r\n\r\n\t\tconst hullDirection = other.hullDirection\r\n\r\n\t\treturn {\r\n\t\t\tdiscriminator: `${item.id}${hullDirection ? \"\" : \"_c\"}`,\r\n\t\t\tasync render() {\r\n\t\t\t\tconst imgMount = await getImage(\"hull_mount\")\r\n\t\t\t\tconst imgEjector = await getImage(\"item_ejector_compact\")\t\t\t\t\r\n\r\n\t\t\t\tconst canvas = createCanvas(imgEjector.width, (hullDirection ? imgMount : imgEjector).height)\r\n\t\t\t\tconst ctx = canvas.getContext(\"2d\")\r\n\t\t\t\tif (hullDirection) \r\n\t\t\t\t\tctx.drawImage(imgMount, 0, 0)\r\n\t\t\t\tctx.drawImage(imgEjector, 0, hullDirection ? 40 : 0)\r\n\r\n\t\t\t\treturn [{\r\n\t\t\t\t\timage: await toImage(canvas),\r\n\t\t\t\t\t...(hullDirection ? {\r\n\t\t\t\t\t\tbaseBoundOff: { x: 0.2, y: 0.2 }\r\n\t\t\t\t\t} : null)\r\n\t\t\t\t}]\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n)\r\n", "import { Item } from \"dsabp-js\"\r\nimport { createCanvas } from \"../canvas.js\"\r\nimport { rendererResolvers } from \"../main.js\"\r\nimport { getImage, toImage } from \"../util.js\"\r\n\r\nrendererResolvers.push(\r\n\t({ toRel, item }) => {\r\n\t\tif (item != Item.THRUSTER)\r\n\t\t\treturn\r\n\r\n\t\treturn {\r\n\t\t\tdiscriminator: `${item.id}`,\r\n\t\t\tasync render() {\r\n\t\t\t\tconst imgBase = await getImage(\"thruster_base\")\r\n\t\t\t\tconst imgThruster = await getImage(\"thruster\")\r\n\r\n\t\t\t\tconst canvas = createCanvas(128, imgBase.height)\r\n\t\t\t\tconst ctx = canvas.getContext(\"2d\")\r\n\r\n\t\t\t\tctx.drawImage(imgBase, -32, 0)\r\n\t\t\t\tctx.rotate(-90 * (Math.PI / 180))\r\n\t\t\t\tctx.drawImage(imgThruster, -imgThruster.width * 2, imgThruster.height / 2 - 52)\r\n\r\n\t\t\t\treturn [{\r\n\t\t\t\t\timage: await toImage(canvas),\r\n\t\t\t\t\ttexturePosOff: toRel(-8, 0),\r\n\t\t\t\t\ttextureSizeOff: toRel(88, 0),\r\n\t\t\t\t\tbaseBoundOff: { x: 0.2, y: 0.2 } // original bounds are 0.2 smaller\r\n\t\t\t\t}]\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n)\r\n", "import { Item } from \"dsabp-js\"\r\nimport { createCanvas } from \"../canvas.js\"\r\nimport { rendererResolvers } from \"../main.js\"\r\nimport { getImage, putInCanvas, toImage } from \"../util.js\"\r\n\r\nrendererResolvers.push(\r\n\t({ item }) => {\r\n\t\tif (item != Item.MUNITIONS_SUPPLY_UNIT)\r\n\t\t\treturn\r\n\r\n\t\treturn {\r\n\t\t\tdiscriminator: `${item.id}`,\r\n\t\t\tasync render() {\r\n\t\t\t\tconst canvas = createCanvas(0, 0)\r\n\t\t\t\tconst ctx = canvas.getContext(\"2d\")\r\n\r\n\t\t\t\tconst imgMsu = await getImage(\"msu\")\r\n\t\t\t\tconst imgTop = await getImage(\"msu_top\")\r\n\r\n\t\t\t\tputInCanvas(canvas, ctx, imgMsu)\r\n\r\n\t\t\t\tctx.drawImage(imgTop,\r\n\t\t\t\t\timgMsu.width / 2 - imgTop.width / 2,\r\n\t\t\t\t\timgMsu.height / 2 - imgTop.height / 2\r\n\t\t\t\t)\r\n\r\n\t\t\t\treturn [{ image: await toImage(canvas) }]\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n)\r\n", "import { Item } from \"dsabp-js\"\r\nimport { createCanvas } from \"../canvas.js\"\r\nimport { rendererResolvers } from \"../main.js\"\r\nimport { getImage, getTinted, toImage } from \"../util.js\"\r\n\r\nrendererResolvers.push(\r\n\t({ item }) => {\r\n\t\tif (item != Item.DOOR)\r\n\t\t\treturn\r\n\r\n\t\treturn {\r\n\t\t\tdiscriminator: `${item.id}`,\r\n\t\t\tasync render() {\r\n\t\t\t\tconst img = await getTinted(getImage(item.buildInfo[0].image), \"#ababab\")\r\n\r\n\t\t\t\tconst canvas = createCanvas(img.width, img.height)\r\n\t\t\t\tcanvas.getContext(\"2d\").drawImage(img, 0, 0)\r\n\r\n\t\t\t\treturn [{\r\n\t\t\t\t\timage: await toImage(canvas),\r\n\t\t\t\t\ttextureSizeOff: { x: 0.55, y: 0 },\r\n\t\t\t\t\ttexturePosOff: { x: -0.275, y: 0 }\r\n\t\t\t\t}]\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n)\r\n", "import { Item } from \"dsabp-js\"\r\nimport { createCanvas } from \"../canvas.js\"\r\nimport { rendererResolvers } from \"../main.js\"\r\nimport { getImage, toImage } from \"../util.js\"\r\n\r\nrendererResolvers.push(\r\n\t({ item }) => {\r\n\t\tif (item != Item.ITEM_LAUNCHER)\r\n\t\t\treturn\r\n\r\n\t\treturn {\r\n\t\t\tdiscriminator: `${item.id}`,\r\n\t\t\tasync render() {\r\n\t\t\t\tconst img = await getImage(item.buildInfo[0].image)\r\n\r\n\t\t\t\tconst canvas = createCanvas(img.width, img.height)\r\n\t\t\t\tcanvas.getContext(\"2d\").drawImage(img, 0, 0)\r\n\r\n\t\t\t\treturn [{\r\n\t\t\t\t\timage: await toImage(canvas),\r\n\t\t\t\t\ttextureSizeOff: { x: 1, y: 1 },\r\n\t\t\t\t\ttexturePosOff: { x: -0.5, y: -0.5 }\r\n\t\t\t\t}]\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n)\r\n", "import \"./Fabricator.js\"\r\nimport \"./Tile.js\"\r\nimport \"./ExpandoBox.js\"\r\nimport \"./Loader.js\"\r\nimport \"./Pusher.js\"\r\nimport \"./Helm.js\"\r\nimport \"./ShieldGenerator.js\"\r\nimport \"./Hatch.js\"\r\nimport \"./SimpleNoImageItem.js\"\r\nimport \"./Turret.js\"\r\nimport \"./TurretController.js\"\r\nimport \"./ThrusterStarter.js\"\r\nimport \"./Ejector.js\"\r\nimport \"./Thruster.js\"\r\nimport \"./MunitionsSupplyUnit.js\"\r\nimport \"./Door.js\"\r\nimport \"./Launcher.js\"\r\n", "import { RendererResolver } from \"./types.js\"\r\n\r\nexport const isNode = globalThis.process?.release?.name == \"node\"\r\n\r\n//\r\nexport const rendererResolvers: RendererResolver[] = []\r\n\r\n//\r\nimport(\"./renderers/_import.js\")\r\n", "import { Blueprint, BuildCmd, ConfigCmd, FixedAngle, Item, Shape } from \"dsabp-js\"\r\nimport { Canvas, CanvasRenderingContext2D, createCanvas, Image } from \"./canvas.js\"\r\nimport { connectedTileTypes } from \"./renderers/Tile.js\"\r\nimport { RenderResult } from \"./types.js\"\r\nimport { getDrawItemData, getShipBackgroundData } from \"./util.js\"\r\n\r\nexport const MAX_SIZE = 80\r\n\r\nexport class BpRenderer {\r\n\tdeclare canvasOut: Canvas\r\n\tdeclare canvasPaint: Canvas\r\n\tdeclare canvasMain: Canvas\r\n\tdeclare canvasTop: Canvas\r\n\r\n\tdeclare ctxOut: CanvasRenderingContext2D\r\n\tdeclare ctxPaint: CanvasRenderingContext2D\r\n\tdeclare ctxMain: CanvasRenderingContext2D\r\n\tdeclare ctxTop: CanvasRenderingContext2D\r\n\r\n\r\n\twidth: number\r\n\r\n\theight: number\r\n\r\n\trenderCache: Record<string, RenderResult[]> = {}\r\n\timageCache: Record<string, Image> = {}\r\n\tknownObjectTypes = new Set([...connectedTileTypes])\r\n\tknownObjects: Item[][] = []\r\n\tsquareSize = 40\r\n\r\n\tzIndexMap = new Map<Item, number>([\r\n\t\t[Item.LOADER_NEW, 2],\r\n\t\t[Item.EXPANDO_BOX, 1],\r\n\t\t[Item.RCD_FLUX, 1],\r\n\t\t[Item.RCD_SANDBOX, 1]\r\n\t])\r\n\r\n\r\n\tcustomObjectByCoordsFn: (x: number, y: number) => Item\r\n\r\n\r\n\tconstructor(outCanvas?: Canvas) {\r\n\t\tif (outCanvas === null)\r\n\t\t\treturn\r\n\r\n\t\tthis.canvasPaint = createCanvas(0, 0)\r\n\t\tthis.ctxPaint = this.canvasPaint.getContext(\"2d\")\r\n\r\n\t\tthis.canvasMain = createCanvas(0, 0)\r\n\t\tthis.ctxMain = this.canvasMain.getContext(\"2d\")\r\n\r\n\t\tthis.canvasTop = createCanvas(0, 0)\r\n\t\tthis.ctxTop = this.canvasTop.getContext(\"2d\")\r\n\r\n\t\tthis.canvasOut = outCanvas ?? createCanvas(0, 0)\r\n\t\tthis.ctxOut = this.canvasOut.getContext(\"2d\")\r\n\t}\r\n\r\n\r\n\tsetSize(width: number, height: number, exteriorMargin = 3.75) {\r\n\t\tif (width < 1) width = 1\r\n\t\tif (height < 1) height = 1\r\n\r\n\t\tthis.width = width\r\n\t\tthis.height = height\r\n\r\n\t\tif (this.canvasMain) {\r\n\t\t\tconst marginPx = Math.ceil(exteriorMargin * this.squareSize) // translate hates decimals\r\n\t\t\twidth = width * this.squareSize + (marginPx * 2)\r\n\t\t\theight = height * this.squareSize + (marginPx * 2)\r\n\r\n\t\t\tthis.canvasPaint.width = this.canvasMain.width = this.canvasTop.width = width\r\n\t\t\tthis.canvasPaint.height = this.canvasMain.height = this.canvasTop.height = height\r\n\t\t\tthis.ctxTop.translate(marginPx, marginPx)\r\n\t\t\tthis.ctxMain.translate(marginPx, marginPx)\r\n\t\t\tthis.ctxPaint.translate(marginPx, marginPx)\r\n\r\n\t\t\tif (this.canvasOut) {\r\n\t\t\t\tthis.canvasOut.width = width\r\n\t\t\t\tthis.canvasOut.height = height\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\ttoRel(x: number, y: number) {\r\n\t\treturn { x: x / 40, y: y / 40 }\r\n\t}\r\n\r\n\r\n\tasync render(bp: Blueprint, exteriorMargin = 3.75) {\r\n\t\tconst startTime = performance.now()\r\n\r\n\t\tthis.setSize(bp.width, bp.height, exteriorMargin)\r\n\t\tconst bgData = await getShipBackgroundData(this, bp)\r\n\t\tfor (let x = 0; x < bgData.tiles.length; x++) {\r\n\t\t\tfor (let y = 0; y < bgData.tiles[x].length; y++) {\r\n\t\t\t\tconst tileData = bgData.tiles[x][y];\r\n\t\t\t\t(tileData.type == \"paint\" ? this.ctxPaint : this.ctxMain).drawImage(tileData.image, x * this.squareSize, y * this.squareSize, this.squareSize, this.squareSize)\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst drawOperations: { item: Item, x: number, y: number, shape: Shape, config: ConfigCmd, hullDirection: FixedAngle, zIndex?: number }[] = []\r\n\r\n\t\tconst addDrawOperation = (item: Item, x: number, y: number, shape: Shape, config: ConfigCmd) => {\r\n\t\t\tconst bgTileType = bgData.tiles[x]?.[y]?.type\r\n\t\t\tdrawOperations.push({\r\n\t\t\t\titem, x, y, shape, config,\r\n\t\t\t\thullDirection: (\r\n\t\t\t\t\tbgTileType && bgTileType != \"paint\" && item.buildInfo?.[0].allow_world\r\n\t\t\t\t\t\t? bgTileType == \"wallH\"\r\n\t\t\t\t\t\t\t? (y == 0 ? FixedAngle.DOWN : FixedAngle.UP)\r\n\t\t\t\t\t\t\t: bgTileType == \"wallV\"\r\n\t\t\t\t\t\t\t\t? (x == 0 ? FixedAngle.LEFT : FixedAngle.RIGHT)\r\n\t\t\t\t\t\t\t\t: y == 0 ? FixedAngle.DOWN : FixedAngle.UP // corners\r\n\t\t\t\t\t\t: null\r\n\t\t\t\t),\r\n\t\t\t\tzIndex: (this.zIndexMap.get(item) ?? 0) + (item.buildInfo?.[0].allow_world ? 3 : 0)\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tlet config: ConfigCmd\r\n\t\tfor (const cmd of bp.commands) {\r\n\t\t\tif (cmd instanceof ConfigCmd) {\r\n\t\t\t\tconfig = cmd\r\n\t\t\t\tcontinue\r\n\t\t\t} else if (cmd instanceof BuildCmd) {\r\n\t\t\t\tif (cmd.bits) {\r\n\t\t\t\t\tlet bitI = 0\r\n\t\t\t\t\tfor (const bit of cmd.bits) {\r\n\t\t\t\t\t\tif (bit)\r\n\t\t\t\t\t\t\taddDrawOperation(cmd.item, cmd.x + bitI, cmd.y, cmd.shape, config)\r\n\t\t\t\t\t\tbitI++\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\taddDrawOperation(cmd.item, cmd.x, cmd.y, cmd.shape, config)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (const op of drawOperations.sort((a, b) => (a.zIndex ?? 0) - (b.zIndex ?? 0)))\r\n\t\t\tawait drawItem(this, op.item, op.x, op.y, op.shape, op.config, op.hullDirection)\r\n\r\n\t\tif (this.ctxOut) this.draw()\r\n\t\treturn performance.now() - startTime\r\n\t}\r\n\r\n\tdraw() {\r\n\t\tthis.ctxOut.drawImage(this.canvasPaint, 0, 0)\r\n\t\tthis.ctxOut.drawImage(this.canvasMain, 0, 0)\r\n\t\tthis.ctxOut.drawImage(this.canvasTop, 0, 0)\r\n\t}\r\n\r\n\tgetKnownObject(x: number, y: number) {\r\n\t\tif (this.customObjectByCoordsFn != null)\r\n\t\t\treturn this.customObjectByCoordsFn(x, y)\r\n\t\treturn this.knownObjects[x]?.[y]\r\n\t}\r\n\r\n\tclearCache() {\r\n\t\tfor (const key in this.imageCache)\r\n\t\t\tdelete this.imageCache[key]\r\n\t\tfor (const key in this.renderCache)\r\n\t\t\tdelete this.renderCache[key]\r\n\t}\r\n\r\n\tuseCacheOf(bpRenderer: BpRenderer) {\r\n\t\tthis.imageCache = bpRenderer.imageCache\r\n\t\tthis.renderCache = bpRenderer.renderCache\r\n\t}\r\n}\r\n\r\nasync function drawItem(main: BpRenderer, item: Item, x: number, y: number, shape: Shape, config: ConfigCmd, hullDirection?: FixedAngle) {\r\n\tfor (const data of await getDrawItemData(main, item, x, y, shape, config, hullDirection)) {\r\n\t\tconst { layer, image, angle, sx, sy, sw, sh, pos, drawPosOff, off, size } = data\r\n\t\tconst ctx = (layer ?? \"main\") == \"main\" ? main.ctxMain : main.ctxTop\r\n\r\n\t\tconst drawPos = { x: pos.x + drawPosOff.x, y: pos.y + drawPosOff.y }\r\n\r\n\t\tif (hullDirection || angle != null) {\r\n\t\t\tconst ang = hullDirection ? (-hullDirection.enumValue * 90) : angle\r\n\t\t\tctx.save()\r\n\t\t\tctx.translate(drawPos.x + off.x, drawPos.y + off.y)\r\n\t\t\tctx.rotate(ang * (Math.PI / 180))\r\n\r\n\t\t\tconst [x, y, w, h] =\r\n\t\t\t\thullDirection\r\n\t\t\t\t\t? Math.abs(ang) % 180 != 0\r\n\t\t\t\t\t\t? [-off.y, -off.x, size.h, size.w]\r\n\t\t\t\t\t\t: [-off.x, -off.y, size.w, size.h]\r\n\t\t\t\t\t: [-off.x, -off.y, size.w, size.h]\r\n\r\n\t\t\tctx.drawImage(image, sx ?? 0, sy ?? 0, sw ?? image.width, sh ?? image.height, x, y, w, h)\r\n\t\t\tctx.restore()\r\n\t\t} else {\r\n\t\t\tctx.drawImage(image, sx ?? 0, sy ?? 0, sw ?? image.width, sh ?? image.height, drawPos.x, drawPos.y, size.w, size.h)\r\n\t\t}\r\n\t}\r\n}\r\n", "/*! THIS PROJECT IS NOT DONE, NOR OPTIMIZED */\r\nimport { Item } from \"dsabp-js\"\r\nimport \"./main.js\"\r\n\r\nexport * from \"./BpRenderer.js\"\r\nexport { connectedTileTypes } from \"./renderers/Tile.js\"\r\nexport * from \"./util.js\"\r\n\r\nexport let imagesPath: string = \"\"\r\nexport function setImagesPath(path: string) {\r\n\timagesPath = path\r\n}\r\n\r\nexport let customImagePathHandler: (path: string) => string\r\nexport function setCustomImagePathHandler(fn: typeof customImagePathHandler) {\r\n\tcustomImagePathHandler = fn\r\n}\r\n\r\n// some workarounds\r\nItem.DOOR.buildInfo.splice(0, 2, { bounds: { x: 0.45, y: 2 }, snap_x: true, snap_y: true, offset: { x: 0, y: 0.5 }, image: \"door_full\", build_angle: \"Fixed\", image_only: true })\r\nItem.ITEM_LAUNCHER.buildInfo[0].build_angle = \"Any\"\r\nItem.RCD_FLUX.buildInfo[0].build_angle = \"Any\"\r\nItem.RCD_SANDBOX.buildInfo[0].build_angle = \"Any\"\r\n"],
  "mappings": "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",
  "names": ["node_createCanvas", "node_loadImage", "i", "x", "y", "i", "import_dsabp_js", "import_promises", "import_dsabp_js", "import_dsabp_js", "import_dsabp_js", "baseColor", "import_dsabp_js", "import_dsabp_js", "import_dsabp_js", "modeColors", "import_dsabp_js", "import_dsabp_js", "import_dsabp_js", "import_dsabp_js", "import_dsabp_js", "import_dsabp_js", "import_dsabp_js", "import_dsabp_js", "import_dsabp_js", "x", "y", "import_dsabp_js", "config", "import_dsabp_js"]
}
