Use helpers of updated vn-settings for settings initialization
This commit is contained in:
parent
9b5fb1de0d
commit
dced55dcbe
5
Cargo.lock
generated
5
Cargo.lock
generated
@ -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",
|
||||||
]
|
]
|
||||||
|
|||||||
@ -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"
|
||||||
|
|||||||
62
src/vn.rs
62
src/vn.rs
@ -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,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user