From 6e7a72d8562d456442d9ba92d22d5a0694d43503 Mon Sep 17 00:00:00 2001 From: Yash Karandikar Date: Mon, 7 Mar 2022 10:20:05 -0600 Subject: [PATCH] Create custom events interface --- src/lib.rs | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 1e552b4..32aa2bc 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3,7 +3,7 @@ use std::{cell::Cell, path::Path}; use sdl2::{ render::Canvas, video::{Window, WindowBuildError, WindowSurfaceRef}, - IntegerOrSdlError, rect::Rect, surface::Surface, rwops::RWops, image::ImageRWops, + IntegerOrSdlError, rect::Rect, surface::Surface, rwops::RWops, image::ImageRWops, EventPump, event::EventPollIterator, }; pub use sdl2::event::Event; @@ -45,6 +45,30 @@ impl From for CatboxError { pub type Result = std::result::Result; +pub struct Events { + pump: EventPump +} + +impl AsRef for Events { + fn as_ref(&self) -> &EventPump { + &self.pump + } +} + +impl AsMut for Events { + fn as_mut(&mut self) -> &mut EventPump { + &mut self.pump + } +} + +impl Iterator for Events { + type Item = Event; + + fn next(&mut self) -> Option { + self.pump.poll_event() + } +} + pub struct Sprite { rect: Rect, surf: Surface<'static> @@ -86,7 +110,7 @@ impl Game { } } - pub fn run, Vec)>(&self, mut func: F) -> Result<()> { + pub fn run, &mut Events)>(&self, mut func: F) -> Result<()> { let sdl_context = sdl2::init()?; let video_subsystem = sdl_context.video()?; @@ -99,12 +123,15 @@ impl Game { let mut event_pump = sdl_context.event_pump()?; + let mut events = Events { + pump: event_pump + }; + loop { if self.stopped.get() { break; } - let events = event_pump.poll_iter().collect::>(); - func(&mut canvas, events); + func(&mut canvas, &mut events); canvas.present(); }