Vertex Loading

Added the ability to load vertex data from the vertexes lump for
a given level. This is to close issue #5 to get vertex data
loading working.
This commit is contained in:
Wesley Irvin
2023-04-28 18:26:14 -04:00
parent 4a7a5c0f93
commit cd5f05daf5
3 changed files with 80 additions and 4 deletions

65
src/doomlevel.rs Normal file
View File

@@ -0,0 +1,65 @@
mod vertex;
use std::{
fs::File,
io::{Read, Seek, SeekFrom},
};
use super::wadfile::WADFile;
use vertex::Vertex;
enum Lumps {
THINGS = 1,
LINEDEFS,
SIDEDEFS,
VERTEXES,
SEGS,
SSECTORS,
NODES,
SECTORS,
REJECT,
BLOCKMAP,
BEHAVIOR,
}
pub struct DoomLevel {
pub name: String,
pub vertexes: Vec<Vertex>,
}
impl DoomLevel {
pub fn load_level(wad_file: &WADFile, lvl_index: u32) -> Self {
Self {
name: wad_file.get_lump_name(lvl_index),
vertexes: load_vertexes(
wad_file,
wad_file.get_lump_offset(lvl_index + Lumps::VERTEXES as u32),
wad_file.get_lump_size(lvl_index + Lumps::VERTEXES as u32),
),
}
}
}
fn load_vertexes(wad_file: &WADFile, offset: u32, size: u32) -> Vec<Vertex> {
let num_vertex: u32 = size / 4u32;
let mut vertex_list: Vec<Vertex> = Vec::with_capacity(num_vertex as usize);
let mut vertex_data = File::open(&wad_file.wad_path).unwrap();
vertex_data.seek(SeekFrom::Start(offset as u64)).unwrap();
for _ in 0..num_vertex {
let mut x = [0; 2];
let mut y = [0; 2];
vertex_data.read(&mut x).unwrap();
vertex_data.read(&mut y).unwrap();
vertex_list.push(Vertex {
x: i16::from_le_bytes(x),
y: i16::from_le_bytes(y),
});
}
vertex_list
}

4
src/doomlevel/vertex.rs Normal file
View File

@@ -0,0 +1,4 @@
pub struct Vertex {
pub x: i16,
pub y: i16,
}

View File

@@ -1,9 +1,12 @@
mod doomlevel;
mod wadfile; mod wadfile;
use doomlevel::DoomLevel;
use wadfile::WADFile; use wadfile::WADFile;
fn main() { fn main() {
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());
println!( println!(
"WAD Path: {} "WAD Path: {}
@@ -32,8 +35,12 @@ Header:
); );
} }
println!("\nFirst 20 Vertex Entries for E1M1:");
for i in 0..20 {
println!( println!(
"Index of e1m1 is: {}", "\t{} - ({}, {})",
wad_file.get_index_from_name("e1m1").unwrap() i, level.vertexes[i].x, level.vertexes[i].y
); );
}
} }