From ef26eabfe843b6ef4ec93cfb1a2a9444c72f9264 Mon Sep 17 00:00:00 2001 From: Christopher Monsanto Date: Fri, 7 Apr 2023 03:09:15 -0400 Subject: [PATCH] smogdex spritesheet: use toAlias instead of toPSID Just Ship It --- tools/smogdexspritesheet/index.ts | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/tools/smogdexspritesheet/index.ts b/tools/smogdexspritesheet/index.ts index 468782f0..f56a0851 100755 --- a/tools/smogdexspritesheet/index.ts +++ b/tools/smogdexspritesheet/index.ts @@ -17,32 +17,45 @@ let result = await run({ src: program.args }); -function toPSID(s:string) { - return s.toLowerCase().replace(/[^a-z0-9]+/g, ''); +const spaceRe = /[ _]+/g +const removeRe = /[^a-z0-9-]/g + +export function toAlias(s: string) { + s = s.toLowerCase() + s = s.replace(spaceRe, "-") + s = s.replace(removeRe, "") + return s } let sprites = new Map; for (let [filename, sprite] of Object.entries(result.coordinates)) { let parsed = spritedata.parseFilename(path.parse(filename).name); if (parsed.extension) { - sprites.set(toPSID(parsed.name),sprite); + sprites.set(toAlias(parsed.name),sprite); continue; } let data = spritedata.get(parsed.id); if (data.type === 'specie') { - sprites.set(toPSID(data.base + data.forme), sprite); + // TODO would like to use toPSID here, mess with it later. + sprites.set(toAlias(data.base + (data.forme ? "-" + data.forme : "")), sprite); } else { for (let name of data.names) { - sprites.set(toPSID(name), sprite); + sprites.set(toAlias(name), sprite); } } } let stylesheet = ""; for (let [id, sprite] of sprites) { - stylesheet += `.sprite-${id}{background-position:${sprite.x}px ${sprite.y}px;width:${sprite.width}px;height:${sprite.height}px}`; + // webp reference depends on optimization in Tupfile, fix it later, just need to ship + stylesheet += `.sprite-${id} { + background-image: url("./spritesheet.webp"); + background-repeat: no-repeat; + background-position:-${sprite.x}px -${sprite.y}px; + width:${sprite.width}px; + height:${sprite.height}px + }`; } fs.writeFileSync(program.image, result.image, 'binary'); fs.writeFileSync(program.stylesheet, stylesheet); -