game/
game.rs

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}