Use helpers of updated vn-settings for settings initialization

This commit is contained in:
p11 2025-04-19 18:18:20 +02:00
parent 9b5fb1de0d
commit dced55dcbe
3 changed files with 9 additions and 60 deletions

5
Cargo.lock generated
View File

@ -259,10 +259,11 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
[[package]] [[package]]
name = "vn-settings" name = "vn-settings"
version = "0.1.0" version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f799fd65b2bf363a1c70c8dce20b9ea2e2e594173dd9bcd5475dd257b0e0b44a" checksum = "e3c5bd91cb7361d8d179deacf6e9b927a45a1e31c7f9c29555a49be81506381a"
dependencies = [ dependencies = [
"dialogi", "dialogi",
"indexmap",
"simple-color", "simple-color",
] ]

View File

@ -9,7 +9,7 @@ maud = "0.27.0"
pukram2html = "0.3.0" pukram2html = "0.3.0"
data-stream = "0.3.0" data-stream = "0.3.0"
dialogi = "0.3.1" dialogi = "0.3.1"
vn-settings = "0.1.0" vn-settings = "0.1.1"
threadpool = "1.8.1" threadpool = "1.8.1"
header-config = "0.1.5" header-config = "0.1.5"
indexmap = "2.9.0" indexmap = "2.9.0"

View File

@ -1,13 +1,9 @@
use std::{collections::HashMap, io::prelude::*, net::TcpStream, path::Path}; use std::{collections::HashMap, io::prelude::*, net::TcpStream, path::Path};
use dialogi::DialogParameter;
use indexmap::IndexMap; use indexmap::IndexMap;
use maud::{Markup, html}; use maud::{Markup, html};
use pukram2html::convert_subheader; use pukram2html::convert_subheader;
use vn_settings::{ use vn_settings::{Change, Parameter, PlayerSettings, SettingsContext, extract_layers};
Change, ColorSettings, ImageSettings, LayoutSettings, Names, ObjectSettings, Parameter,
PlayerSettings, SettingsContext, TimingSettings,
};
use crate::dialog::parse_map; use crate::dialog::parse_map;
@ -280,22 +276,11 @@ pub fn render_novel(
stream: &mut TcpStream, stream: &mut TcpStream,
start_level: usize, start_level: usize,
) -> Result<(), dialogi::ParsingError> { ) -> Result<(), dialogi::ParsingError> {
let mut player_settings = PlayerSettings { let mut settings_context = SettingsContext::new();
colors: ColorSettings::common(), extract_layers(&mut settings_context.layers, &mut config_map);
timing: TimingSettings::common(),
images: ImageSettings::common(),
objects: ObjectSettings::common(),
layout: LayoutSettings::common(),
names: Names::new(),
};
let layers = process_layers(&mut config_map); let mut player_settings = PlayerSettings::common();
let mut settings_context = SettingsContext { player_settings.extract_settings(&mut settings_context, &mut config_map);
object_cache: HashMap::new(),
layers,
};
apply_config_settings(&mut config_map, &mut settings_context, &mut player_settings);
let dialogs = parse_map(pk_path, &mut settings_context)?; let dialogs = parse_map(pk_path, &mut settings_context)?;
let (scenes, sections) = process_dialogs(dialogs, &mut player_settings, start_level); let (scenes, sections) = process_dialogs(dialogs, &mut player_settings, start_level);
@ -306,43 +291,6 @@ pub fn render_novel(
Ok(()) Ok(())
} }
fn process_layers(config_map: &mut IndexMap<Box<str>, Box<str>>) -> HashMap<Box<str>, 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<str>, Box<str>>,
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( fn process_dialogs(
dialogs: Vec<dialogi::DialogSequence<Change, Parameter>>, dialogs: Vec<dialogi::DialogSequence<Change, Parameter>>,
player_settings: &mut PlayerSettings, player_settings: &mut PlayerSettings,