diff --git a/Cargo.lock b/Cargo.lock index f7f2262..d35659b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -259,10 +259,11 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "vn-settings" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f799fd65b2bf363a1c70c8dce20b9ea2e2e594173dd9bcd5475dd257b0e0b44a" +checksum = "e3c5bd91cb7361d8d179deacf6e9b927a45a1e31c7f9c29555a49be81506381a" dependencies = [ "dialogi", + "indexmap", "simple-color", ] diff --git a/Cargo.toml b/Cargo.toml index 184223c..0e64ecd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ maud = "0.27.0" pukram2html = "0.3.0" data-stream = "0.3.0" dialogi = "0.3.1" -vn-settings = "0.1.0" +vn-settings = "0.1.1" threadpool = "1.8.1" header-config = "0.1.5" indexmap = "2.9.0" diff --git a/src/vn.rs b/src/vn.rs index 297e16d..583af31 100644 --- a/src/vn.rs +++ b/src/vn.rs @@ -1,13 +1,9 @@ use std::{collections::HashMap, io::prelude::*, net::TcpStream, path::Path}; -use dialogi::DialogParameter; use indexmap::IndexMap; use maud::{Markup, html}; use pukram2html::convert_subheader; -use vn_settings::{ - Change, ColorSettings, ImageSettings, LayoutSettings, Names, ObjectSettings, Parameter, - PlayerSettings, SettingsContext, TimingSettings, -}; +use vn_settings::{Change, Parameter, PlayerSettings, SettingsContext, extract_layers}; use crate::dialog::parse_map; @@ -280,22 +276,11 @@ pub fn render_novel( stream: &mut TcpStream, start_level: usize, ) -> Result<(), dialogi::ParsingError> { - let mut player_settings = PlayerSettings { - colors: ColorSettings::common(), - timing: TimingSettings::common(), - images: ImageSettings::common(), - objects: ObjectSettings::common(), - layout: LayoutSettings::common(), - names: Names::new(), - }; + let mut settings_context = SettingsContext::new(); + extract_layers(&mut settings_context.layers, &mut config_map); - let layers = process_layers(&mut config_map); - let mut settings_context = SettingsContext { - object_cache: HashMap::new(), - layers, - }; - - apply_config_settings(&mut config_map, &mut settings_context, &mut player_settings); + let mut player_settings = PlayerSettings::common(); + player_settings.extract_settings(&mut settings_context, &mut config_map); let dialogs = parse_map(pk_path, &mut settings_context)?; let (scenes, sections) = process_dialogs(dialogs, &mut player_settings, start_level); @@ -306,43 +291,6 @@ pub fn render_novel( Ok(()) } -fn process_layers(config_map: &mut IndexMap, Box>) -> HashMap, usize> { - let mut layers = HashMap::new(); - - let keys: Vec<_> = config_map.keys().cloned().collect(); - for key in keys { - let Some(("Layer", name)) = key.split_once(':') else { - continue; - }; - - let value = config_map.shift_remove(&key).expect("Invalid layer"); - if !value.is_empty() { - eprintln!("Layers don't accept arguments!"); - } - layers.insert(name.into(), layers.len()); - } - - if layers.is_empty() { - layers.insert("Background".into(), 0); - layers.insert("Character".into(), 1); - } - - layers -} - -fn apply_config_settings( - config_map: &mut IndexMap, Box>, - context: &mut SettingsContext, - settings: &mut PlayerSettings, -) { - for (key, value) in config_map.drain(..) { - if let Some(parameter) = Parameter::create(&key, context) { - let setter = parameter.value_setter(&value, context); - settings.set_character_default(setter); - } - } -} - fn process_dialogs( dialogs: Vec>, player_settings: &mut PlayerSettings,