summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortroido <troido@protonmail.com>2020-09-20 23:33:13 +0200
committertroido <troido@protonmail.com>2020-09-20 23:33:13 +0200
commit5eda37efbd1b34851364923069c0c3effdc32ca8 (patch)
treed2f6e035c32f49eeebc1149ef5a08bdd6229912f /src
parent39d7f4a123171a1dc5d5a8ec1c512599d4bec0f0 (diff)
create interactions from parameter instead of json
Diffstat (limited to 'src')
-rw-r--r--src/components/interactable.rs15
-rw-r--r--src/componentwrapper.rs2
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")),