fennel_engine/ecs/
sprite.rs

1use serde::{Deserialize, Serialize};
2use specs::{Join, ReadStorage, System, WriteExpect};
3
4use crate::app::App;
5
6pub struct HostPtr(pub *mut App);
7unsafe impl Send for HostPtr {}
8unsafe impl Sync for HostPtr {}
9
10#[derive(Deserialize, Serialize)]
11pub struct Sprite {
12    pub image: String,
13    pub position: (f32, f32)
14}
15
16impl specs::Component for Sprite {
17    type Storage = specs::VecStorage<Self>;
18}
19
20pub struct RenderingSystem;
21
22impl<'a> System<'a> for RenderingSystem {
23    type SystemData = (ReadStorage<'a, Sprite>, WriteExpect<'a, HostPtr>);
24
25    fn run(&mut self, (sprites, mut host_ptr): Self::SystemData) {
26        let runtime: &mut App = unsafe { &mut *host_ptr.0 };
27        let window = &mut runtime.window;
28
29        for sprite in (&sprites).join() {
30            window.graphics.draw_image(sprite.image.clone(), sprite.position).unwrap();
31        }
32    }
33}