diff options
| author | troido <troido@protonmail.com> | 2020-04-03 11:51:21 +0200 |
|---|---|---|
| committer | troido <troido@protonmail.com> | 2020-04-03 11:51:21 +0200 |
| commit | 4f256d606793e4c6f2627f4a10e71cc219ea8b67 (patch) | |
| tree | 47d63db8fdbf7f399c332d2ea9c1f025e6311d02 /src | |
| parent | 0702ea943b801176649fee860715fed0f5348c8d (diff) | |
also replace lootlist parameter with list
Diffstat (limited to 'src')
| -rw-r--r-- | src/componentparameter.rs | 2 | ||||
| -rw-r--r-- | src/componentwrapper.rs | 21 | ||||
| -rw-r--r-- | src/parameter.rs | 5 |
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 |
