update: cinematic references
This commit is contained in:
+32
-7
@@ -233,7 +233,9 @@ const saveCinematicManifestPlugin = (): Plugin => ({
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
const data = JSON.parse(Buffer.concat(chunks).toString()) as unknown;
|
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");
|
const manifestPath = path.resolve(__dirname, "public/cinematics.json");
|
||||||
await fs.promises.writeFile(
|
await fs.promises.writeFile(
|
||||||
@@ -340,12 +342,7 @@ interface DialogueValidationResult extends JsonObject {
|
|||||||
async function validateDialogueAssets(): Promise<DialogueValidationResult> {
|
async function validateDialogueAssets(): Promise<DialogueValidationResult> {
|
||||||
const errors: string[] = [];
|
const errors: string[] = [];
|
||||||
const warnings: string[] = [];
|
const warnings: string[] = [];
|
||||||
const manifestPath = path.resolve(
|
const manifest = await loadDialogueManifestData();
|
||||||
__dirname,
|
|
||||||
"public/sounds/dialogue/dialogues.json",
|
|
||||||
);
|
|
||||||
const manifestContent = await fs.promises.readFile(manifestPath, "utf8");
|
|
||||||
const manifest = parseDialogueManifestData(JSON.parse(manifestContent));
|
|
||||||
|
|
||||||
const subtitleCueCache = new Map<string, Set<number>>();
|
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 {
|
function parseDialogueManifestData(data: unknown): DialogueManifestData {
|
||||||
if (!isRecord(data) || data.version !== 1) {
|
if (!isRecord(data) || data.version !== 1) {
|
||||||
throw new Error("Invalid dialogue manifest");
|
throw new Error("Invalid dialogue manifest");
|
||||||
@@ -530,6 +536,25 @@ function parseCinematicData(data: unknown): CinematicData {
|
|||||||
return cinematic;
|
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(
|
function parseCinematicDialogueCueData(
|
||||||
data: unknown,
|
data: unknown,
|
||||||
): CinematicDialogueCueData {
|
): CinematicDialogueCueData {
|
||||||
|
|||||||
Reference in New Issue
Block a user