summaryrefslogtreecommitdiff
path: root/src/systems/draw.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/systems/draw.rs')
-rw-r--r--src/systems/draw.rs58
1 files changed, 58 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();
+ }
+}