Merge pull request 'Vertex Loading' (#10) from vertex-loader into master
Reviewed-on: https://git.batesirvintech.net/wesley/doom-oxidized/pulls/10
This commit is contained in:
65
src/doomlevel.rs
Normal file
65
src/doomlevel.rs
Normal file
@@ -0,0 +1,65 @@
|
||||
mod vertex;
|
||||
|
||||
use std::{
|
||||
fs::File,
|
||||
io::{Read, Seek, SeekFrom},
|
||||
};
|
||||
|
||||
use super::wadfile::WADFile;
|
||||
use vertex::Vertex;
|
||||
|
||||
enum Lumps {
|
||||
THINGS = 1,
|
||||
LINEDEFS,
|
||||
SIDEDEFS,
|
||||
VERTEXES,
|
||||
SEGS,
|
||||
SSECTORS,
|
||||
NODES,
|
||||
SECTORS,
|
||||
REJECT,
|
||||
BLOCKMAP,
|
||||
BEHAVIOR,
|
||||
}
|
||||
|
||||
pub struct DoomLevel {
|
||||
pub name: String,
|
||||
pub vertexes: Vec<Vertex>,
|
||||
}
|
||||
|
||||
impl DoomLevel {
|
||||
pub fn load_level(wad_file: &WADFile, lvl_index: u32) -> Self {
|
||||
Self {
|
||||
name: wad_file.get_lump_name(lvl_index),
|
||||
vertexes: load_vertexes(
|
||||
wad_file,
|
||||
wad_file.get_lump_offset(lvl_index + Lumps::VERTEXES as u32),
|
||||
wad_file.get_lump_size(lvl_index + Lumps::VERTEXES as u32),
|
||||
),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn load_vertexes(wad_file: &WADFile, offset: u32, size: u32) -> Vec<Vertex> {
|
||||
let num_vertex: u32 = size / 4u32;
|
||||
|
||||
let mut vertex_list: Vec<Vertex> = Vec::with_capacity(num_vertex as usize);
|
||||
|
||||
let mut vertex_data = File::open(&wad_file.wad_path).unwrap();
|
||||
vertex_data.seek(SeekFrom::Start(offset as u64)).unwrap();
|
||||
|
||||
for _ in 0..num_vertex {
|
||||
let mut x = [0; 2];
|
||||
let mut y = [0; 2];
|
||||
|
||||
vertex_data.read(&mut x).unwrap();
|
||||
vertex_data.read(&mut y).unwrap();
|
||||
|
||||
vertex_list.push(Vertex {
|
||||
x: i16::from_le_bytes(x),
|
||||
y: i16::from_le_bytes(y),
|
||||
});
|
||||
}
|
||||
|
||||
vertex_list
|
||||
}
|
||||
4
src/doomlevel/vertex.rs
Normal file
4
src/doomlevel/vertex.rs
Normal file
@@ -0,0 +1,4 @@
|
||||
pub struct Vertex {
|
||||
pub x: i16,
|
||||
pub y: i16,
|
||||
}
|
||||
15
src/main.rs
15
src/main.rs
@@ -1,9 +1,12 @@
|
||||
mod doomlevel;
|
||||
mod wadfile;
|
||||
|
||||
use doomlevel::DoomLevel;
|
||||
use wadfile::WADFile;
|
||||
|
||||
fn main() {
|
||||
let wad_file = WADFile::from_path("WADs/doom1.wad");
|
||||
let level = DoomLevel::load_level(&wad_file, wad_file.get_index_from_name("e1m1").unwrap());
|
||||
|
||||
println!(
|
||||
"WAD Path: {}
|
||||
@@ -32,8 +35,12 @@ Header:
|
||||
);
|
||||
}
|
||||
|
||||
println!(
|
||||
"Index of e1m1 is: {}",
|
||||
wad_file.get_index_from_name("e1m1").unwrap()
|
||||
);
|
||||
println!("\nFirst 20 Vertex Entries for E1M1:");
|
||||
|
||||
for i in 0..20 {
|
||||
println!(
|
||||
"\t{} - ({}, {})",
|
||||
i, level.vertexes[i].x, level.vertexes[i].y
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user