From 41beb6bc5b4035fedc587a4251b6fb671fdff365 Mon Sep 17 00:00:00 2001 From: han4wluc Date: Mon, 30 Mar 2026 15:18:29 +0800 Subject: [PATCH] fix: share line completion in layout template data --- package.json | 2 +- src/stores/constructRenderState.js | 58 ++++++++++++++++++++++++++---- 2 files changed, 53 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 927135c..8b603c1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "route-engine-js", - "version": "0.3.6", + "version": "0.3.7", "description": "A lightweight Visual Novel engine built in JavaScript for creating interactive narrative games with branching storylines", "repository": { "type": "git", diff --git a/src/stores/constructRenderState.js b/src/stores/constructRenderState.js index 71a5658..4982ad4 100644 --- a/src/stores/constructRenderState.js +++ b/src/stores/constructRenderState.js @@ -748,6 +748,7 @@ const getStoryContainer = (elements = []) => { const createLayoutTemplateData = ({ variables, saveSlots = [], + isLineCompleted, autoMode, skipMode, canRollback, @@ -755,6 +756,7 @@ const createLayoutTemplateData = ({ return { variables, saveSlots, + isLineCompleted, autoMode, skipMode, canRollback, @@ -989,6 +991,10 @@ export const addBackgroundOrCg = ( isLineCompleted, skipTransitionsAndAnimations, variables, + autoMode, + skipMode, + canRollback, + saveSlots = [], }, ) => { const { elements, animations } = state; @@ -1043,7 +1049,14 @@ export const addBackgroundOrCg = ( }; const processedContainer = parseAndRender( bgContainer, - { variables }, + createLayoutTemplateData({ + variables, + saveSlots, + isLineCompleted, + autoMode, + skipMode, + canRollback, + }), { functions: jemplFunctions }, ); storyContainer.children.push( @@ -1224,6 +1237,10 @@ export const addVisuals = ( isLineCompleted, skipTransitionsAndAnimations, variables, + autoMode, + skipMode, + canRollback, + saveSlots = [], }, ) => { const { elements, animations } = state; @@ -1326,7 +1343,14 @@ export const addVisuals = ( }; const processedContainer = parseAndRender( visualContainer, - { variables }, + createLayoutTemplateData({ + variables, + saveSlots, + isLineCompleted, + autoMode, + skipMode, + canRollback, + }), { functions: jemplFunctions }, ); storyContainer.children.push( @@ -1523,6 +1547,11 @@ export const addChoices = ( isLineCompleted, skipTransitionsAndAnimations, screen, + variables, + autoMode, + skipMode, + canRollback, + saveSlots = [], }, ) => { const { elements, animations } = state; @@ -1549,11 +1578,25 @@ export const addChoices = ( const layout = resources?.layouts[presentationState.choice.resourceId]; if (layout && layout.elements) { const wrappedTemplate = { elements: layout.elements }; - const result = parseAndRender(wrappedTemplate, { - choice: { - items: presentationState.choice?.items ?? [], + const result = parseAndRender( + wrappedTemplate, + { + ...createLayoutTemplateData({ + variables, + saveSlots, + isLineCompleted, + autoMode, + skipMode, + canRollback, + }), + choice: { + items: presentationState.choice?.items ?? [], + }, }, - }); + { + functions: jemplFunctions, + }, + ); const choiceElements = resolveLayoutResourceIds( result?.elements, resources, @@ -1600,6 +1643,7 @@ export const addControl = ( presentationState, resources = {}, variables, + isLineCompleted, autoMode, skipMode, canRollback, @@ -1644,6 +1688,7 @@ export const addControl = ( templateData: createLayoutTemplateData({ variables, saveSlots, + isLineCompleted, autoMode, skipMode, canRollback, @@ -1784,6 +1829,7 @@ export const addLayout = ( templateData: createLayoutTemplateData({ variables, saveSlots, + isLineCompleted, autoMode, skipMode, canRollback,