diff options
| author | troido <troido@protonmail.com> | 2020-03-04 20:53:42 +0100 |
|---|---|---|
| committer | troido <troido@protonmail.com> | 2020-03-04 20:53:42 +0100 |
| commit | ea99b86b89659624133a63f03600f0b57592a5f4 (patch) | |
| tree | 12263acbe0f879ddca7448e9a5cd1faccf6364fd /src/controls.rs | |
| parent | e0dcd48034e2bab9e0ae17a80a5b4d9f0f2a7900 (diff) | |
controls work with old client now too
Diffstat (limited to 'src/controls.rs')
| -rw-r--r-- | src/controls.rs | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/controls.rs b/src/controls.rs index 3254e00..63f418a 100644 --- a/src/controls.rs +++ b/src/controls.rs @@ -1,6 +1,6 @@ -use serde_json::Value; +use serde_json::{Value, json}; use specs::Entity; use crate::{PlayerId, Pos}; @@ -60,14 +60,22 @@ impl Control { Some(dir) => Some(Control::Move(dir)), None => None }, - "take" => Some(Control::Take(val.get(1)?.as_u64().map(|idx| idx as usize))), + "take" => Some(Control::Take(val.get(1).unwrap_or(&json!(0)).as_u64().map(|idx| idx as usize))), "drop" => Some(Control::Drop(val.get(1)?.as_u64().unwrap_or(0) as usize)), "use" => Some({ - println!("use argument {:?}", val); - if val.get(1)?.as_str()? != "inventory" { + let arr = val.as_array()?; + let mut rank = 0; + if arr.len() == 3 { + if arr[1].as_str()? != "inventory" { + return None; + } + rank = arr[2].as_u64()?; + } else if arr.len() == 2 { + rank = arr[1].as_u64()?; + } else if arr.len() > 1 { return None; } - Control::Use(val.get(2)?.as_u64().unwrap_or(0) as usize) + Control::Use(rank as usize) }), "attack" => Some(Control::Attack({ let mut directions = Vec::new(); |
