main.rs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #[macro_use] extern crate specs_derive;
  2. #[macro_use] extern crate specs_system_macro;
  3. use ggez::graphics::Drawable;
  4. use specs::prelude::*;
  5. use specs::world::WorldExt;
  6. mod keys;
  7. use keys::Input;
  8. struct Game {
  9. pub world: specs::World,
  10. }
  11. impl Game {
  12. fn setup() -> Game {
  13. let mut world = specs::World::new();
  14. world.insert(Input::new());
  15. Game { world }
  16. }
  17. }
  18. impl ggez::event::EventHandler for Game {
  19. fn draw(&mut self, ctx: &mut ggez::Context) -> ggez::GameResult<()> {
  20. Ok(())
  21. }
  22. fn update(&mut self, _ctx: &mut ggez::Context) -> ggez::GameResult<()> {
  23. let input: &Input = &*self.world.read_resource();
  24. println!("{:?}", input);
  25. Ok(())
  26. }
  27. // to handle events, we modify the stored KeyState resource
  28. fn key_down_event(
  29. &mut self,
  30. ctx: &mut ggez::Context,
  31. keycode: winit::VirtualKeyCode,
  32. _keymod: ggez::event::KeyMods,
  33. _repeat: bool,
  34. ) {
  35. if keycode == winit::VirtualKeyCode::Escape {
  36. ggez::event::quit(ctx);
  37. }
  38. Input::handle_down(&mut self.world.write_resource(),
  39. keycode);
  40. }
  41. fn key_up_event(
  42. &mut self,
  43. _ctx: &mut ggez::Context,
  44. keycode: winit::VirtualKeyCode,
  45. _keymod: ggez::event::KeyMods,
  46. ) {
  47. Input::handle_up(&mut self.world.write_resource(),
  48. keycode);
  49. }
  50. }
  51. fn main() -> ggez::GameResult<()> {
  52. let (mut ctx, mut evloop) = ggez::ContextBuilder::new("game", "me")
  53. .window_mode(ggez::conf::WindowMode {
  54. width: 800.0,
  55. height: 600.0,
  56. ..ggez::conf::WindowMode::default()
  57. })
  58. .build()?;
  59. let mut game = Game::setup();
  60. ggez::event::run(&mut ctx, &mut evloop, &mut game)
  61. }