summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortroido <troido@protonmail.com>2020-03-04 09:47:19 +0100
committertroido <troido@protonmail.com>2020-03-04 09:47:19 +0100
commitdaae8b511291b8cc854a8747e64e76c6ff2d462e (patch)
tree4f4cd32038e4b932b45f9e7f93d95136afbb8d8d /src
parentb1f075c0064ec4c2419e769b2c960f6d8e65c4d6 (diff)
implemented concat in entity language in order to build letters
Diffstat (limited to 'src')
-rw-r--r--src/componentparameter.rs31
-rw-r--r--src/purgatory.rs63
2 files changed, 74 insertions, 20 deletions
diff --git a/src/componentparameter.rs b/src/componentparameter.rs
index 6003b0d..2b76849 100644
--- a/src/componentparameter.rs
+++ b/src/componentparameter.rs
@@ -4,14 +4,15 @@ use rand::Rng;
use serde_json::Value;
use crate::parameter::{Parameter, ParameterType};
-const MAX_NESTING: usize = 3;
+const MAX_NESTING: usize = 5;
#[derive(Debug, PartialEq, Clone)]
pub enum ComponentParameter {
Constant(Parameter),
Argument(String),
- Random(Vec<ComponentParameter>)
+ Random(Vec<ComponentParameter>),
+ Concat(Vec<ComponentParameter>)
}
impl ComponentParameter {
@@ -27,7 +28,7 @@ impl ComponentParameter {
match self {
Self::Constant(val) => {
Some(val.clone())
- },
+ }
Self::Argument(argname) => {
Some(arguments.get(argname.as_str())?.clone())
}
@@ -35,6 +36,17 @@ impl ComponentParameter {
let r = rand::thread_rng().gen_range(0, options.len());
options[r].evaluate_(arguments, nesting + 1)
}
+ Self::Concat(options) => {
+ let mut string = String::new();
+ for option in options {
+ if let Parameter::String(s) = option.evaluate_(arguments, nesting+1)? {
+ string.push_str(&s);
+ } else {
+ return None;
+ }
+ }
+ Some(Parameter::String(string))
+ }
}
}
@@ -50,13 +62,21 @@ impl ComponentParameter {
Ok(Self::Argument(argname))
},
"random" => {
- let optionvalues = paramvalue.as_array().ok_or("random argument not a a string")?;
+ let optionvalues = paramvalue.as_array().ok_or("random argument not an array")?;
let mut options = Vec::new();
for option in optionvalues {
options.push(Self::from_json(option)?)
}
Ok(Self::Random(options))
},
+ "concat" => {
+ let values = paramvalue.as_array().ok_or("concat argument not an array")?;
+ let mut options = Vec::new();
+ for option in values {
+ options.push(Self::from_json(option)?)
+ }
+ Ok(Self::Concat(options))
+ },
_ => Err("unknown compparam type")
}
}
@@ -74,7 +94,8 @@ impl ComponentParameter {
}
}
typ
- }
+ },
+ Self::Concat(_s) => ParameterType::String
})
}
}
diff --git a/src/purgatory.rs b/src/purgatory.rs
index b96065e..b4d8666 100644
--- a/src/purgatory.rs
+++ b/src/purgatory.rs
@@ -40,25 +40,58 @@ pub fn create_purgatory<'a, 'b>(encyclopedia: Encyclopedia) -> Room<'a, 'b> {
.build();
let mut room = Room::new(purgatory_id(), encyclopedia, dispatcher);
room.load_from_template(&RoomTemplate::from_json(&json!({
- "width": 11,
- "height": 11,
- "spawn": [5, 5],
+ "width": 15,
+ "height": 20,
+ "spawn": [7, 9],
"field": [
- " +++ ",
- " +++++++ ",
- " +++++++++ ",
- " +++++++++ ",
- "+++++++++++",
- "+++++++++++",
- "+++++++++++",
- " +++++++++ ",
- " +++++++++ ",
- " +++++++ ",
- " +++ ",
+ " YOU HAVE DIED ",
+ " ",
+ " ",
+ " +++ ",
+ " +++++++ ",
+ " +++++++++ ",
+ " +++++++++ ",
+ " +++++++++++ ",
+ " +++++++++++ ",
+ " +++++++++++ ",
+ " +++++++++ ",
+ " +++++++++ ",
+ " +++++++ ",
+ " +++ ",
+ " ",
+ " ",
+ " RESTART CLIENT",
+ " TO RESPAWN "
],
"mapping": {
" ": [],
- "+": ["floor"]
+ "+": ["floor"],
+ "A": [{"type": "letter", "args": ["A"]}],
+ "B": [{"type": "letter", "args": ["B"]}],
+ "C": [{"type": "letter", "args": ["C"]}],
+ "D": [{"type": "letter", "args": ["D"]}],
+ "E": [{"type": "letter", "args": ["E"]}],
+ "F": [{"type": "letter", "args": ["F"]}],
+ "G": [{"type": "letter", "args": ["G"]}],
+ "H": [{"type": "letter", "args": ["H"]}],
+ "I": [{"type": "letter", "args": ["I"]}],
+ "J": [{"type": "letter", "args": ["J"]}],
+ "K": [{"type": "letter", "args": ["K"]}],
+ "L": [{"type": "letter", "args": ["L"]}],
+ "M": [{"type": "letter", "args": ["M"]}],
+ "N": [{"type": "letter", "args": ["N"]}],
+ "O": [{"type": "letter", "args": ["O"]}],
+ "P": [{"type": "letter", "args": ["P"]}],
+ "Q": [{"type": "letter", "args": ["Q"]}],
+ "R": [{"type": "letter", "args": ["R"]}],
+ "S": [{"type": "letter", "args": ["S"]}],
+ "T": [{"type": "letter", "args": ["T"]}],
+ "U": [{"type": "letter", "args": ["U"]}],
+ "V": [{"type": "letter", "args": ["V"]}],
+ "W": [{"type": "letter", "args": ["W"]}],
+ "X": [{"type": "letter", "args": ["X"]}],
+ "Y": [{"type": "letter", "args": ["Y"]}],
+ "Z": [{"type": "letter", "args": ["Z"]}]
}
})).unwrap());
room