From e6a0a54315681b9d3c01fbc3aa57b3114b78657d Mon Sep 17 00:00:00 2001 From: Wesley Irvin Date: Sun, 30 Mar 2025 15:55:42 -0400 Subject: [PATCH] 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. --- src/tests/wad.rs | 23 ++++++++++++++++++++--- src/wad/wadfile.rs | 9 ++++++--- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/tests/wad.rs b/src/tests/wad.rs index 27a1f02..404a2a2 100644 --- a/src/tests/wad.rs +++ b/src/tests/wad.rs @@ -48,7 +48,7 @@ pub fn read_level_lump() { pub fn read_vertex_lump() { 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); } @@ -57,7 +57,7 @@ pub fn read_vertex_lump() { pub fn read_num_vertexes() { 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); } @@ -68,9 +68,26 @@ pub fn read_first_vertex() { 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 }; 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 = 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); +} diff --git a/src/wad/wadfile.rs b/src/wad/wadfile.rs index 4491913..d32160c 100644 --- a/src/wad/wadfile.rs +++ b/src/wad/wadfile.rs @@ -37,7 +37,10 @@ impl WADFile { let lump_offset = read_u32_le(&file_buffer[startpos..startpos + 4]); let size = read_u32_le(&file_buffer[startpos + 4..startpos + 8]); 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 { name, 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_size = lump.size as usize; let lump_data = &self.data[lump_offset..lump_offset + lump_size]; let lump_entries: usize = lump_size / 4; - let mut vertexes: Vec = Vec::with_capacity(lump_size / 4); + let mut vertexes: Vec = Vec::with_capacity(lump_entries); for entry in 0..lump_entries { let startpos = entry * 4;