From 4ed2d71e76f04c75a214e43363dc1b64e109fe3d Mon Sep 17 00:00:00 2001 From: troido Date: Fri, 21 Feb 2020 19:22:26 +0100 Subject: used rank in taking objects --- content/maps/room.json | 3 ++- src/controls.rs | 12 ++++++------ src/defaultencyclopedia.rs | 7 +++++++ src/systems/take.rs | 11 +++++++---- src/world.rs | 4 ---- 5 files changed, 22 insertions(+), 15 deletions(-) diff --git a/content/maps/room.json b/content/maps/room.json index 94afbb8..5631b24 100644 --- a/content/maps/room.json +++ b/content/maps/room.json @@ -19,7 +19,7 @@ "X,**,,.,,,,,,,,,,,,bbb,,,,,,,,,,#++++#,,,X", "X,*,*,.,,,,,,,,,,,,~~~,,,T,,,T,,#++++#,,,X", "X,,*,,.,,,,,,,,,,,,~~~,,,,,,,,,,######,,,X", - "X,**,,.,,,,,,,,,,,~~~~,,,,,,,,,,f,,,,f,,,X", + "X,oo,,.,,,,,,,,,,,~~~~,,,,,,,,,,f,,,,f,,,X", "X,,*,,.,,,,,,,,,,,~~~''''''''''''''''f'''X", "X*,,,,.,,,,,,,,,,,~~~'''''''''''f''''f'''X", "X,,,,,.,,,,,,,,,,,~~~'''''''''''ffffff'''X", @@ -39,6 +39,7 @@ "f": ["grass", "fence"], "X": "rock", "*": ["grass", "pebble"], + "o": ["grass", "stone"], "%": {"type": "portal", "kwargs": {"destination": "broom"}}, " ": [] } diff --git a/src/controls.rs b/src/controls.rs index a27348d..b944a93 100644 --- a/src/controls.rs +++ b/src/controls.rs @@ -42,24 +42,24 @@ impl Direction { #[derive(Debug, Clone)] pub enum Control { Move(Direction), - Take(u64), - Drop(u64) + Take(Option), + Drop(usize) } impl Control { pub fn from_json(val: &Value) -> Option{ - if let Value::String(control_type) = &val[0] { + if let Value::String(control_type) = val.get(0)? { match control_type.as_str() { - "move" => match Direction::from_json(&val[1]) { + "move" => match Direction::from_json(val.get(1)?) { Some(dir) => Some(Control::Move(dir)), None => None }, - "take" => Some(Control::Take(0)), /*match val[1].as_u64() { + "take" => Some(Control::Take(val.get(1)?.as_u64())), /*match val[1].as_u64() { Some(rank) => Some(Control::Take(rank)), _ => None }*/ - "drop" => Some(Control::Drop(0)), + "drop" => Some(Control::Drop(val.get(1)?.as_u64().unwrap_or(0) as usize)), _ => None } } else {None} diff --git a/src/defaultencyclopedia.rs b/src/defaultencyclopedia.rs index 853fbfb..f15f443 100644 --- a/src/defaultencyclopedia.rs +++ b/src/defaultencyclopedia.rs @@ -83,6 +83,13 @@ pub fn default_encyclopedia() -> Encyclopedia { "sprite": "pebble", "height": 0.4 }, + "stone": { + "components": [ + ["Item", {"ent": ["template", "stone"], "name": ["string", "stone"]}] + ], + "sprite": "stone", + "height": 0.4 + }, "player": { "arguments": [["name", "string", null]], "components": [ diff --git a/src/systems/take.rs b/src/systems/take.rs index bf0f8e8..31634d2 100644 --- a/src/systems/take.rs +++ b/src/systems/take.rs @@ -44,17 +44,20 @@ impl <'a> System<'a> for Take { ents.remove(&ent); for ent in ents { if let Some(item) = items.get(ent) { - inventory.items.push(item.clone()); + inventory.items.insert(0, item.clone()); if let Err(msg) = removed.insert(ent, Removed) { println!("{:?}", msg); } + break; } } } - Control::Drop(_rank) => { - if let Some(item) = inventory.items.pop() { - let _ = new.create(position.pos, item.ent); + Control::Drop(rank) => { + if *rank >= inventory.items.len() { + return } + let item = inventory.items.remove(*rank); + let _ = new.create(position.pos, item.ent); } _ => {} } diff --git a/src/world.rs b/src/world.rs index 7524eee..05e6887 100644 --- a/src/world.rs +++ b/src/world.rs @@ -109,14 +109,10 @@ impl <'a, 'b>World<'a, 'b> { for room in self.rooms.values() { if let Err(err) = self.persistence.save_room(room.id.clone(), room.save()) { println!("{:?}",err); - } else { - println!("{}", room.save().to_json()); } for (playerid, state) in room.save_players() { if let Err(err) = self.persistence.save_player(playerid.clone(), state.clone()) { println!("{:?}",err); - } else { - println!("{:?} {}", playerid, state.to_json()); } } } -- cgit