summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--content/encyclopediae/npcs.json7
-rw-r--r--src/assemblage.rs2
-rw-r--r--src/parameterexpression.rs23
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::*;