summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--content/maps/room.json3
-rw-r--r--src/controls.rs12
-rw-r--r--src/defaultencyclopedia.rs7
-rw-r--r--src/systems/take.rs11
-rw-r--r--src/world.rs4
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<u64>),
+ Drop(usize)
}
impl Control {
pub fn from_json(val: &Value) -> Option<Control>{
- 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());
}
}
}