Update NPC entity reading to include dialogues and legacy support
This commit is contained in:
@@ -3000,12 +3000,34 @@ function readSceneEntryEntity(value: unknown, label: string): EntityInstance {
|
|||||||
return entity;
|
return entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
function readNpcEntity(value: unknown, label: string): EntityInstance {
|
function readNpcEntity(
|
||||||
|
value: unknown,
|
||||||
|
label: string,
|
||||||
|
legacyProjectDialogues: ProjectDialogueLibrary
|
||||||
|
): EntityInstance {
|
||||||
if (!isRecord(value)) {
|
if (!isRecord(value)) {
|
||||||
throw new Error(`${label} must be an object.`);
|
throw new Error(`${label} must be an object.`);
|
||||||
}
|
}
|
||||||
|
|
||||||
const kind = expectLiteralString(value.kind, "npc", `${label}.kind`);
|
const kind = expectLiteralString(value.kind, "npc", `${label}.kind`);
|
||||||
|
const dialogueId = readOptionalDialogueResourceId(
|
||||||
|
value.dialogueId,
|
||||||
|
`${label}.dialogueId`
|
||||||
|
);
|
||||||
|
const dialogues =
|
||||||
|
value.dialogues === undefined
|
||||||
|
? dialogueId === null
|
||||||
|
? []
|
||||||
|
: (() => {
|
||||||
|
const legacyDialogue =
|
||||||
|
legacyProjectDialogues.dialogues[dialogueId] ?? null;
|
||||||
|
return legacyDialogue === null ? [] : [legacyDialogue];
|
||||||
|
})()
|
||||||
|
: readNpcDialogues(
|
||||||
|
value.dialogues,
|
||||||
|
`${label}.dialogues`,
|
||||||
|
legacyProjectDialogues
|
||||||
|
);
|
||||||
const entity = createNpcEntity({
|
const entity = createNpcEntity({
|
||||||
id: expectString(value.id, `${label}.id`),
|
id: expectString(value.id, `${label}.id`),
|
||||||
name: readOptionalEntityName(value.name, `${label}.name`),
|
name: readOptionalEntityName(value.name, `${label}.name`),
|
||||||
@@ -3027,10 +3049,15 @@ function readNpcEntity(value: unknown, label: string): EntityInstance {
|
|||||||
value.modelAssetId === undefined || value.modelAssetId === null
|
value.modelAssetId === undefined || value.modelAssetId === null
|
||||||
? undefined
|
? undefined
|
||||||
: expectString(value.modelAssetId, `${label}.modelAssetId`),
|
: expectString(value.modelAssetId, `${label}.modelAssetId`),
|
||||||
dialogueId: readOptionalDialogueResourceId(
|
dialogues,
|
||||||
value.dialogueId,
|
defaultDialogueId:
|
||||||
`${label}.dialogueId`
|
value.defaultDialogueId === undefined
|
||||||
),
|
? dialogueId
|
||||||
|
: readOptionalDialogueResourceId(
|
||||||
|
value.defaultDialogueId,
|
||||||
|
`${label}.defaultDialogueId`
|
||||||
|
),
|
||||||
|
dialogueId,
|
||||||
collider: readNpcColliderSettings(value.collider, `${label}.collider`)
|
collider: readNpcColliderSettings(value.collider, `${label}.collider`)
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user