From b3356eabcea09f599ad99c1332450e4d9570161b Mon Sep 17 00:00:00 2001 From: troido Date: Tue, 28 Jan 2020 22:58:16 +0100 Subject: refacored systems, components, resources and assemblages into their own files --- src/assemblages.rs | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 src/assemblages.rs (limited to 'src/assemblages.rs') diff --git a/src/assemblages.rs b/src/assemblages.rs new file mode 100644 index 0000000..4705ae4 --- /dev/null +++ b/src/assemblages.rs @@ -0,0 +1,61 @@ + + +use rand::Rng; +use specs::{ + Builder, + EntityBuilder +}; + +use super::components::{Visible, Controller}; + + + + +pub trait Assemblage { + fn build<'a>(&self, builder: EntityBuilder<'a>) -> EntityBuilder<'a>; +} + + + +pub struct Wall; + +impl Assemblage for Wall { + fn build<'a>(&self, builder: EntityBuilder<'a>) -> EntityBuilder<'a>{ + builder.with(Visible{sprite: "wall".to_string(), height: 2.0}) + } +} + +pub struct Grass { + sprite: String +} + +impl Grass { + pub fn new() -> Grass { + Grass { + sprite: ["grass1", "grass2", "grass3", "grass1", "grass2", "grass3", "ground"][rand::thread_rng().gen_range(0,7)].to_string() + } + } +} + +impl Assemblage for Grass { + fn build<'a>(&self, builder: EntityBuilder<'a>) -> EntityBuilder<'a>{ + builder.with(Visible{sprite: self.sprite.to_string(), height: 0.1}) + } +} + + +pub struct Player { + name: String +} + +impl Player { + pub fn new(name: &str) -> Player { + Player { name: name.to_string()} + } +} + +impl Assemblage for Player { + fn build<'a>(&self, builder: EntityBuilder<'a>) -> EntityBuilder<'a>{ + builder.with(Visible{sprite: "player".to_string(), height: 1.0}).with(Controller(None)) + } +} -- cgit