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
}