Feat/env-manager #1

Merged
math-pixel merged 46 commits from feat/env-manager into develop 2026-05-11 15:23:32 +00:00
Showing only changes of commit ee41361a90 - Show all commits
+32 -7
View File
@@ -233,7 +233,9 @@ const saveCinematicManifestPlugin = (): Plugin => ({
try {
const data = JSON.parse(Buffer.concat(chunks).toString()) as unknown;
parseCinematicManifestData(data);
const manifest = parseCinematicManifestData(data);
const dialogueManifest = await loadDialogueManifestData();
validateCinematicDialogueCues(manifest, dialogueManifest);
const manifestPath = path.resolve(__dirname, "public/cinematics.json");
await fs.promises.writeFile(
@@ -340,12 +342,7 @@ interface DialogueValidationResult extends JsonObject {
async function validateDialogueAssets(): Promise<DialogueValidationResult> {
const errors: string[] = [];
const warnings: string[] = [];
const manifestPath = path.resolve(
__dirname,
"public/sounds/dialogue/dialogues.json",
);
const manifestContent = await fs.promises.readFile(manifestPath, "utf8");
const manifest = parseDialogueManifestData(JSON.parse(manifestContent));
const manifest = await loadDialogueManifestData();
const subtitleCueCache = new Map<string, Set<number>>();
@@ -396,6 +393,15 @@ async function validateDialogueAssets(): Promise<DialogueValidationResult> {
};
}
async function loadDialogueManifestData(): Promise<DialogueManifestData> {
const manifestPath = path.resolve(
__dirname,
"public/sounds/dialogue/dialogues.json",
);
const manifestContent = await fs.promises.readFile(manifestPath, "utf8");
return parseDialogueManifestData(JSON.parse(manifestContent));
}
function parseDialogueManifestData(data: unknown): DialogueManifestData {
if (!isRecord(data) || data.version !== 1) {
throw new Error("Invalid dialogue manifest");
@@ -530,6 +536,25 @@ function parseCinematicData(data: unknown): CinematicData {
return cinematic;
}
function validateCinematicDialogueCues(
cinematicManifest: CinematicManifestData,
dialogueManifest: DialogueManifestData,
): void {
const dialogueIds = new Set(
dialogueManifest.dialogues.map((dialogue) => dialogue.id),
);
for (const cinematic of cinematicManifest.cinematics) {
for (const cue of cinematic.dialogueCues ?? []) {
if (!dialogueIds.has(cue.dialogueId)) {
throw new Error(
`Cinematic ${cinematic.id} references unknown dialogue ${cue.dialogueId}`,
);
}
}
}
}
function parseCinematicDialogueCueData(
data: unknown,
): CinematicDialogueCueData {