From 8bdc8e31d6feb631de93cb4567e9a1125874e34a Mon Sep 17 00:00:00 2001 From: Alex Page Date: Wed, 26 Jan 2022 00:54:14 -0500 Subject: [PATCH] Sort ECS stuff into modules --- src/components/left_mover.rs | 5 ++++ src/components/mod.rs | 9 ++++++ src/components/player.rs | 14 ++++++++++ src/components/position.rs | 8 ++++++ src/components/renderable.rs | 10 +++++++ src/main.rs | 53 +++++------------------------------- src/resources/mod.rs | 2 ++ src/systems/left_walker.rs | 17 ++++++++++++ src/systems/mod.rs | 3 ++ 9 files changed, 75 insertions(+), 46 deletions(-) create mode 100644 src/components/left_mover.rs create mode 100644 src/components/mod.rs create mode 100644 src/components/player.rs create mode 100644 src/components/position.rs create mode 100644 src/components/renderable.rs create mode 100644 src/resources/mod.rs create mode 100644 src/systems/left_walker.rs create mode 100644 src/systems/mod.rs diff --git a/src/components/left_mover.rs b/src/components/left_mover.rs new file mode 100644 index 0000000..c33aa18 --- /dev/null +++ b/src/components/left_mover.rs @@ -0,0 +1,5 @@ +use specs::prelude::*; +use specs_derive::Component; + +#[derive(Component)] +pub struct LeftMover {} diff --git a/src/components/mod.rs b/src/components/mod.rs new file mode 100644 index 0000000..122adb4 --- /dev/null +++ b/src/components/mod.rs @@ -0,0 +1,9 @@ +pub use left_mover::LeftMover; +pub use player::Player; +pub use position::Position; +pub use renderable::Renderable; + +pub mod left_mover; +pub mod player; +pub mod position; +pub mod renderable; diff --git a/src/components/player.rs b/src/components/player.rs new file mode 100644 index 0000000..0b3c6d8 --- /dev/null +++ b/src/components/player.rs @@ -0,0 +1,14 @@ +use std::time::Instant; + +use specs::prelude::*; +use specs_derive::Component; + +#[derive(Component, Debug)] +pub struct Player { + pub last_moved: Instant, + pub score: u32, + pub gems: u32, + pub whips: u32, + pub teleports: u32, + pub keys: u32, +} diff --git a/src/components/position.rs b/src/components/position.rs new file mode 100644 index 0000000..a641718 --- /dev/null +++ b/src/components/position.rs @@ -0,0 +1,8 @@ +use specs::prelude::*; +use specs_derive::Component; + +#[derive(Component)] +pub struct Position { + pub x: i32, + pub y: i32, +} diff --git a/src/components/renderable.rs b/src/components/renderable.rs new file mode 100644 index 0000000..0cfe390 --- /dev/null +++ b/src/components/renderable.rs @@ -0,0 +1,10 @@ +use bracket_lib::prelude::*; +use specs::prelude::*; +use specs_derive::Component; + +#[derive(Component)] +pub struct Renderable { + pub glyph: FontCharType, + pub fg: RGB, + pub bg: RGB, +} diff --git a/src/main.rs b/src/main.rs index 836927a..106e2a8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,51 +1,27 @@ #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] use bracket_lib::prelude::*; +use components::{LeftMover, Player, Position, Renderable}; use constants::{MAP_HEIGHT, MAP_WIDTH, MAP_X, MAP_Y}; use map::{Map, TileType}; +use resources::LevelNumber; use sound::SoundSystem; use sound_effects::SoundEffects; use specs::prelude::*; -use specs_derive::Component; use std::time::{Duration, Instant}; +use systems::LeftWalker; use vga_color as vga; +pub mod components; pub mod constants; mod map; +pub mod resources; mod sidebar; mod sound; mod sound_effects; +pub mod systems; pub mod vga_color; -#[derive(Default)] -struct LevelNumber(u32); - -#[derive(Component)] -struct Position { - x: i32, - y: i32, -} - -#[derive(Component)] -struct Renderable { - glyph: FontCharType, - fg: RGB, - bg: RGB, -} - -#[derive(Component)] -struct LeftMover {} - -#[derive(Component, Debug)] -struct Player { - last_moved: Instant, - score: u32, - gems: u32, - whips: u32, - teleports: u32, - keys: u32, -} - struct State { ecs: World, sound_system: SoundSystem, @@ -164,21 +140,6 @@ impl GameState for State { } } -struct LeftWalker {} - -impl<'a> System<'a> for LeftWalker { - type SystemData = (ReadStorage<'a, LeftMover>, WriteStorage<'a, Position>); - - fn run(&mut self, (lefty, mut pos): Self::SystemData) { - for (_lefty, pos) in (&lefty, &mut pos).join() { - pos.x -= 1; - if pos.x < 0 { - pos.x = 65; - } - } - } -} - impl State { fn run_systems(&mut self) { let mut lw = LeftWalker {}; @@ -193,8 +154,8 @@ fn main() -> BError { .with_title("Kroz") .with_tile_dimensions(8, 16) .build()?; - let mut ss = SoundSystem::new(); + let mut ss = SoundSystem::new(); let sound_effects = SoundEffects::new(&ss); ss.play_sound(sound_effects.startup.clone()); diff --git a/src/resources/mod.rs b/src/resources/mod.rs new file mode 100644 index 0000000..d5e89f8 --- /dev/null +++ b/src/resources/mod.rs @@ -0,0 +1,2 @@ +#[derive(Default)] +pub struct LevelNumber(pub u32); diff --git a/src/systems/left_walker.rs b/src/systems/left_walker.rs new file mode 100644 index 0000000..723d518 --- /dev/null +++ b/src/systems/left_walker.rs @@ -0,0 +1,17 @@ +use crate::components::{left_mover::LeftMover, position::Position}; +use specs::prelude::*; + +pub struct LeftWalker {} + +impl<'a> System<'a> for LeftWalker { + type SystemData = (ReadStorage<'a, LeftMover>, WriteStorage<'a, Position>); + + fn run(&mut self, (lefty, mut pos): Self::SystemData) { + for (_lefty, pos) in (&lefty, &mut pos).join() { + pos.x -= 1; + if pos.x < 0 { + pos.x = 65; + } + } + } +} diff --git a/src/systems/mod.rs b/src/systems/mod.rs new file mode 100644 index 0000000..d0768d7 --- /dev/null +++ b/src/systems/mod.rs @@ -0,0 +1,3 @@ +pub use left_walker::LeftWalker; + +pub mod left_walker;