Merge pull request 'Error Rework / Code Refactor' (#17) from error-refactor into master
Reviewed-on: https://git.batesirvintech.net/wesley/doom-oxidized/pulls/17
This commit is contained in:
@@ -5,7 +5,7 @@ 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").unwrap();
|
||||||
let level = DoomLevel::load_level(&wad_file, wad_file.get_index_from_name("e1m1").unwrap());
|
let level = DoomLevel::load_level(&wad_file, wad_file.get_index_from_name("e1m1").unwrap());
|
||||||
|
|
||||||
println!(
|
println!(
|
||||||
@@ -66,7 +66,7 @@ Flags:
|
|||||||
\tSecret: {}
|
\tSecret: {}
|
||||||
\tBlocks Sound: {}
|
\tBlocks Sound: {}
|
||||||
\tNever Shows on Automap: {}
|
\tNever Shows on Automap: {}
|
||||||
\tAlways Shows on Automap {}",
|
\tAlways Shows on Automap: {}",
|
||||||
level.linedefs[test_linedef].start_vertex,
|
level.linedefs[test_linedef].start_vertex,
|
||||||
level.linedefs[test_linedef].end_vertex,
|
level.linedefs[test_linedef].end_vertex,
|
||||||
level.linedefs[test_linedef].flags,
|
level.linedefs[test_linedef].flags,
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ use directory::Directory;
|
|||||||
use std::{
|
use std::{
|
||||||
fs::File,
|
fs::File,
|
||||||
io::{Read, Seek, SeekFrom},
|
io::{Read, Seek, SeekFrom},
|
||||||
|
path::Path,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub struct WADFile {
|
pub struct WADFile {
|
||||||
@@ -15,20 +16,26 @@ pub struct WADFile {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl WADFile {
|
impl WADFile {
|
||||||
pub fn from_path(path: &str) -> Self {
|
pub fn from_path(path: &str) -> Result<Self, &str> {
|
||||||
|
let wad_file = Path::new(path);
|
||||||
|
|
||||||
|
if !(wad_file.exists()) {
|
||||||
|
return Err("Could not open file!");
|
||||||
|
}
|
||||||
|
|
||||||
let header_data = get_header_data(path);
|
let header_data = get_header_data(path);
|
||||||
|
|
||||||
let mut lump_dir: Vec<Directory> = Vec::with_capacity(header_data.1 as usize);
|
let mut lump_dir: Vec<Directory> = Vec::with_capacity(header_data.1 as usize);
|
||||||
|
|
||||||
get_lump_dir(path, &header_data.2, &header_data.1, &mut lump_dir);
|
get_lump_dir(path, &header_data.2, &header_data.1, &mut lump_dir);
|
||||||
|
|
||||||
Self {
|
Ok(Self {
|
||||||
wad_path: path.to_string(),
|
wad_path: path.to_string(),
|
||||||
identifier: header_data.0,
|
identifier: header_data.0,
|
||||||
num_lumps: header_data.1,
|
num_lumps: header_data.1,
|
||||||
init_offset: header_data.2,
|
init_offset: header_data.2,
|
||||||
lump_directory: lump_dir,
|
lump_directory: lump_dir,
|
||||||
}
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_lump_name(&self, index: u32) -> String {
|
pub fn get_lump_name(&self, index: u32) -> String {
|
||||||
@@ -74,20 +81,15 @@ fn get_lump_dir(path: &str, dir_offset: &u32, num_lumps: &u32, lump_buffer: &mut
|
|||||||
let mut lump_pos = [0; 4];
|
let mut lump_pos = [0; 4];
|
||||||
let mut lump_size = [0; 4];
|
let mut lump_size = [0; 4];
|
||||||
let mut lump_name = [0; 8];
|
let mut lump_name = [0; 8];
|
||||||
let mut name = String::with_capacity(8);
|
|
||||||
|
|
||||||
wad_data.read(&mut lump_pos).unwrap();
|
wad_data.read(&mut lump_pos).unwrap();
|
||||||
wad_data.read(&mut lump_size).unwrap();
|
wad_data.read(&mut lump_size).unwrap();
|
||||||
wad_data.read(&mut lump_name).unwrap();
|
wad_data.read(&mut lump_name).unwrap();
|
||||||
|
|
||||||
for letter in 0..lump_name.len() {
|
|
||||||
name.push(lump_name[letter] as char);
|
|
||||||
}
|
|
||||||
|
|
||||||
lump_buffer.push(Directory {
|
lump_buffer.push(Directory {
|
||||||
lump_pos: u32::from_le_bytes(lump_pos),
|
lump_pos: u32::from_le_bytes(lump_pos),
|
||||||
lump_size: u32::from_le_bytes(lump_size),
|
lump_size: u32::from_le_bytes(lump_size),
|
||||||
lump_name: name,
|
lump_name: String::from_utf8(lump_name.to_vec()).unwrap(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -95,23 +97,17 @@ fn get_lump_dir(path: &str, dir_offset: &u32, num_lumps: &u32, lump_buffer: &mut
|
|||||||
fn get_header_data(path: &str) -> (String, u32, u32) {
|
fn get_header_data(path: &str) -> (String, u32, u32) {
|
||||||
let mut wad_data = File::open(&path).unwrap();
|
let mut wad_data = File::open(&path).unwrap();
|
||||||
|
|
||||||
let mut header = [0; 12];
|
let mut wad_id = [0; 4];
|
||||||
|
let mut dir_size = [0; 4];
|
||||||
|
let mut dir_offset = [0; 4];
|
||||||
|
|
||||||
wad_data.read(&mut header).unwrap();
|
wad_data.read(&mut wad_id).unwrap();
|
||||||
|
wad_data.read(&mut dir_size).unwrap();
|
||||||
let mut wad_type = String::with_capacity(4);
|
wad_data.read(&mut dir_offset).unwrap();
|
||||||
|
|
||||||
wad_type.push(header[0] as char);
|
|
||||||
wad_type.push(header[1] as char);
|
|
||||||
wad_type.push(header[2] as char);
|
|
||||||
wad_type.push(header[3] as char);
|
|
||||||
|
|
||||||
let lump_bytes: [u8; 4] = [header[4], header[5], header[6], header[7]];
|
|
||||||
let offset_bytes: [u8; 4] = [header[8], header[9], header[10], header[11]];
|
|
||||||
|
|
||||||
(
|
(
|
||||||
wad_type,
|
String::from_utf8(wad_id.to_vec()).unwrap(),
|
||||||
u32::from_le_bytes(lump_bytes),
|
u32::from_le_bytes(dir_size),
|
||||||
u32::from_le_bytes(offset_bytes),
|
u32::from_le_bytes(dir_offset),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user