mirror of
https://codeberg.org/icewind/vbsp.git
synced 2026-06-03 10:44:07 +02:00
Added Faces
Technically enough to start rendering!
This commit is contained in:
parent
d322159d1b
commit
5c388a308c
1 changed files with 93 additions and 0 deletions
93
src/lib.rs
93
src/lib.rs
|
|
@ -312,6 +312,93 @@ fn read_mesh_vert(cursor: &mut Cursor<Vec<u8>>) -> Result<MeshVert> {
|
||||||
Ok(mesh_vert)
|
Ok(mesh_vert)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct Effect {
|
||||||
|
pub name: String,
|
||||||
|
pub brush: i32,
|
||||||
|
pub unk: i32,
|
||||||
|
}
|
||||||
|
|
||||||
|
fn read_effect(cursor: &mut Cursor<Vec<u8>>) -> Result<Effect> {
|
||||||
|
let mut name = Vec::new();
|
||||||
|
for _ in 0..64 {
|
||||||
|
let data = cursor.read_u8()?;
|
||||||
|
if data != 0u8 {
|
||||||
|
name.push(data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let name = String::from_utf8(name).unwrap();
|
||||||
|
let brush = cursor.read_i32::<LittleEndian>()?;
|
||||||
|
let unk = cursor.read_i32::<LittleEndian>()?;
|
||||||
|
Ok(Effect {
|
||||||
|
name: name,
|
||||||
|
brush: brush,
|
||||||
|
unk: unk,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct Face {
|
||||||
|
pub texture: i32,
|
||||||
|
pub effect: i32,
|
||||||
|
pub face_type: i32,
|
||||||
|
pub vertex: i32,
|
||||||
|
pub num_vertexes: i32,
|
||||||
|
pub mesh_vert: i32,
|
||||||
|
pub num_mesh_verts: i32,
|
||||||
|
pub lm_index: i32,
|
||||||
|
pub lm_start: [i32; 2],
|
||||||
|
pub lm_size: [i32; 2],
|
||||||
|
pub lm_origin: [f32; 3],
|
||||||
|
pub lm_vecs: [[f32; 3]; 2],
|
||||||
|
pub normal: [f32; 3],
|
||||||
|
pub size: [i32; 2],
|
||||||
|
}
|
||||||
|
|
||||||
|
fn read_face(cursor: &mut Cursor<Vec<u8>>) -> Result<Face> {
|
||||||
|
let texture = cursor.read_i32::<LittleEndian>()?;
|
||||||
|
let effect = cursor.read_i32::<LittleEndian>()?;
|
||||||
|
let face_type = cursor.read_i32::<LittleEndian>()?;
|
||||||
|
let vertex = cursor.read_i32::<LittleEndian>()?;
|
||||||
|
let num_vertexes = cursor.read_i32::<LittleEndian>()?;
|
||||||
|
let mesh_vert = cursor.read_i32::<LittleEndian>()?;
|
||||||
|
let num_mesh_verts = cursor.read_i32::<LittleEndian>()?;
|
||||||
|
let lm_index = cursor.read_i32::<LittleEndian>()?;
|
||||||
|
let lm_start = [cursor.read_i32::<LittleEndian>()?, cursor.read_i32::<LittleEndian>()?];
|
||||||
|
let lm_size = [cursor.read_i32::<LittleEndian>()?, cursor.read_i32::<LittleEndian>()?];
|
||||||
|
let lm_origin = [cursor.read_f32::<LittleEndian>()?,
|
||||||
|
cursor.read_f32::<LittleEndian>()?,
|
||||||
|
cursor.read_f32::<LittleEndian>()?];
|
||||||
|
let lm_vec1 = [cursor.read_f32::<LittleEndian>()?,
|
||||||
|
cursor.read_f32::<LittleEndian>()?,
|
||||||
|
cursor.read_f32::<LittleEndian>()?];
|
||||||
|
let lm_vec2 = [cursor.read_f32::<LittleEndian>()?,
|
||||||
|
cursor.read_f32::<LittleEndian>()?,
|
||||||
|
cursor.read_f32::<LittleEndian>()?];
|
||||||
|
let lm_vecs = [lm_vec1, lm_vec2];
|
||||||
|
let normal = [cursor.read_f32::<LittleEndian>()?,
|
||||||
|
cursor.read_f32::<LittleEndian>()?,
|
||||||
|
cursor.read_f32::<LittleEndian>()?];
|
||||||
|
let size = [cursor.read_i32::<LittleEndian>()?, cursor.read_i32::<LittleEndian>()?];
|
||||||
|
let face = Face {
|
||||||
|
texture: texture,
|
||||||
|
effect: effect,
|
||||||
|
face_type: face_type,
|
||||||
|
vertex: vertex,
|
||||||
|
num_vertexes: num_vertexes,
|
||||||
|
mesh_vert: mesh_vert,
|
||||||
|
num_mesh_verts: num_mesh_verts,
|
||||||
|
lm_index: lm_index,
|
||||||
|
lm_start: lm_start,
|
||||||
|
lm_size: lm_size,
|
||||||
|
lm_origin: lm_origin,
|
||||||
|
lm_vecs: lm_vecs,
|
||||||
|
normal: normal,
|
||||||
|
size: size,
|
||||||
|
};
|
||||||
|
Ok(face)
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct BSP {
|
pub struct BSP {
|
||||||
pub header: Header,
|
pub header: Header,
|
||||||
|
|
@ -328,6 +415,8 @@ pub struct BSP {
|
||||||
pub brush_sides: Vec<BrushSide>,
|
pub brush_sides: Vec<BrushSide>,
|
||||||
pub vertexes: Vec<Vertex>,
|
pub vertexes: Vec<Vertex>,
|
||||||
pub mesh_verts: Vec<MeshVert>,
|
pub mesh_verts: Vec<MeshVert>,
|
||||||
|
pub effects: Vec<Effect>,
|
||||||
|
pub faces: Vec<Face>,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn read_bsp(bytes: Vec<u8>) -> Result<BSP> {
|
pub fn read_bsp(bytes: Vec<u8>) -> Result<BSP> {
|
||||||
|
|
@ -348,6 +437,8 @@ pub fn read_bsp(bytes: Vec<u8>) -> Result<BSP> {
|
||||||
let brush_sides = read_entry(&mut cursor, &dir_entries[9], read_brush_side)?;
|
let brush_sides = read_entry(&mut cursor, &dir_entries[9], read_brush_side)?;
|
||||||
let vertexes = read_entry(&mut cursor, &dir_entries[10], read_vertex)?;
|
let vertexes = read_entry(&mut cursor, &dir_entries[10], read_vertex)?;
|
||||||
let mesh_verts = read_entry(&mut cursor, &dir_entries[11], read_mesh_vert)?;
|
let mesh_verts = read_entry(&mut cursor, &dir_entries[11], read_mesh_vert)?;
|
||||||
|
let effects = read_entry(&mut cursor, &dir_entries[12], read_effect)?;
|
||||||
|
let faces = read_entry(&mut cursor, &dir_entries[13], read_face)?;
|
||||||
Ok({
|
Ok({
|
||||||
BSP {
|
BSP {
|
||||||
header: header,
|
header: header,
|
||||||
|
|
@ -364,6 +455,8 @@ pub fn read_bsp(bytes: Vec<u8>) -> Result<BSP> {
|
||||||
brush_sides: brush_sides,
|
brush_sides: brush_sides,
|
||||||
vertexes: vertexes,
|
vertexes: vertexes,
|
||||||
mesh_verts: mesh_verts,
|
mesh_verts: mesh_verts,
|
||||||
|
effects: effects,
|
||||||
|
faces: faces,
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue