From d35d4824a05de15a7e7d741362946c87174b8059 Mon Sep 17 00:00:00 2001 From: p11 Date: Fri, 18 Apr 2025 21:06:14 +0200 Subject: [PATCH] Initial version of image rendering --- src/main.rs | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/main.rs b/src/main.rs index 86775bc..bfe908d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -605,6 +605,25 @@ fn handle_relative_connection( .map(|parent| parse_config(&parent.with_extension("vng")).ok()) .unwrap_or_default(); + fn render_scene(settings: &PlayerSettings, name: &str, output: &mut Vec) { + for object in &settings.objects.objects { + let Some(image_set) = object.image.get(name) else { + continue; + }; + + for image in &settings.images.images[image_set] { + let Some(image) = image.get_ref(name) else { + continue; + }; + + let _ = writeln!( + output, + "" + ); + } + } + } + fn render_novel( mut config_map: IndexMap, Box>, pk_path: &Path, @@ -654,6 +673,7 @@ fn handle_relative_connection( let dialogs = parse_map(pk_path, &mut settings_context)?; + let mut scenes = Vec::new(); let mut sections = Vec::new(); for dialog_sequence in dialogs { @@ -679,6 +699,10 @@ fn handle_relative_connection( } } + let mut scene_data = Vec::new(); + render_scene(&player_settings, &block.name, &mut scene_data); + scenes.push(unsafe { String::from_utf8_unchecked(scene_data) }); + let section_html = if block.lines.is_empty() { html! {} } else { @@ -711,6 +735,13 @@ fn handle_relative_connection( let html = html! { div id="story-container" { div class="textbox-container" { + @for (index, scene) in scenes.iter().enumerate() { + div class="scene-section" data-section-index=(index) + style=(format!("display: {};", if index == 0 { "block" } else { "none" })) { + (maud::PreEscaped(scene)) + } + } + div class="textbox-content" { @for (index, section) in sections.iter().enumerate() { div class="story-section" data-section-index=(index) @@ -854,6 +885,9 @@ fn handle_relative_connection( document.querySelectorAll('.story-section').forEach((el, index) => { el.style.display = index === currentSection ? 'block' : 'none'; }); + document.querySelectorAll('.scene-section').forEach((el, index) => { + el.style.display = index === currentSection ? 'block' : 'none'; + }); document.getElementById('section-counter').textContent = `${currentSection + 1}/${totalSections}`; }