Honey Village: six model builds + hub frontend, Dockerized for Dokploy

This commit is contained in:
2026-07-15 10:50:12 -04:00
commit 67253bded5
523 changed files with 58879 additions and 0 deletions
+43
View File
@@ -0,0 +1,43 @@
// 最终清扫:任何「含透明像素的瓦片」都不得出现在任何地图的 ground 层(否则露黑底)
import puppeteer from 'puppeteer-core';
import fs from 'node:fs';
const browser = await puppeteer.launch({ executablePath: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome', headless: true });
const page = await browser.newPage();
// 把 tileset.png 读成 dataURL 注入页面分析 alpha
const b64 = fs.readFileSync('public/assets/tileset.png').toString('base64');
const transparentIds = await page.evaluate(async (data) => {
const img = new Image();
await new Promise((res) => { img.onload = res; img.src = data; });
const c = document.createElement('canvas');
c.width = img.width; c.height = img.height;
const ctx = c.getContext('2d');
ctx.drawImage(img, 0, 0);
const d = ctx.getImageData(0, 0, img.width, img.height).data;
const out = [];
for (let id = 0; id < 128; id++) {
const ox = (id % 16) * 16, oy = Math.floor(id / 16) * 16;
let trans = false;
for (let y = 0; y < 16 && !trans; y++)
for (let x = 0; x < 16; x++)
if (d[((oy + y) * img.width + ox + x) * 4 + 3] < 255) { trans = true; break; }
if (trans) out.push(id);
}
return out;
}, 'data:image/png;base64,' + b64);
await browser.close();
console.log('含透明像素的瓦片 id:', transparentIds.join(','));
const maps = ['house','plaza','bakery','shop','clinic','lake','field','well','fog','white'];
let bad = 0;
for (const key of maps) {
const m = JSON.parse(fs.readFileSync(`public/assets/maps/${key}.json`, 'utf8'));
const g = m.layers.find((l) => l.name === 'ground');
const hits = new Set();
for (const gid of g.data) {
if (gid === 0) { hits.add('EMPTY'); continue; }
const id = gid - 1;
if (transparentIds.includes(id)) hits.add(id);
}
if (hits.size) { bad++; console.log(`FAIL ${key}: ground 层含透明瓦片/空格 ->`, [...hits].join(',')); }
else console.log(`OK ${key}`);
}
process.exit(bad ? 1 : 0);