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'
|
|||
|
);
|
|||
|
})();
|