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;
|
mod wadfile;
|
||||||
|
|
||||||
|
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");
|
||||||
|
let level = DoomLevel::load_level(&wad_file, wad_file.get_index_from_name("e1m1").unwrap());
|
||||||
|
|
||||||
println!(
|
println!(
|
||||||
"WAD Path: {}
|
"WAD Path: {}
|
||||||
@@ -32,8 +35,12 @@ Header:
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
println!(
|
println!("\nFirst 20 Vertex Entries for E1M1:");
|
||||||
"Index of e1m1 is: {}",
|
|
||||||
wad_file.get_index_from_name("e1m1").unwrap()
|
for i in 0..20 {
|
||||||
);
|
println!(
|
||||||
|
"\t{} - ({}, {})",
|
||||||
|
i, level.vertexes[i].x, level.vertexes[i].y
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user