#[macro_use] extern crate specs_derive; #[macro_use] extern crate specs_system_macro; use ggez::graphics::Drawable; use specs::prelude::*; use specs::world::WorldExt; mod keys; use keys::Input; struct Game { pub world: specs::World, } impl Game { fn setup() -> Game { let mut world = specs::World::new(); world.insert(Input::new()); Game { world } } } impl ggez::event::EventHandler for Game { fn draw(&mut self, ctx: &mut ggez::Context) -> ggez::GameResult<()> { Ok(()) } fn update(&mut self, _ctx: &mut ggez::Context) -> ggez::GameResult<()> { let input: &Input = &*self.world.read_resource(); println!("{:?}", input); Ok(()) } // to handle events, we modify the stored KeyState resource fn key_down_event( &mut self, ctx: &mut ggez::Context, keycode: winit::VirtualKeyCode, _keymod: ggez::event::KeyMods, _repeat: bool, ) { if keycode == winit::VirtualKeyCode::Escape { ggez::event::quit(ctx); } Input::handle_down(&mut self.world.write_resource(), keycode); } fn key_up_event( &mut self, _ctx: &mut ggez::Context, keycode: winit::VirtualKeyCode, _keymod: ggez::event::KeyMods, ) { Input::handle_up(&mut self.world.write_resource(), keycode); } } fn main() -> ggez::GameResult<()> { let (mut ctx, mut evloop) = ggez::ContextBuilder::new("game", "me") .window_mode(ggez::conf::WindowMode { width: 800.0, height: 600.0, ..ggez::conf::WindowMode::default() }) .build()?; let mut game = Game::setup(); ggez::event::run(&mut ctx, &mut evloop, &mut game) }