diff options
| author | troido <troido@protonmail.com> | 2020-02-07 19:54:35 +0100 |
|---|---|---|
| committer | troido <troido@protonmail.com> | 2020-02-07 19:54:35 +0100 |
| commit | 8be2749edf97b200281a2c67f97ed8835f5c6d88 (patch) | |
| tree | 33608330625786a375b20782cbb542757571b031 /src | |
| parent | 7dd148f8e0b371cb422f14dfe926e98642c41317 (diff) | |
spawn is also loaded from room template
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.rs | 3 | ||||
| -rw-r--r-- | src/pos.rs | 2 | ||||
| -rw-r--r-- | src/resources.rs | 5 | ||||
| -rw-r--r-- | src/room.rs | 9 | ||||
| -rw-r--r-- | src/systems/controlinput.rs | 9 |
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": [ "##########################################", "#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#", @@ -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()))) )); } |
