mirror of
https://github.com/unanmed/HumanBreak.git
synced 2025-01-18 20:09:27 +08:00
86 lines
3.0 KiB
TypeScript
86 lines
3.0 KiB
TypeScript
import fs from 'fs/promises';
|
||
|
||
(async function () {
|
||
// 1. 声明道具
|
||
const item = await fs.readFile('./public/project/items.js', 'utf-8');
|
||
const itemData = JSON.parse(item.split('\n').slice(1).join('')) as any;
|
||
|
||
let itemDec = 'interface ItemDeclaration {\n';
|
||
for (const id in itemData) {
|
||
itemDec += ` ${id}: '${itemData[id].cls}';\n`;
|
||
}
|
||
itemDec += '}';
|
||
|
||
// 2. 声明公共事件
|
||
const event = await fs.readFile('./public/project/events.js', 'utf-8');
|
||
const eventData = JSON.parse(event.split('\n').slice(1).join('')) as any;
|
||
|
||
let eventDec = 'type EventDeclaration = \n';
|
||
for (const id in eventData.commonEvent) {
|
||
eventDec += ` | '${id}'\n`;
|
||
}
|
||
|
||
// 3. 声明数字id映射与cls映射
|
||
const map = await fs.readFile('./public/project/maps.js', 'utf-8');
|
||
const mapData = JSON.parse(map.split('\n').slice(1).join('')) as any;
|
||
|
||
let id2num = 'interface IdToNumber {\n';
|
||
let num2id = 'interface NumberToId {\n';
|
||
let id2cls = 'interface IdToCls {\n';
|
||
for (const num in mapData) {
|
||
const { id, cls } = mapData[num];
|
||
id2num += ` ${id}: ${num};\n`;
|
||
num2id += ` ${num}: '${id}';\n`;
|
||
id2cls += ` ${id}: '${cls}';\n`;
|
||
}
|
||
id2cls += '}';
|
||
id2num += '}';
|
||
num2id += '}';
|
||
|
||
// 4. 声明楼层id,图片,动画,音效,文件别名,背景音乐,字体
|
||
const data = await fs.readFile('./public/project/data.js', 'utf-8');
|
||
const d = (JSON.parse(data.split('\n').slice(1).join('')) as any).main;
|
||
|
||
let floorId = 'type FloorIds =\n';
|
||
let imgs = 'type ImageIds =\n';
|
||
let anis = 'type AnimationIds =\n';
|
||
let sounds = 'type SoundIds =\n';
|
||
let names = 'interface NameMap {\n';
|
||
let bgms = 'type BgmIds =\n';
|
||
let fonts = 'type FontIds =\n';
|
||
|
||
floorId += d.floorIds.map((v: string) => ` | '${v}'\n`).join('');
|
||
imgs += d.images.map((v: string) => ` | '${v}'\n`).join('');
|
||
anis += d.animates.map((v: string) => ` | '${v}'\n`).join('');
|
||
sounds += d.sounds.map((v: string) => ` | '${v}'\n`).join('');
|
||
bgms += d.bgms.map((v: string) => ` | '${v}'\n`).join('');
|
||
fonts += d.fonts.map((v: string) => ` | '${v}'\n`).join('');
|
||
for (const name in d.nameMap) {
|
||
names += ` '${name}': '${d.nameMap[name]}';\n`;
|
||
}
|
||
names += '}';
|
||
|
||
// 5. 写入文件
|
||
await fs.writeFile('./src/source/cls.d.ts', id2cls, 'utf-8');
|
||
await fs.writeFile('./src/source/events.d.ts', eventDec, 'utf-8');
|
||
await fs.writeFile('./src/source/items.d.ts', itemDec, 'utf-8');
|
||
await fs.writeFile(
|
||
'./src/source/maps.d.ts',
|
||
`${id2num}\n${num2id}`,
|
||
'utf-8'
|
||
);
|
||
await fs.writeFile(
|
||
'./src/source/data.d.ts',
|
||
`
|
||
${floorId}
|
||
${d.images.length > 0 ? imgs : 'type ImageIds = never\n'}
|
||
${d.animates.length > 0 ? anis : 'type AnimationIds = never\n'}
|
||
${d.sounds.length > 0 ? sounds : 'type SoundIds = never\n'}
|
||
${d.bgms.length > 0 ? bgms : 'type BgmIds = never\n'}
|
||
${d.fonts.length > 0 ? fonts : 'type FontIds = never\n'}
|
||
${names}
|
||
`,
|
||
'utf-8'
|
||
);
|
||
})();
|