Added the ability to load vertex data from the WAD. Still needs some processing to make more robust, but for now is loading data.
52 lines
1.2 KiB
Rust
52 lines
1.2 KiB
Rust
use std::{
|
|
fs::File,
|
|
io::{self, Read},
|
|
path::Path,
|
|
};
|
|
|
|
/// Validates a WAD file to make sure that it is a legitimate file
|
|
///
|
|
/// Parameters:
|
|
/// - path: &str - Path to the WAD to validate
|
|
pub fn validate_wad(path: &str) -> io::Result<bool> {
|
|
let wad_file = Path::new(path);
|
|
|
|
// Check to see if the WAD exists
|
|
if !(wad_file.exists()) {
|
|
// Return back false because we didn't pass a valid file
|
|
return Ok(false);
|
|
}
|
|
|
|
// If the file exists open it and read the first 4 bytes
|
|
// of the file and see if we get "IWAD" or "PWAD"
|
|
let mut file = File::open(wad_file)?;
|
|
let mut magic = [0u8; 4];
|
|
file.read_exact(&mut magic)?;
|
|
|
|
// Now we return based on what we found
|
|
Ok(magic == *b"IWAD" || magic == *b"PWAD")
|
|
}
|
|
|
|
pub fn read_ascii(bytes: &[u8]) -> String {
|
|
std::str::from_utf8(&bytes[..bytes.len()])
|
|
.unwrap_or("")
|
|
.trim_end_matches('\0')
|
|
.to_string()
|
|
}
|
|
|
|
pub fn read_u32_le(bytes: &[u8]) -> u32 {
|
|
if bytes.len() < 4 {
|
|
0
|
|
} else {
|
|
u32::from_le_bytes(bytes[..4].try_into().unwrap())
|
|
}
|
|
}
|
|
|
|
pub fn read_i16_le(bytes: &[u8]) -> i16 {
|
|
if bytes.len() < 2 {
|
|
0
|
|
} else {
|
|
i16::from_le_bytes(bytes[..2].try_into().unwrap())
|
|
}
|
|
}
|