diff options
| author | troido <troido@protonmail.com> | 2020-09-20 23:33:13 +0200 |
|---|---|---|
| committer | troido <troido@protonmail.com> | 2020-09-20 23:33:13 +0200 |
| commit | 5eda37efbd1b34851364923069c0c3effdc32ca8 (patch) | |
| tree | d2f6e035c32f49eeebc1149ef5a08bdd6229912f /src | |
| parent | 39d7f4a123171a1dc5d5a8ec1c512599d4bec0f0 (diff) | |
create interactions from parameter instead of json
Diffstat (limited to 'src')
| -rw-r--r-- | src/components/interactable.rs | 15 | ||||
| -rw-r--r-- | src/componentwrapper.rs | 2 |
2 files changed, 14 insertions, 3 deletions
diff --git a/src/components/interactable.rs b/src/components/interactable.rs index 63e89e3..d5a6926 100644 --- a/src/components/interactable.rs +++ b/src/components/interactable.rs @@ -4,12 +4,13 @@ use serde_json; use serde_json::{Value}; use specs::{ Component, - HashMapStorage + HashMapStorage, }; use crate::{ exchange::Exchange, components::{Trigger, equipment::Stat}, - RoomId + RoomId, + parameter::Parameter }; #[derive(Component, Debug, Clone, PartialEq)] @@ -23,6 +24,16 @@ pub enum Interactable { use Interactable::*; impl Interactable { + + pub fn parse_from_parameter(typ: &str, arg: &Parameter) -> Option<Self> { + Some(match (typ, arg) { + ("trigger", Parameter::String(s)) => Trigger(Trigger::from_str(s)?), + ("visit", Parameter::String(s)) => Visit(RoomId::from_str(s)), + ("mine", Parameter::String(s)) => Mine(Stat::from_str(s)?), + _ => None? + }) + } + pub fn from_json(val: &Value) -> Option<Self> { let typ = val.get(0)?; let arg = val.get(1)?; diff --git a/src/componentwrapper.rs b/src/componentwrapper.rs index 638d156..f3c2db0 100644 --- a/src/componentwrapper.rs +++ b/src/componentwrapper.rs @@ -185,7 +185,7 @@ components!(all: Clan (name: String); Home (home: Pos); Faction (faction: String) {Faction::from_str(faction.as_str()).ok_or(aerr!("invalid faction name"))?}; - Interactable (action: Interactable) {action}; + Interactable (typ: String, arg: Parameter) {Interactable::parse_from_parameter(&typ, &arg).ok_or(aerr!("invalid interaction"))?}; Loot (loot: Vec<(Template, f64)>); Timer ( trigger: String, (panic!("can't turn trigger to string")), |
