equal
deleted
inserted
replaced
2 pub mod theme; |
2 pub mod theme; |
3 |
3 |
4 use self::theme::Theme; |
4 use self::theme::Theme; |
5 use crate::template::outline::TemplateCollectionDesc as OutlineTemplateCollectionDesc; |
5 use crate::template::outline::TemplateCollectionDesc as OutlineTemplateCollectionDesc; |
6 use crate::template::wavefront_collapse::TemplateCollectionDesc as WfcTemplateCollectionDesc; |
6 use crate::template::wavefront_collapse::TemplateCollectionDesc as WfcTemplateCollectionDesc; |
7 use integral_geometry::{Point, Rect, Size}; |
7 |
8 use land2d::Land2D; |
8 use land2d::Land2D; |
9 use landgen::{ |
9 use landgen::{ |
10 outline_template_based::{ |
10 outline_template_based::{ |
11 outline_template::OutlineTemplate, template_based::TemplatedLandGenerator, |
11 outline_template::OutlineTemplate, template_based::TemplatedLandGenerator, |
12 }, |
12 }, |
14 TemplateDescription as WfcTemplate, WavefrontCollapseLandGenerator, |
14 TemplateDescription as WfcTemplate, WavefrontCollapseLandGenerator, |
15 }, |
15 }, |
16 LandGenerationParameters, LandGenerator, |
16 LandGenerationParameters, LandGenerator, |
17 }; |
17 }; |
18 use rand::{seq::SliceRandom, Rng}; |
18 use rand::{seq::SliceRandom, Rng}; |
19 use serde_derive::Deserialize; |
19 |
20 use serde_yaml; |
20 |
21 use std::{borrow::Borrow, collections::hash_map::HashMap, mem::replace}; |
21 use std::{borrow::Borrow, collections::hash_map::HashMap}; |
22 use vec2d::Vec2D; |
22 use vec2d::Vec2D; |
23 |
23 |
24 #[derive(PartialEq, Eq, Hash, Clone, Debug)] |
24 #[derive(PartialEq, Eq, Hash, Clone, Debug)] |
25 struct TemplateType(String); |
25 struct TemplateType(String); |
26 |
26 |
122 } |
122 } |
123 |
123 |
124 impl MapGenerator<OutlineTemplate> { |
124 impl MapGenerator<OutlineTemplate> { |
125 pub fn import_yaml_templates(&mut self, text: &str) { |
125 pub fn import_yaml_templates(&mut self, text: &str) { |
126 let mut desc: OutlineTemplateCollectionDesc = serde_yaml::from_str(text).unwrap(); |
126 let mut desc: OutlineTemplateCollectionDesc = serde_yaml::from_str(text).unwrap(); |
127 let templates = replace(&mut desc.templates, vec![]); |
127 let templates = std::mem::take(&mut desc.templates); |
128 self.templates = desc |
128 self.templates = desc |
129 .template_types |
129 .template_types |
130 .into_iter() |
130 .into_iter() |
131 .map(|(size, indices)| { |
131 .map(|(size, indices)| { |
132 ( |
132 ( |
143 } |
143 } |
144 |
144 |
145 impl MapGenerator<WfcTemplate> { |
145 impl MapGenerator<WfcTemplate> { |
146 pub fn import_yaml_templates(&mut self, text: &str) { |
146 pub fn import_yaml_templates(&mut self, text: &str) { |
147 let mut desc: WfcTemplateCollectionDesc = serde_yaml::from_str(text).unwrap(); |
147 let mut desc: WfcTemplateCollectionDesc = serde_yaml::from_str(text).unwrap(); |
148 let templates = replace(&mut desc.templates, vec![]); |
148 let templates = std::mem::take(&mut desc.templates); |
149 self.templates = desc |
149 self.templates = desc |
150 .template_types |
150 .template_types |
151 .into_iter() |
151 .into_iter() |
152 .map(|(size, indices)| { |
152 .map(|(size, indices)| { |
153 ( |
153 ( |
167 struct Color(u32); |
167 struct Color(u32); |
168 |
168 |
169 impl Color { |
169 impl Color { |
170 #[inline] |
170 #[inline] |
171 fn red(self) -> u8 { |
171 fn red(self) -> u8 { |
172 (self.0 >> 0 & 0xFF) as u8 |
172 (self.0 & 0xFF) as u8 |
173 } |
173 } |
174 |
174 |
175 #[inline] |
175 #[inline] |
176 fn green(self) -> u8 { |
176 fn green(self) -> u8 { |
177 (self.0 >> 8 & 0xFF) as u8 |
177 (self.0 >> 8 & 0xFF) as u8 |
199 let target = Color(target); |
199 let target = Color(target); |
200 let alpha = lerp(target.alpha(), 255, source.alpha()); |
200 let alpha = lerp(target.alpha(), 255, source.alpha()); |
201 let red = lerp(target.red(), source.red(), source.alpha()); |
201 let red = lerp(target.red(), source.red(), source.alpha()); |
202 let green = lerp(target.green(), source.green(), source.alpha()); |
202 let green = lerp(target.green(), source.green(), source.alpha()); |
203 let blue = lerp(target.blue(), source.blue(), source.alpha()); |
203 let blue = lerp(target.blue(), source.blue(), source.alpha()); |
204 (red as u32) << 0 | (green as u32) << 8 | (blue as u32) << 16 | (alpha as u32) << 24 |
204 (red as u32) | (green as u32) << 8 | (blue as u32) << 16 | (alpha as u32) << 24 |
205 } |
205 } |
206 |
206 |
207 fn land_border_pass<'a, LandT, T, F>( |
207 fn land_border_pass<'a, LandT, T, F>( |
208 basic_value: LandT, |
208 basic_value: LandT, |
209 rows: T, |
209 rows: T, |