diff options
| -rw-r--r-- | content/encyclopediae/npcs.json | 7 | ||||
| -rw-r--r-- | src/assemblage.rs | 2 | ||||
| -rw-r--r-- | src/parameterexpression.rs | 23 |
3 files changed, 27 insertions, 5 deletions
diff --git a/content/encyclopediae/npcs.json b/content/encyclopediae/npcs.json index 5cb7a60..f4642b4 100644 --- a/content/encyclopediae/npcs.json +++ b/content/encyclopediae/npcs.json @@ -79,7 +79,12 @@ "height": 1.5, "flags": ["Occupied"], "components": [ - ["Interactable", {"typ": "say", "arg": "Hey there, welcome to Asciifarm"}] + ["Interactable", {"typ": "say", "arg": "Hey there, welcome to Asciifarm"}], + ["MonsterAI", { + "view_distance": 1, + "move_chance": 0.01, + "homesickness": 0.3 + }] ] }, "trader": { diff --git a/src/assemblage.rs b/src/assemblage.rs index 9911c77..5541ec1 100644 --- a/src/assemblage.rs +++ b/src/assemblage.rs @@ -130,7 +130,7 @@ enum ArgumentDefSave{ Long(String, ParameterType, Parameter), Short(String, ParameterType) } -#[derive(Debug, Clone, PartialEq, Deserialize)] +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] struct AssemblageSave { #[serde(default)] pub arguments: Vec<ArgumentDefSave>, diff --git a/src/parameterexpression.rs b/src/parameterexpression.rs index 2db52ef..b111669 100644 --- a/src/parameterexpression.rs +++ b/src/parameterexpression.rs @@ -1,7 +1,7 @@ use std::collections::HashMap; use rand::Rng; -use serde::{Deserialize, Deserializer}; +use serde::{Serialize, Deserialize, Deserializer, Serializer}; use crate::{ parameter::{Parameter, ParameterType}, Template, @@ -126,7 +126,7 @@ impl ParameterExpression { } -#[derive(Debug, PartialEq, Clone, Deserialize)] +#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)] enum DynamicParameterExpressionSave { #[serde(rename = "$arg")] Argument(String), @@ -141,7 +141,7 @@ enum DynamicParameterExpressionSave { #[serde(rename = "$name")] TemplateName } -#[derive(Debug, PartialEq, Clone, Deserialize)] +#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)] #[serde(untagged)] enum ParameterExpressionSave { List(Vec<ParameterExpression>), @@ -179,6 +179,23 @@ impl<'de> Deserialize<'de> for ParameterExpression { } } +impl Serialize for ParameterExpression { + fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> + where S: Serializer { + (match self.clone() { + Self::Constant(p) => PES::Constant(p), + Self::List(l) => PES::List(l), + Self::Template{name, save, clan, kwargs} => PES::Template{name, save, clan, kwargs}, + Self::Argument(a) => PES::Dynamic(DPES::Argument(a)), + Self::Random(l) => PES::Dynamic(DPES::Random(l)), + Self::Concat(l) => PES::Dynamic(DPES::Concat(l)), + Self::If(c, i, e) => PES::Dynamic(DPES::If(c, i, e)), + Self::TemplateSelf => PES::Dynamic(DPES::TemplateSelf), + Self::TemplateName => PES::Dynamic(DPES::TemplateName) + }).serialize(serializer) + } +} + #[cfg(test)] mod tests { use super::*; |
