use sdl3::{render::Canvas, video::Window, EventPump, Sdl};
pub struct BaseSystem {
sdl_context: Sdl,
canvas: Canvas<Window>,
}
pub const MSX_W1: u32 = 320;
pub const MSX_W2: u32 = 256;
pub const MSX_H: u32 = 192;
pub const SCALE: f32 = 2.0;
pub const WIN_W: u32 = (MSX_W2 as f32 * SCALE * 1.5) as u32;
pub const WIN_H: u32 = (MSX_H as f32 * SCALE) as u32;
impl Default for BaseSystem {
fn default() -> Self {
Self::new()
}
}
impl BaseSystem {
pub fn new() -> Self {
let sdl_context = sdl3::init().unwrap();
let video_subsystem = sdl_context.video().unwrap();
let window = video_subsystem
.window("rust-sdl3 msx demo", WIN_W, WIN_H)
.position_centered()
.build()
.map_err(|e| e.to_string())
.unwrap();
let canvas = window.into_canvas();
Self {
sdl_context,
canvas,
}
}
pub fn get_sdl_context(&mut self) -> &mut Sdl {
&mut self.sdl_context
}
pub fn get_canvas(&mut self) -> &mut Canvas<Window> {
&mut self.canvas
}
pub fn create_event_pump(&self) -> EventPump {
self.sdl_context.event_pump().unwrap()
}
}