summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortroido <troido@protonmail.com>2020-02-07 19:54:35 +0100
committertroido <troido@protonmail.com>2020-02-07 19:54:35 +0100
commit8be2749edf97b200281a2c67f97ed8835f5c6d88 (patch)
tree33608330625786a375b20782cbb542757571b031 /src
parent7dd148f8e0b371cb422f14dfe926e98642c41317 (diff)
spawn is also loaded from room template
Diffstat (limited to 'src')
-rw-r--r--src/main.rs3
-rw-r--r--src/pos.rs2
-rw-r--r--src/resources.rs5
-rw-r--r--src/room.rs9
-rw-r--r--src/systems/controlinput.rs9
5 files changed, 17 insertions, 11 deletions
diff --git a/src/main.rs b/src/main.rs
index bf27cdd..7db7dd9 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -32,7 +32,6 @@ use self::server::Server;
use self::room::Room;
use self::util::ToJson;
use self::encyclopedia::Encyclopedia;
-use self::template::Template;
use self::roomtemplate::RoomTemplate;
@@ -73,7 +72,7 @@ fn gen_room<'a, 'b>() -> Room<'a, 'b> {
let roomtemplate = RoomTemplate::from_json(&json!({
"width": 42,
"height": 22,
- "spawn": [5, 5],
+ "spawn": [35, 5],
"field": [
"##########################################",
"#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#",
diff --git a/src/pos.rs b/src/pos.rs
index 3003b64..d64cc7a 100644
--- a/src/pos.rs
+++ b/src/pos.rs
@@ -5,7 +5,7 @@ use serde_json::{Value, json};
use serde::{Serialize, Serializer, ser::SerializeTuple};
use super::util::{clamp, ToJson};
-#[derive(Debug, Hash, PartialEq, Eq, Clone, Copy)]
+#[derive(Debug, Hash, PartialEq, Eq, Clone, Copy, Default)]
pub struct Pos {
pub x: i64,
pub y: i64
diff --git a/src/resources.rs b/src/resources.rs
index ced9897..630ffca 100644
--- a/src/resources.rs
+++ b/src/resources.rs
@@ -26,6 +26,11 @@ pub struct Size {
}
#[derive(Default)]
+pub struct Spawn {
+ pub pos: Pos
+}
+
+#[derive(Default)]
pub struct Floor {
pub cells: HashMap<Pos, Vec<Entity>>
}
diff --git a/src/room.rs b/src/room.rs
index 8d15bde..dc7c849 100644
--- a/src/room.rs
+++ b/src/room.rs
@@ -18,7 +18,8 @@ use super::resources::{
Size,
Output,
Input,
- NewEntities
+ NewEntities,
+ Spawn
};
use super::systems::{
moving::Move,
@@ -69,14 +70,16 @@ impl <'a, 'b>Room<'a, 'b> {
self.world.fetch_mut::<Size>().width = width;
self.world.fetch_mut::<Size>().height = height;
- // todo: set spawn
+ self.world.fetch_mut::<Spawn>().pos = template.spawn;
for (idx, templates) in template.field.iter().enumerate() {
let x = (idx as i64) % width;
let y = (idx as i64) / width;
for template in templates {
- self.add_entity(template, Pos{x, y});
+ if let Err(msg) = self.add_entity(template, Pos{x, y}){
+ println!("{}", msg);
+ }
}
}
}
diff --git a/src/systems/controlinput.rs b/src/systems/controlinput.rs
index b25c336..27ef5cf 100644
--- a/src/systems/controlinput.rs
+++ b/src/systems/controlinput.rs
@@ -11,10 +11,9 @@ use specs::{
Join
};
-use crate::pos::Pos;
use crate::components::{Controller, Player};
use crate::controls::{Control, Action};
-use crate::resources::{Input, NewEntities};
+use crate::resources::{Input, NewEntities, Spawn};
use crate::hashmap;
use crate::template::Template;
use crate::parameter::Parameter;
@@ -24,15 +23,15 @@ use crate::parameter::Parameter;
pub struct ControlInput;
impl <'a> System<'a> for ControlInput {
- type SystemData = (Entities<'a>, Read<'a, Input>, WriteStorage<'a, Controller>, ReadStorage<'a, Player>, Write<'a, NewEntities>);
- fn run(&mut self, (entities, input, mut controllers, players, mut new): Self::SystemData) {
+ type SystemData = (Entities<'a>, Read<'a, Input>, WriteStorage<'a, Controller>, ReadStorage<'a, Player>, Write<'a, NewEntities>, Read<'a, Spawn>);
+ fn run(&mut self, (entities, input, mut controllers, players, mut new, spawn): Self::SystemData) {
let mut playercontrols: HashMap<&str, Control> = HashMap::new();
let mut leaving = HashSet::new();
for action in &input.actions {
match action {
Action::Join(name) => {
new.templates.push((
- Pos{x:10, y:10},
+ spawn.pos,
Template::new("player", hashmap!("name".to_string() => Parameter::String(name.to_string())))
));
}