Lump Type Handling

Added in the ability for us to detect Vertex lump types. Every lump is
no longer being flagged as a LumpType::Unknown. Also added in the
testing framework to make sure that we are loading up the correct number
of vertex lumps from the wad file.
This commit is contained in:
2025-03-30 15:55:42 -04:00
parent bc4bf848c7
commit e6a0a54315
2 changed files with 26 additions and 6 deletions

View File

@@ -48,7 +48,7 @@ pub fn read_level_lump() {
pub fn read_vertex_lump() { pub fn read_vertex_lump() {
let wad_file = get_wad(); let wad_file = get_wad();
let vertex_lump = wad_file.get_vertex_lump(wad_file.directory[10].to_owned()); let vertex_lump = wad_file.get_vertex_lump(&wad_file.directory[10]);
assert_ne!(vertex_lump.vertexes.len(), 0); assert_ne!(vertex_lump.vertexes.len(), 0);
} }
@@ -57,7 +57,7 @@ pub fn read_vertex_lump() {
pub fn read_num_vertexes() { pub fn read_num_vertexes() {
let wad_file = get_wad(); let wad_file = get_wad();
let vertex_lump = wad_file.get_vertex_lump(wad_file.directory[10].to_owned()); let vertex_lump = wad_file.get_vertex_lump(&wad_file.directory[10]);
assert_eq!(vertex_lump.vertexes.len(), 1868 / 4); assert_eq!(vertex_lump.vertexes.len(), 1868 / 4);
} }
@@ -68,9 +68,26 @@ pub fn read_first_vertex() {
let wad_file = get_wad(); let wad_file = get_wad();
let vertex_lump = wad_file.get_vertex_lump(wad_file.directory[10].to_owned()); let vertex_lump = wad_file.get_vertex_lump(&wad_file.directory[10]);
let correct_vertex = Vertex { x: 1088, y: -3680 }; let correct_vertex = Vertex { x: 1088, y: -3680 };
assert_eq!(vertex_lump.get_vertex(0), correct_vertex); assert_eq!(vertex_lump.get_vertex(0), correct_vertex);
} }
#[test]
pub fn get_num_vertex_lumps() {
use crate::lumps::{Lump, LumpType};
let mut vetex_lumps: Vec<Lump> = Vec::new();
let wad_file = get_wad();
for entry in 0..wad_file.num_lumps as usize {
if let LumpType::Vertex = wad_file.directory[entry].lump_type {
vetex_lumps.push(wad_file.directory[entry].to_owned());
}
}
assert_eq!(vetex_lumps.len(), 9);
}

View File

@@ -37,7 +37,10 @@ impl WADFile {
let lump_offset = read_u32_le(&file_buffer[startpos..startpos + 4]); let lump_offset = read_u32_le(&file_buffer[startpos..startpos + 4]);
let size = read_u32_le(&file_buffer[startpos + 4..startpos + 8]); let size = read_u32_le(&file_buffer[startpos + 4..startpos + 8]);
let name = read_ascii(&file_buffer[startpos + 8..startpos + 16]); let name = read_ascii(&file_buffer[startpos + 8..startpos + 16]);
let lump_type = LumpType::Unknown; let lump_type = match name.as_str() {
"VERTEXES" => LumpType::Vertex,
_ => LumpType::Unknown,
};
lump_dir.push(Lump { lump_dir.push(Lump {
name, name,
offset: lump_offset, offset: lump_offset,
@@ -56,12 +59,12 @@ impl WADFile {
} }
} }
pub fn get_vertex_lump(&self, lump: Lump) -> VertexLump { pub fn get_vertex_lump(&self, lump: &Lump) -> VertexLump {
let lump_offset = lump.offset as usize; let lump_offset = lump.offset as usize;
let lump_size = lump.size as usize; let lump_size = lump.size as usize;
let lump_data = &self.data[lump_offset..lump_offset + lump_size]; let lump_data = &self.data[lump_offset..lump_offset + lump_size];
let lump_entries: usize = lump_size / 4; let lump_entries: usize = lump_size / 4;
let mut vertexes: Vec<Vertex> = Vec::with_capacity(lump_size / 4); let mut vertexes: Vec<Vertex> = Vec::with_capacity(lump_entries);
for entry in 0..lump_entries { for entry in 0..lump_entries {
let startpos = entry * 4; let startpos = entry * 4;