use sdl3::{render::Canvas, video::Window, EventPump, Sdl};
pub struct BaseSystem {
sdl_context: Sdl,
canvas: Canvas<Window>,
scale: f32,
}
pub const MSX_W1: u32 = 320;
pub const MSX_W2: u32 = 256;
pub const MSX_H: u32 = 192;
impl Default for BaseSystem {
fn default() -> Self {
Self::new(1.0)
}
}
impl BaseSystem {
pub fn new(scale: f32) -> Self {
let sdl_context = sdl3::init().unwrap();
let video_subsystem = sdl_context.video().unwrap();
let win_w: u32 = (MSX_W2 as f32 * scale * 1.5) as u32;
let win_h: u32 = (MSX_H as f32 * scale) as u32;
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,
scale,
}
}
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()
}
pub fn get_scale(&self) -> f32 {
self.scale
}
}