cbt-game-generator
Version:
Configuration generator for CBT animation apps
82 lines (72 loc) • 3.04 kB
text/typescript
import * as fs from 'fs';
import * as path from 'path';
export class VariantConfigGenerator {
private subLoDir: string;
constructor(
private gamePath: string,
private gameName: string,
private numberOfVariants: number,
private subLoIndex: number
) {
this.subLoDir = path.join(this.gamePath, 'configuration', 'variants-config', `sub-lo-${this.subLoIndex + 1}`);
}
generate(): void {
fs.mkdirSync(this.subLoDir, { recursive: true });
this.generateVariantsBaseConfig();
this.generateVariantFiles();
}
private generateVariantsBaseConfig(): void {
const baseConfigContent = `import { ESourcesType } from "../../../../../../shared/constants/resources";
import { E${this.gameName} } from "../../../constants/variantsConfig";
import { generateRandomSelections } from "../../game-config/function";
import { assetLottieWebpMappingSubLo${this.subLoIndex + 1} } from "../../../constants/variantsConfig";
export const variantsBaseConfigSubLo${this.subLoIndex + 1} = generateRandomSelections(
assetLottieWebpMappingSubLo${this.subLoIndex + 1},
"sub-lo-${this.subLoIndex + 1}"
);`;
fs.writeFileSync(path.join(this.subLoDir, `variantsBaseConfigSubLo${this.subLoIndex + 1}.ts`), baseConfigContent);
}
private generateVariantFiles(): void {
const startVariant = this.subLoIndex * this.numberOfVariants + 1;
for (let variantIndex = 0; variantIndex < this.numberOfVariants; variantIndex++) {
const variantNumber = startVariant + variantIndex;
const variantFile = `${this.gameName}V${variantNumber}.ts`;
const variantTsContent = `import { shuffleArray } from "../../../../../../../utils/functions";
import {
commonAssets,
commonProps,
} from "../../../../../../shared/constants/commonConfiguration";
import {
E${this.gameName}Variants,
${this.gameName.toLowerCase()}ConfigV${this.subLoIndex + 1},
} from "../../../constants/variantsConfig";
import { I${this.gameName} } from "../../../types/configuration";
import { generateActions } from "../../game-config/function";
import {
${this.gameName}BaseProps,
assetsBaseConfig,
} from "../../game-config/gameBaseConfig";
import { variantsBaseConfigSubLo${this.subLoIndex + 1} } from "./variantsBaseConfigSubLo${this.subLoIndex + 1}";
const actions = shuffleArray(generateActions("v${variantIndex + 1}", ${this.gameName.toLowerCase()}ConfigV${this.subLoIndex + 1}, true));
export const ${this.gameName}V${variantNumber}: I${this.gameName}<E${this.gameName}Variants.V${variantNumber}> = {
...commonProps,
...${this.gameName}BaseProps,
variantId: E${this.gameName}Variants.V${variantNumber},
assets: {
...commonAssets,
...assetsBaseConfig,
...variantsBaseConfigSubLo${this.subLoIndex + 1},
},
segments: {
speechInteractionDuration: 3,
speechSecondInteractionDuration: 2,
actions: JSON.parse(JSON.stringify(actions)),
},
assetDuration: 0,
criteria: 1,
listOfAssets: [],
};`;
fs.writeFileSync(path.join(this.subLoDir, variantFile), variantTsContent);
}
}
}