Files
aklive2d/packages/operator/libs/builder.ts

56 lines
1.5 KiB
TypeScript

import path from 'node:path'
import config from '@aklive2d/config'
import { file } from '@aklive2d/libs'
import operators, {
DIST_DIR,
generateAssetsJson,
OPERATOR_SOURCE_FOLDER,
} from '../index.ts'
import { getDistFolder, getExtractedFolder } from './utils.ts'
export const build = async (namesToBuild: string[]) => {
const names = !namesToBuild.length ? Object.keys(operators) : namesToBuild
console.log('Generating assets for', names.length, 'operators')
for (const name of names) {
await generateAssets(name)
copyVoices(name)
}
copyLogos()
}
const copyVoices = (name: string) => {
file.symlinkAll(
path.join(OPERATOR_SOURCE_FOLDER, name, config.dir_name.voice.main),
path.join(DIST_DIR, config.dir_name.voice.main, name)
)
}
const copyLogos = () => {
file.symlink(
path.join(OPERATOR_SOURCE_FOLDER, config.module.operator.logos_assets),
path.join(DIST_DIR, config.module.operator.logos)
)
}
const generateAssets = async (name: string) => {
const extractedDir = getExtractedFolder(name)
const outDir = getDistFolder(name)
file.rmdir(outDir)
file.mkdir(outDir)
const portraitFilename = `${operators[name].portrait_filename}.png`
await file.copy(
path.join(extractedDir, portraitFilename),
path.join(getDistFolder(name), portraitFilename)
)
await generateAssetsJson(
operators[name].filename,
extractedDir,
getDistFolder(name),
{
isSP: operators[name].isSP,
}
)
}