1use fennel_common::events::{KeyboardEvent, WindowEventHandler};
2use fennel_core::{
3 resources::{LoadableResource, loadable::Image},
4};
5use fennel_engine::{
6 components::sprite::Sprite,
7 runtime::{Runtime, RuntimeBuilder},
8};
9use specs::{Builder, WorldExt};
10
11struct MyGame;
12
13#[async_trait::async_trait]
14impl WindowEventHandler for MyGame {
15 type Host = Runtime;
16 fn update(&self, _runtime: &mut Runtime) -> anyhow::Result<()> {
17 Ok(())
18 }
19
20 fn draw(&self, runtime: &mut Runtime) -> anyhow::Result<()> {
21 runtime.window.graphics.canvas.clear();
22 runtime.window.graphics.canvas.present();
23 Ok(())
24 }
25
26 fn key_down_event(&self, _runtime: &mut Runtime, event: KeyboardEvent) -> anyhow::Result<()> {
27 println!("{:?}", event.keycode);
28 Ok(())
29 }
30}
31
32#[tokio::main]
33async fn main() -> anyhow::Result<()> {
34 let mut runtime = RuntimeBuilder::new()
35 .name("game")
36 .dimensions((500, 500))
37 .build()
38 .unwrap();
39 let sprite = Image::load(
40 "assets/example.png".into(),
41 &mut runtime.window.graphics,
42 None,
43 )?;
44 let sprite: &Image = fennel_core::resources::as_concrete(&sprite).unwrap();
45 runtime
46 .world
47 .create_entity()
48 .with(Sprite(sprite.clone()))
49 .build();
50 runtime.dispatcher.dispatch(&runtime.world);
51 runtime.run(MyGame).await?;
52 Ok(())
53}