mirror of
https://codeberg.org/icewind/vbsp.git
synced 2026-06-03 18:54:05 +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)
|
||||
}
|
||||
|
||||
#[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)]
|
||||
pub struct BSP {
|
||||
pub header: Header,
|
||||
|
|
@ -328,6 +415,8 @@ pub struct BSP {
|
|||
pub brush_sides: Vec<BrushSide>,
|
||||
pub vertexes: Vec<Vertex>,
|
||||
pub mesh_verts: Vec<MeshVert>,
|
||||
pub effects: Vec<Effect>,
|
||||
pub faces: Vec<Face>,
|
||||
}
|
||||
|
||||
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 vertexes = read_entry(&mut cursor, &dir_entries[10], read_vertex)?;
|
||||
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({
|
||||
BSP {
|
||||
header: header,
|
||||
|
|
@ -364,6 +455,8 @@ pub fn read_bsp(bytes: Vec<u8>) -> Result<BSP> {
|
|||
brush_sides: brush_sides,
|
||||
vertexes: vertexes,
|
||||
mesh_verts: mesh_verts,
|
||||
effects: effects,
|
||||
faces: faces,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue