From 129f12661ebd184707e1f466519529ee6d5f1f4a Mon Sep 17 00:00:00 2001 From: Orchaldir Date: Sun, 5 Nov 2023 12:05:47 +0100 Subject: [PATCH] [#73] Add config --- resources/characters/characters.yaml | 4 ++-- .../src/rendering/config/equipment/mod.rs | 1 + .../rendering/config/equipment/outerwear.rs | 11 ++++++++++ .../src/rendering/config/example.rs | 10 ++++++++++ .../src/rendering/config/mod.rs | 2 ++ .../rendering/equipment/outerwear/cloak.rs | 9 ++++++--- .../src/rendering/equipment/outerwear/coat.rs | 20 ++++++++++++++----- 7 files changed, 47 insertions(+), 10 deletions(-) create mode 100644 rpg_tools_rendering/src/rendering/config/equipment/outerwear.rs diff --git a/resources/characters/characters.yaml b/resources/characters/characters.yaml index 531b440d..12afc9cd 100644 --- a/resources/characters/characters.yaml +++ b/resources/characters/characters.yaml @@ -30,8 +30,8 @@ outerwear: type: Cloak length: Ankle - outer_color: Blue - inner_color: Blue + outer_color: Green + inner_color: Green head: ears: type: Normal diff --git a/rpg_tools_rendering/src/rendering/config/equipment/mod.rs b/rpg_tools_rendering/src/rendering/config/equipment/mod.rs index 422ad3e3..e4de478a 100644 --- a/rpg_tools_rendering/src/rendering/config/equipment/mod.rs +++ b/rpg_tools_rendering/src/rendering/config/equipment/mod.rs @@ -1,5 +1,6 @@ pub mod belt; pub mod eyewear; pub mod footwear; +pub mod outerwear; pub mod pants; pub mod shirt; diff --git a/rpg_tools_rendering/src/rendering/config/equipment/outerwear.rs b/rpg_tools_rendering/src/rendering/config/equipment/outerwear.rs new file mode 100644 index 00000000..4eab00b4 --- /dev/null +++ b/rpg_tools_rendering/src/rendering/config/equipment/outerwear.rs @@ -0,0 +1,11 @@ +/// The rendering config of the [`outerwear`](rpg_tools_core::model::equipment::appearance::outerwear::Outerwear). +#[derive(Debug, PartialEq)] +pub struct OuterwearConfig { + pub top_y: f32, + pub curve_offset: f32, + pub double_breasted_offset: f32, + pub padding_cloak: f32, + pub padding_coat_hip: f32, + pub padding_coat_pants: f32, + pub zipper_width: f32, +} diff --git a/rpg_tools_rendering/src/rendering/config/example.rs b/rpg_tools_rendering/src/rendering/config/example.rs index 166a0278..4ed9f16d 100644 --- a/rpg_tools_rendering/src/rendering/config/example.rs +++ b/rpg_tools_rendering/src/rendering/config/example.rs @@ -9,6 +9,7 @@ use crate::rendering::config::ear::EarConfig; use crate::rendering::config::equipment::belt::{BeltConfig, BuckleConfig}; use crate::rendering::config::equipment::eyewear::EyewearConfig; use crate::rendering::config::equipment::footwear::FootwearConfig; +use crate::rendering::config::equipment::outerwear::OuterwearConfig; use crate::rendering::config::equipment::pants::PantsConfig; use crate::rendering::config::equipment::shirt::ShirtConfig; use crate::rendering::config::eye::eyebrow::EyebrowConfig; @@ -158,6 +159,15 @@ pub fn create_config() -> RenderConfig { width_shaft: 1.05, width_sole: 1.1, }, + outerwear: OuterwearConfig { + top_y: -0.05, + curve_offset: 0.01, + double_breasted_offset: 0.05, + padding_cloak: 0.2, + padding_coat_hip: 0.1, + padding_coat_pants: 0.03, + zipper_width: 2.0, + }, pants: PantsConfig { height_bermuda: 0.5, height_shorts: 0.3, diff --git a/rpg_tools_rendering/src/rendering/config/mod.rs b/rpg_tools_rendering/src/rendering/config/mod.rs index ba02ae8f..275542e6 100644 --- a/rpg_tools_rendering/src/rendering/config/mod.rs +++ b/rpg_tools_rendering/src/rendering/config/mod.rs @@ -6,6 +6,7 @@ use crate::rendering::config::ear::EarConfig; use crate::rendering::config::equipment::belt::BeltConfig; use crate::rendering::config::equipment::eyewear::EyewearConfig; use crate::rendering::config::equipment::footwear::FootwearConfig; +use crate::rendering::config::equipment::outerwear::OuterwearConfig; use crate::rendering::config::equipment::pants::PantsConfig; use crate::rendering::config::equipment::shirt::ShirtConfig; use crate::rendering::config::eye::EyeConfig; @@ -44,6 +45,7 @@ pub struct RenderConfig { pub belt: BeltConfig, pub eyewear: EyewearConfig, pub footwear: FootwearConfig, + pub outerwear: OuterwearConfig, pub pants: PantsConfig, pub shirt: ShirtConfig, } diff --git a/rpg_tools_rendering/src/rendering/equipment/outerwear/cloak.rs b/rpg_tools_rendering/src/rendering/equipment/outerwear/cloak.rs index 412fc2d4..cd22c247 100644 --- a/rpg_tools_rendering/src/rendering/equipment/outerwear/cloak.rs +++ b/rpg_tools_rendering/src/rendering/equipment/outerwear/cloak.rs @@ -26,13 +26,16 @@ fn get_cloak_polygon(config: &RenderConfig, aabb: &AABB, body: &Body, cloak: &Cl let torso = config.body.get_torso_config(body.shape); let mut builder = Polygon2dBuilder::new(); let y_factor = get_bottom_y(config, body, cloak.length); - let shoulder_width = torso.shoulder_width + 0.2; + let shoulder_width = torso.shoulder_width + config.outerwear.padding_cloak; let bottom_width = shoulder_width * config.body.get_torso_width(body); - builder.add_mirrored_points(&torso_aabb, shoulder_width, -0.05, false); + builder.add_mirrored_points(&torso_aabb, shoulder_width, config.outerwear.top_y, false); builder.add_mirrored_points(&torso_aabb, shoulder_width, config.body.y_upper, false); builder.add_mirrored_points(aabb, bottom_width, y_factor, true); - builder.add_point(aabb.get_point(0.5, y_factor - 0.01), false); + builder.add_point( + aabb.get_point(0.5, y_factor - config.outerwear.curve_offset), + false, + ); builder.build() } diff --git a/rpg_tools_rendering/src/rendering/equipment/outerwear/coat.rs b/rpg_tools_rendering/src/rendering/equipment/outerwear/coat.rs index 5ddea240..f61d5d1a 100644 --- a/rpg_tools_rendering/src/rendering/equipment/outerwear/coat.rs +++ b/rpg_tools_rendering/src/rendering/equipment/outerwear/coat.rs @@ -53,12 +53,19 @@ fn get_torso_polygon( coat: &Coat, from_front: bool, ) -> Polygon2d { - let mut builder = create_shirt(config, aabb, body, coat.neckline, from_front, 0.1); + let mut builder = create_shirt( + config, + aabb, + body, + coat.neckline, + from_front, + config.outerwear.padding_coat_hip, + ); builder.reverse(); let (pants_width, _inner_width) = config.pants.get_widths(&config.body, body); - let pants_width = pants_width + 0.03; + let pants_width = pants_width + config.outerwear.padding_coat_pants; let hip_width = config.pants.get_hip_width(&config.body, body) * config.body.get_torso_width(body); let width = hip_width.max(pants_width); @@ -66,7 +73,10 @@ fn get_torso_polygon( let y = get_bottom_y(config, body, coat.length); builder.add_mirrored_points(aabb, width, y, true); - builder.add_point(aabb.get_point(0.5, y + 0.01), false); + builder.add_point( + aabb.get_point(0.5, y + config.outerwear.curve_offset), + false, + ); builder.build() } @@ -89,7 +99,7 @@ fn render_closing( render_buttons(renderer, config, aabb, buttons, top_y, bottom_y, 0.5) } ClosingOption::DoubleBreasted { buttons } => { - let offset = 0.05; + let offset = config.outerwear.double_breasted_offset; render_buttons( renderer, config, @@ -110,7 +120,7 @@ fn render_closing( ); } ClosingOption::Zipper { color } => { - let option = config.line_with_color(color, 2.0); + let option = config.line_with_color(color, config.outerwear.zipper_width); let top = aabb.get_point(0.5, top_y); let bottom = aabb.get_point(0.5, bottom_y); let line = Line2d::new(vec![top, bottom]);