summaryrefslogtreecommitdiff
path: root/src/systems
diff options
context:
space:
mode:
Diffstat (limited to 'src/systems')
-rw-r--r--src/systems/draw.rs58
-rw-r--r--src/systems/input.rs41
-rw-r--r--src/systems/mod.rs5
3 files changed, 104 insertions, 0 deletions
diff --git a/src/systems/draw.rs b/src/systems/draw.rs
new file mode 100644
index 0000000..1d5ee6b
--- /dev/null
+++ b/src/systems/draw.rs
@@ -0,0 +1,58 @@
+use sdl2::pixels::Color;
+use sdl2::render::WindowCanvas;
+use sdl2::video::{Window, WindowContext};
+use specs::prelude::*;
+
+use crate::components::{Pos, StaticDrawable};
+use crate::texture_manager::TextureManager;
+
+pub struct SysDraw
+{
+ canvas: WindowCanvas,
+ texture_manager: TextureManager<WindowContext>,
+}
+
+impl SysDraw
+{
+ pub fn new(window: Window) -> Self
+ {
+ let mut canvas = window
+ .into_canvas()
+ .build()
+ .expect("Unable to create canvas");
+ canvas.set_draw_color(Color::RGB(255, 255, 0));
+
+ let texture_manager = TextureManager::new(canvas.texture_creator());
+
+ Self {
+ canvas,
+ texture_manager,
+ }
+ }
+}
+
+impl<'a> System<'a> for SysDraw
+{
+ type SystemData = (ReadStorage<'a, Pos>, ReadStorage<'a, StaticDrawable>);
+
+ fn run(&mut self, (pos, drawable): Self::SystemData)
+ {
+ self.canvas.clear();
+
+ // XXX: This is so slow.. yaaaawn. Replace with ids and texture manager
+ // lifetime?
+ for (_pos, drawable) in (&pos, &drawable).join() {
+ let texture = self
+ .texture_manager
+ .get(&drawable.texture_name)
+ .expect("Unable to load texture");
+
+ // let texture_info = texture.query();
+ self.canvas
+ .copy(&texture, None, None)
+ .expect("Unable to draw texture");
+ }
+
+ self.canvas.present();
+ }
+}
diff --git a/src/systems/input.rs b/src/systems/input.rs
new file mode 100644
index 0000000..96ac3b8
--- /dev/null
+++ b/src/systems/input.rs
@@ -0,0 +1,41 @@
+use sdl2::event::{Event, WindowEvent};
+use sdl2::{EventPump, Sdl};
+use specs::prelude::*;
+
+pub struct SysInput
+{
+ event_pump: EventPump,
+}
+
+impl SysInput
+{
+ pub fn new(sdl: &Sdl) -> Self
+ {
+ Self {
+ event_pump: sdl.event_pump().unwrap(),
+ }
+ }
+}
+
+impl<'a> System<'a> for SysInput
+{
+ type SystemData = ();
+
+ fn run(&mut self, (): Self::SystemData)
+ {
+ for event in self.event_pump.poll_iter() {
+ match event {
+ Event::Quit { .. } => {
+ panic!("Quitting due to exit signal");
+ },
+ Event::Window {
+ win_event: WindowEvent::Resized(x, y),
+ ..
+ } => {
+ println!("Window resized to {}x{}", x, y);
+ },
+ _ => {},
+ }
+ }
+ }
+}
diff --git a/src/systems/mod.rs b/src/systems/mod.rs
new file mode 100644
index 0000000..2c2af6c
--- /dev/null
+++ b/src/systems/mod.rs
@@ -0,0 +1,5 @@
+pub mod draw;
+pub use self::draw::*;
+
+pub mod input;
+pub use self::input::*;