WIP of doom renderer 5-12-23

WIP Implementation so far of doom renderer on 5-12-23
This commit is contained in:
Wesley Irvin
2023-05-12 21:44:37 -04:00
parent fed4e520f5
commit 39ebbe5ca3
2 changed files with 83 additions and 53 deletions

75
src/application.rs Normal file
View File

@@ -0,0 +1,75 @@
use sdl2::{
event::Event, keyboard::Keycode, pixels::Color, render::WindowCanvas, EventPump, Sdl,
VideoSubsystem,
};
use std::time::Duration;
pub struct Application {
sdl_context: Sdl,
video_subsystem: VideoSubsystem,
event_pump: EventPump,
main_window: WindowCanvas,
}
impl Application {
pub fn new() -> Result<Self, Box<dyn std::error::Error>> {
let new_sdl_context = sdl2::init()?;
let new_video_subsystem = new_sdl_context.video()?;
let new_event_subsystem = new_sdl_context.event_pump()?;
let new_window = new_video_subsystem
.window("Doom - Oxidized", 320, 240)
.position_centered()
.build()?;
let window_surface = new_window.into_canvas().build()?;
Ok(Self {
sdl_context: new_sdl_context,
video_subsystem: new_video_subsystem,
event_pump: new_event_subsystem,
main_window: window_surface,
})
}
pub fn video_subsystem(&self) -> &VideoSubsystem {
&self.video_subsystem
}
pub fn event_subsystem(&mut self) -> &mut EventPump {
&mut self.event_pump
}
pub fn sdl_context(&self) -> &Sdl {
&self.sdl_context
}
pub fn run(&mut self) -> Result<(), Box<dyn std::error::Error>> {
self.main_window.set_draw_color(Color::RGB(0, 255, 255));
self.main_window.clear();
self.main_window.present();
let mut i = 0;
'running: loop {
i = (i + 1) % 255;
self.main_window.set_draw_color(Color::RGB(i, 64, 255 - i));
self.main_window.clear();
for event in self.event_pump.poll_iter() {
match event {
Event::Quit { .. }
| Event::KeyDown {
keycode: Some(Keycode::Escape),
..
} => break 'running,
_ => {}
}
}
self.main_window.present();
::std::thread::sleep(Duration::new(0, 1_000_000_000u32 / 30));
}
Ok(())
}
}

View File

@@ -2,23 +2,16 @@ extern crate log;
extern crate sdl2; extern crate sdl2;
use env_logger::Builder; use env_logger::Builder;
use log::{error, info, warn, LevelFilter}; use log::{debug, error, info, warn, LevelFilter};
use sdl2::event::Event;
use sdl2::keyboard::Keycode;
use sdl2::pixels::Color;
use std::time::Duration;
mod application;
mod doomlevel; mod doomlevel;
mod wadfile; mod wadfile;
use application::Application;
use doomlevel::DoomLevel; use doomlevel::DoomLevel;
use wadfile::WADFile; use wadfile::WADFile;
static WIDTH: u32 = 320;
static HEIGHT: u32 = 200;
static SCALING: u32 = 4;
fn find_sdl_gl_driver() -> Option<u32> { fn find_sdl_gl_driver() -> Option<u32> {
for (index, item) in sdl2::render::drivers().enumerate() { for (index, item) in sdl2::render::drivers().enumerate() {
if item.name == "opengl" { if item.name == "opengl" {
@@ -28,7 +21,7 @@ fn find_sdl_gl_driver() -> Option<u32> {
None None
} }
fn main() -> Result<(), &'static str> { fn main() -> Result<(), Box<dyn std::error::Error>> {
let wad_file = WADFile::from_path("WADs/doom1.wad")?; let wad_file = WADFile::from_path("WADs/doom1.wad")?;
let level = DoomLevel::load_level(&wad_file, wad_file.get_index_from_name("e1m1").unwrap()); let level = DoomLevel::load_level(&wad_file, wad_file.get_index_from_name("e1m1").unwrap());
@@ -109,54 +102,16 @@ Flags:
level.linedefs[test_linedef].always_automap() level.linedefs[test_linedef].always_automap()
); );
Builder::new().filter_level(LevelFilter::Info).init(); Builder::new().filter_level(LevelFilter::Debug).init();
debug!("Test of the DEBUG log!");
info!("Test of INFO log!"); info!("Test of INFO log!");
warn!("Test of WARN log!"); warn!("Test of WARN log!");
error!("Test of ERROR log!"); error!("Test of ERROR log!");
let sdl_context = sdl2::init().unwrap(); let mut app = Application::new()?;
let video_subsystem = sdl_context.video().unwrap();
let window = video_subsystem app.run()?;
.window("Doom - Oxidized", WIDTH * SCALING, HEIGHT * SCALING)
.position_centered()
.opengl()
.build()
.unwrap();
let mut canvas = window
.into_canvas()
.index(find_sdl_gl_driver().unwrap())
.build()
.unwrap();
canvas.set_draw_color(Color::RGB(0, 255, 255));
canvas.clear();
canvas.present();
let mut event_pump = sdl_context.event_pump().unwrap();
let mut i = 0;
'running: loop {
i = (i + 1) % 255;
canvas.set_draw_color(Color::RGB(i, 64, 255 - i));
canvas.clear();
for event in event_pump.poll_iter() {
match event {
Event::Quit { .. }
| Event::KeyDown {
keycode: Some(Keycode::Escape),
..
} => break 'running,
_ => {}
}
}
canvas.present();
::std::thread::sleep(Duration::new(0, 1_000_000_000u32 / 30));
}
Ok(()) Ok(())
} }