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

View File

@@ -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<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(
dialogs: Vec<dialogi::DialogSequence<Change, Parameter>>,
player_settings: &mut PlayerSettings,