From 715c9106dbff4524f3fdf5d23f762e5e6518e0cb Mon Sep 17 00:00:00 2001 From: troido Date: Mon, 24 Feb 2020 12:38:23 +0100 Subject: healing works now too, the first time based system --- src/resources/ground.rs | 43 ++++++++++++++++++++++++++++ src/resources/mod.rs | 67 ++++++++------------------------------------ src/resources/newentities.rs | 28 ++++++++++++++++++ 3 files changed, 83 insertions(+), 55 deletions(-) create mode 100644 src/resources/ground.rs create mode 100644 src/resources/newentities.rs (limited to 'src/resources') diff --git a/src/resources/ground.rs b/src/resources/ground.rs new file mode 100644 index 0000000..b8c6b5a --- /dev/null +++ b/src/resources/ground.rs @@ -0,0 +1,43 @@ + +use std::collections::{HashMap, HashSet}; + +use specs::{ + ReadStorage, + Component, + Entity +}; + +use crate::{ + components::{Visible, Removed}, + Pos +}; + +#[derive(Default)] +pub struct Ground { + pub cells: HashMap> +} + +impl Ground { + pub fn components_on<'a, C: Component>(&self, pos: Pos, component_type: &'a ReadStorage, removals: &'a ReadStorage) -> Vec<&'a C> { + self.cells + .get(&pos) + .unwrap_or(&HashSet::new()) + .iter() + .filter(|e| !removals.contains(**e)) + .filter_map(|e| component_type.get(*e)) + .collect() + } + + pub fn by_height(&self, pos: &Pos, visibles: &ReadStorage, ignore: &Entity) -> Vec { + let mut entities: Vec = self.cells + .get(&pos).unwrap_or(&HashSet::new()) + .iter() + .cloned() + .filter(|e| e != ignore && visibles.contains(*e)) + .collect(); + entities.sort_by(|a, b| + visibles.get(*b).unwrap().height.partial_cmp(&visibles.get(*a).unwrap().height).unwrap() + ); + entities + } +} diff --git a/src/resources/mod.rs b/src/resources/mod.rs index 07669c4..2f218fe 100644 --- a/src/resources/mod.rs +++ b/src/resources/mod.rs @@ -1,18 +1,19 @@ -use std::collections::{HashMap, HashSet}; -use specs::{Entity, ReadStorage, Component}; +mod ground; +mod newentities; + +pub use ground::Ground; +pub use newentities::NewEntities; + +use std::collections::{HashMap}; +use specs::{Entity}; use crate::{ Pos, controls::Control, worldmessages::WorldMessage, - componentwrapper::PreEntity, - Encyclopedia, PlayerId, RoomId, - Result, - Template, - components::{Visible, Removed}, playerstate::RoomPos }; @@ -38,54 +39,6 @@ pub struct Spawn { pub pos: Pos } -#[derive(Default)] -pub struct Ground { - pub cells: HashMap> -} -impl Ground { - pub fn components_on<'a, C: Component>(&self, pos: Pos, component_type: &'a ReadStorage, removals: &'a ReadStorage) -> Vec<&'a C> { - self.cells - .get(&pos) - .unwrap_or(&HashSet::new()) - .iter() - .filter(|e| !removals.contains(**e)) - .filter_map(|e| component_type.get(*e)) - .collect() - } - - pub fn by_height(&self, pos: &Pos, visibles: &ReadStorage, ignore: &Entity) -> Vec { - let mut entities: Vec = self.cells - .get(&pos).unwrap_or(&HashSet::new()) - .iter() - .cloned() - .filter(|e| e != ignore && visibles.contains(*e)) - .collect(); - entities.sort_by(|a, b| - visibles.get(*b).unwrap().height.partial_cmp(&visibles.get(*a).unwrap().height).unwrap() - ); - entities - } -} - - -#[derive(Default)] -pub struct NewEntities { - pub to_build: Vec<(Pos, PreEntity)>, - pub encyclopedia: Encyclopedia -} -impl NewEntities { - pub fn new(encyclopedia: Encyclopedia) -> Self { - Self{ - to_build: Vec::new(), - encyclopedia - } - } - pub fn create(&mut self, pos: Pos, template: Template) -> Result<()> { - let components = self.encyclopedia.construct(&template)?; - self.to_build.push((pos, components)); - Ok(()) - } -} #[derive(Default)] pub struct Players { @@ -97,3 +50,7 @@ pub struct Emigration { pub emigrants: Vec<(PlayerId, RoomId, RoomPos)> } +#[derive(Default)] +pub struct TimeStamp { + pub time: i64 +} diff --git a/src/resources/newentities.rs b/src/resources/newentities.rs new file mode 100644 index 0000000..a9c4ddc --- /dev/null +++ b/src/resources/newentities.rs @@ -0,0 +1,28 @@ + +use crate::{ + Pos, + Encyclopedia, + Template, + Result, + componentwrapper::PreEntity +}; + +#[derive(Default)] +pub struct NewEntities { + pub to_build: Vec<(Pos, PreEntity)>, + pub encyclopedia: Encyclopedia +} + +impl NewEntities { + pub fn new(encyclopedia: Encyclopedia) -> Self { + Self{ + to_build: Vec::new(), + encyclopedia + } + } + pub fn create(&mut self, pos: Pos, template: Template) -> Result<()> { + let components = self.encyclopedia.construct(&template)?; + self.to_build.push((pos, components)); + Ok(()) + } +} -- cgit