rust/mapgen/src/lib.rs
branchtransitional_engine
changeset 15923 d46ad15c6dec
parent 15922 da6b67f13c12
child 15924 9502611bffc1
equal deleted inserted replaced
15922:da6b67f13c12 15923:d46ad15c6dec
     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,