From 7176c90542d628ec1f1ab3db2c626a2455637e03 Mon Sep 17 00:00:00 2001 From: Wesley Irvin Date: Thu, 27 Apr 2023 17:42:48 -0400 Subject: [PATCH] WAD Rework Reworked the code for loading and dealing with WAD files. The code now makes more sense and is much much easier to use. This should close issue #7. --- src/main.rs | 24 +++++++------- src/{wadutils => }/wadfile.rs | 34 ++++++++++++++++++- src/wadfile/directory.rs | 5 +++ src/wadutils.rs | 55 ------------------------------- src/wadutils/wadfile/directory.rs | 5 --- 5 files changed, 51 insertions(+), 72 deletions(-) rename src/{wadutils => }/wadfile.rs (72%) create mode 100644 src/wadfile/directory.rs delete mode 100644 src/wadutils.rs delete mode 100644 src/wadutils/wadfile/directory.rs diff --git a/src/main.rs b/src/main.rs index 515889f..7335f34 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,7 +1,9 @@ -mod wadutils; +mod wadfile; + +use wadfile::WADFile; fn main() { - let wad_file = wadutils::load_wad("WADs/doom1.wad"); + let wad_file = WADFile::from_path("WADs/doom1.wad"); println!( "WAD Path: {} @@ -11,11 +13,11 @@ Header: Lump Count: {} Initial Offset: {} Number of Found Lumps: {}", - wadutils::get_wad_path(&wad_file), - wadutils::get_wad_type(&wad_file), - wadutils::get_num_lumps(&wad_file), - wadutils::get_init_offset(&wad_file), - wadutils::get_directory_len(&wad_file) + wad_file.wad_path, + wad_file.identifier, + wad_file.num_lumps, + wad_file.init_offset, + wad_file.get_directory_len() ); println!("First 15 Directory Entries:"); @@ -24,14 +26,14 @@ Header: println!( "\t{}\tName {}\tPosition {}\tSize {}", i, - wadutils::get_lump_name(&wad_file, i), - wadutils::get_lump_offset(&wad_file, i), - wadutils::get_lump_size(&wad_file, i) + wad_file.get_lump_name(i), + wad_file.get_lump_offset(i), + wad_file.get_lump_size(i) ); } println!( "Index of e1m1 is: {}", - wadutils::get_index_from_name(&wad_file, "e1m1").unwrap() + wad_file.get_index_from_name("e1m1").unwrap() ); } diff --git a/src/wadutils/wadfile.rs b/src/wadfile.rs similarity index 72% rename from src/wadutils/wadfile.rs rename to src/wadfile.rs index 90a2e40..9933553 100644 --- a/src/wadutils/wadfile.rs +++ b/src/wadfile.rs @@ -1,4 +1,4 @@ -pub mod directory; +mod directory; use directory::Directory; use std::{ @@ -30,6 +30,38 @@ impl WADFile { lump_directory: lump_dir, } } + + pub fn get_lump_name(&self, index: u32) -> String { + self.lump_directory[index as usize].lump_name.to_owned() + } + + pub fn get_lump_offset(&self, index: u32) -> u32 { + self.lump_directory[index as usize].lump_pos.to_owned() + } + + pub fn get_lump_size(&self, index: u32) -> u32 { + self.lump_directory[index as usize].lump_size.to_owned() + } + + pub fn get_directory_len(&self) -> usize { + self.lump_directory.len() + } + + pub fn get_index_from_name(&self, lump_name: &str) -> Option { + let mut search_lump = lump_name.to_ascii_uppercase(); + + for _ in 0..8 - search_lump.len() { + search_lump.push(0 as char); + } + + for i in 0..self.num_lumps { + if self.lump_directory[i as usize].lump_name == search_lump { + return Some(i); + } + } + + None + } } fn get_lump_dir(path: &str, dir_offset: &u32, num_lumps: &u32, lump_buffer: &mut Vec) { diff --git a/src/wadfile/directory.rs b/src/wadfile/directory.rs new file mode 100644 index 0000000..c654666 --- /dev/null +++ b/src/wadfile/directory.rs @@ -0,0 +1,5 @@ +pub struct Directory { + pub lump_pos: u32, + pub lump_size: u32, + pub lump_name: String, +} diff --git a/src/wadutils.rs b/src/wadutils.rs deleted file mode 100644 index 4f879a4..0000000 --- a/src/wadutils.rs +++ /dev/null @@ -1,55 +0,0 @@ -mod wadfile; - -use wadfile::WADFile; - -pub fn load_wad(path: &str) -> WADFile { - WADFile::from_path(path) -} - -pub fn get_wad_path(wad_file: &WADFile) -> String { - wad_file.wad_path.to_string() -} - -pub fn get_wad_type(wad_file: &WADFile) -> String { - wad_file.identifier.to_string() -} - -pub fn get_num_lumps(wad_file: &WADFile) -> u32 { - wad_file.num_lumps -} - -pub fn get_init_offset(wad_file: &WADFile) -> u32 { - wad_file.init_offset -} - -pub fn get_lump_name(wad_file: &WADFile, index: u32) -> String { - wad_file.lump_directory[index as usize].lump_name.to_owned() -} - -pub fn get_lump_offset(wad_file: &WADFile, index: u32) -> u32 { - wad_file.lump_directory[index as usize].lump_pos.to_owned() -} - -pub fn get_lump_size(wad_file: &WADFile, index: u32) -> u32 { - wad_file.lump_directory[index as usize].lump_size.to_owned() -} - -pub fn get_directory_len(wad_file: &WADFile) -> usize { - wad_file.lump_directory.len() -} - -pub fn get_index_from_name(wad_file: &WADFile, lump_name: &str) -> Option { - let mut search_lump = lump_name.to_ascii_uppercase(); - - for _ in 0..8 - search_lump.len() { - search_lump.push(0 as char); - } - - for i in 0..wad_file.num_lumps { - if wad_file.lump_directory[i as usize].lump_name == search_lump { - return Some(i); - } - } - - None -} diff --git a/src/wadutils/wadfile/directory.rs b/src/wadutils/wadfile/directory.rs deleted file mode 100644 index 2df65e5..0000000 --- a/src/wadutils/wadfile/directory.rs +++ /dev/null @@ -1,5 +0,0 @@ -pub(in crate::wadutils) struct Directory { - pub(in crate::wadutils) lump_pos: u32, - pub(in crate::wadutils) lump_size: u32, - pub(in crate::wadutils) lump_name: String, -}