fennel_engine/ecs/
sprite.rs1use 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}