add SystemEventPump to wrap the sdl2 event pump struct
This commit is contained in:
parent
addd92c1f2
commit
9cb333454a
|
@ -187,3 +187,38 @@ impl From<sdl2::event::Event> for SystemEvent {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub trait SystemEventHandler {
|
||||||
|
/// Processes the data from the given [`SystemEvent`]. Returns true if the processing actually
|
||||||
|
/// recognized the passed event, or false if the event was ignored.
|
||||||
|
fn handle_event(&mut self, event: &SystemEvent) -> bool;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct SystemEventIterator<'a> {
|
||||||
|
iter: sdl2::event::EventPollIterator<'a>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Iterator for SystemEventIterator<'_> {
|
||||||
|
type Item = SystemEvent;
|
||||||
|
|
||||||
|
fn next(&mut self) -> Option<Self::Item> {
|
||||||
|
self.iter.next().map(|e| e.into())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct SystemEventPump {
|
||||||
|
sdl_event_pump: sdl2::EventPump,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl SystemEventPump {
|
||||||
|
pub fn from(pump: sdl2::EventPump) -> Self {
|
||||||
|
SystemEventPump {
|
||||||
|
sdl_event_pump: pump,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn poll_iter(&mut self) -> SystemEventIterator {
|
||||||
|
self.sdl_event_pump.pump_events();
|
||||||
|
SystemEventIterator { iter: self.sdl_event_pump.poll_iter() }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
use std::fmt::Formatter;
|
use std::fmt::Formatter;
|
||||||
|
|
||||||
use byte_slice_cast::AsByteSlice;
|
use byte_slice_cast::AsByteSlice;
|
||||||
use sdl2::{AudioSubsystem, EventPump, Sdl, TimerSubsystem, VideoSubsystem};
|
use sdl2::{AudioSubsystem, Sdl, TimerSubsystem, VideoSubsystem};
|
||||||
use sdl2::audio::AudioSpecDesired;
|
use sdl2::audio::AudioSpecDesired;
|
||||||
use sdl2::pixels::PixelFormatEnum;
|
use sdl2::pixels::PixelFormatEnum;
|
||||||
use sdl2::render::{Texture, WindowCanvas};
|
use sdl2::render::{Texture, WindowCanvas};
|
||||||
|
@ -310,6 +310,8 @@ impl SystemBuilder {
|
||||||
audio.resume();
|
audio.resume();
|
||||||
let audio_queue = AudioQueue::new(&audio);
|
let audio_queue = AudioQueue::new(&audio);
|
||||||
|
|
||||||
|
let event_pump = SystemEventPump::from(sdl_event_pump);
|
||||||
|
|
||||||
// create input device objects, exposed to the application
|
// create input device objects, exposed to the application
|
||||||
|
|
||||||
let keyboard = Keyboard::new();
|
let keyboard = Keyboard::new();
|
||||||
|
@ -323,7 +325,6 @@ impl SystemBuilder {
|
||||||
sdl_canvas,
|
sdl_canvas,
|
||||||
sdl_texture,
|
sdl_texture,
|
||||||
sdl_texture_pitch,
|
sdl_texture_pitch,
|
||||||
sdl_event_pump,
|
|
||||||
texture_pixels,
|
texture_pixels,
|
||||||
audio,
|
audio,
|
||||||
audio_queue,
|
audio_queue,
|
||||||
|
@ -332,6 +333,7 @@ impl SystemBuilder {
|
||||||
font,
|
font,
|
||||||
keyboard,
|
keyboard,
|
||||||
mouse,
|
mouse,
|
||||||
|
event_pump,
|
||||||
target_framerate: self.target_framerate,
|
target_framerate: self.target_framerate,
|
||||||
target_framerate_delta: None,
|
target_framerate_delta: None,
|
||||||
next_tick: 0,
|
next_tick: 0,
|
||||||
|
@ -351,7 +353,6 @@ pub struct System {
|
||||||
sdl_canvas: WindowCanvas,
|
sdl_canvas: WindowCanvas,
|
||||||
sdl_texture: Texture,
|
sdl_texture: Texture,
|
||||||
sdl_texture_pitch: usize,
|
sdl_texture_pitch: usize,
|
||||||
sdl_event_pump: EventPump,
|
|
||||||
|
|
||||||
texture_pixels: Box<[u32]>,
|
texture_pixels: Box<[u32]>,
|
||||||
|
|
||||||
|
@ -387,6 +388,8 @@ pub struct System {
|
||||||
/// The current mouse state. To ensure it is updated each frame, you should call
|
/// The current mouse state. To ensure it is updated each frame, you should call
|
||||||
/// [`System::do_events`] or [`System::do_events_with`] each frame.
|
/// [`System::do_events`] or [`System::do_events_with`] each frame.
|
||||||
pub mouse: Mouse,
|
pub mouse: Mouse,
|
||||||
|
|
||||||
|
pub event_pump: SystemEventPump,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl std::fmt::Debug for System {
|
impl std::fmt::Debug for System {
|
||||||
|
@ -481,8 +484,7 @@ impl System {
|
||||||
{
|
{
|
||||||
self.keyboard.update();
|
self.keyboard.update();
|
||||||
self.mouse.update();
|
self.mouse.update();
|
||||||
self.sdl_event_pump.pump_events();
|
for event in self.event_pump.poll_iter() {
|
||||||
for event in self.sdl_event_pump.poll_iter() {
|
|
||||||
let event = event.into();
|
let event = event.into();
|
||||||
self.keyboard.handle_event(&event);
|
self.keyboard.handle_event(&event);
|
||||||
self.mouse.handle_event(&event);
|
self.mouse.handle_event(&event);
|
||||||
|
|
Loading…
Reference in a new issue