summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortroido <troido@protonmail.com>2020-04-03 11:51:21 +0200
committertroido <troido@protonmail.com>2020-04-03 11:51:21 +0200
commit4f256d606793e4c6f2627f4a10e71cc219ea8b67 (patch)
tree47d63db8fdbf7f399c332d2ea9c1f025e6311d02 /src
parent0702ea943b801176649fee860715fed0f5348c8d (diff)
also replace lootlist parameter with list
Diffstat (limited to 'src')
-rw-r--r--src/componentparameter.rs2
-rw-r--r--src/componentwrapper.rs21
-rw-r--r--src/parameter.rs5
3 files changed, 21 insertions, 7 deletions
diff --git a/src/componentparameter.rs b/src/componentparameter.rs
index 068df76..fb5ee87 100644
--- a/src/componentparameter.rs
+++ b/src/componentparameter.rs
@@ -91,7 +91,7 @@ impl ComponentParameter {
},
"self" => Ok(Self::TemplateSelf),
"name" => Ok(Self::TemplateName),
- _ => Err(aerr!("unknown compparam type"))
+ _ => Err(aerr!(&format!("unknown compparam type '{}'", typename)))
}
}
}
diff --git a/src/componentwrapper.rs b/src/componentwrapper.rs
index 0fb46d0..038b526 100644
--- a/src/componentwrapper.rs
+++ b/src/componentwrapper.rs
@@ -15,6 +15,7 @@ use crate::{
},
parameter::{Parameter, ParameterType},
Timestamp,
+ Template,
Result,
aerr
};
@@ -182,7 +183,25 @@ components!(
Home (home: Pos);
Faction (faction: String) {Faction::from_str(faction.as_str()).ok_or(aerr!("invalid faction name"))?};
Interactable (action: Interaction) {action};
- Loot (loot: LootList);
+ Loot (loot: List) {
+ Loot { loot:
+ loot
+ .iter()
+ .map(|param| {match param {
+ Parameter::Template(template) => Some((template.clone(), 1.0)),
+ Parameter::List(l) => {
+ if l.len() == 2 {
+ if let (Parameter::Template(template), Parameter::Float(chance)) = (l[0].clone(), l[1].clone()) {
+ return Some((template.clone(), chance))
+ }
+ }
+ None?
+ },
+ _ => None?
+ }})
+ .collect::<Option<Vec<(Template, f64)>>>().ok_or(aerr!("invalid loot definition"))?
+ }
+ };
Grow (
into: Template (Grow.into.clone()),
delay: Int (Grow.delay),
diff --git a/src/parameter.rs b/src/parameter.rs
index 3423f69..5466ce6 100644
--- a/src/parameter.rs
+++ b/src/parameter.rs
@@ -72,11 +72,6 @@ parameters!(
Action (ItemAction) action, v (ItemAction::from_json(v)?) (panic!("item actions can't be serialized"));
Interaction (Interactable) interaction, v (Interactable::from_json(v)?) (panic!("interactions can't be serialized"));
Bool (bool) bool, v (v.as_bool()?) (json!(v));
- LootList (Vec<(Template, f64)>) lootlist, v
- (v.as_array()?.iter().map(|item|
- Some((Template::from_json(item.get(0)?).ok()?, item.get(1)?.as_f64()?))
- ).collect::<Option<Vec<(Template, f64)>>>()?)
- ({json!(v.iter().map(|(t, c)| (t.to_json(), *c)).collect::<Vec<(Value, f64)>>())});
List (Vec<Parameter>) list, v
({
v