diff options
| author | troido <troido@protonmail.com> | 2020-03-04 09:47:19 +0100 |
|---|---|---|
| committer | troido <troido@protonmail.com> | 2020-03-04 09:47:19 +0100 |
| commit | daae8b511291b8cc854a8747e64e76c6ff2d462e (patch) | |
| tree | 4f4cd32038e4b932b45f9e7f93d95136afbb8d8d /src | |
| parent | b1f075c0064ec4c2419e769b2c960f6d8e65c4d6 (diff) | |
implemented concat in entity language in order to build letters
Diffstat (limited to 'src')
| -rw-r--r-- | src/componentparameter.rs | 31 | ||||
| -rw-r--r-- | src/purgatory.rs | 63 |
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 |
