diff options
Diffstat (limited to 'stockton-levels/src/q3/file.rs')
-rw-r--r-- | stockton-levels/src/q3/file.rs | 147 |
1 files changed, 0 insertions, 147 deletions
diff --git a/stockton-levels/src/q3/file.rs b/stockton-levels/src/q3/file.rs deleted file mode 100644 index f577fb0..0000000 --- a/stockton-levels/src/q3/file.rs +++ /dev/null @@ -1,147 +0,0 @@ -//! A complete BSP file - -// Trait implementations are stored in their own files. - -use bitvec::prelude::*; -use std::marker::PhantomData; - -use self::header::Header; -use crate::coords::*; -use crate::types::Result; - -use super::*; -use crate::traits::brushes::Brush; -use crate::traits::effects::Effect; -use crate::traits::entities::Entity; -use crate::traits::faces::Face; -use crate::traits::light_maps::LightMap; -use crate::traits::light_vols::LightVol; -use crate::traits::models::Model; -use crate::traits::planes::Plane; -use crate::traits::textures::Texture; -use crate::traits::tree::BspNode; -use crate::traits::vertices::{MeshVert, Vertex}; - -/// A parsed Quake 3 BSP File. -pub struct Q3BspFile<T: CoordSystem> { - pub(crate) visdata: Box<[BitBox<Local, u8>]>, - pub(crate) textures: Box<[Texture]>, - pub(crate) entities: Box<[Entity]>, - pub(crate) planes: Box<[Plane]>, - pub(crate) vertices: Box<[Vertex]>, - pub(crate) meshverts: Box<[MeshVert]>, - pub(crate) light_maps: Box<[LightMap]>, - pub(crate) light_vols: Box<[LightVol]>, - pub(crate) brushes: Box<[Brush]>, - pub(crate) effects: Box<[Effect]>, - pub(crate) faces: Box<[Face]>, - pub(crate) models: Box<[Model]>, - pub(crate) tree_root: BspNode, - _phantom: PhantomData<T>, -} - -impl Q3BspFile<Q3System> { - /// Parse `data` as a quake 3 bsp file. - pub fn parse_file(data: &[u8]) -> Result<Q3BspFile<Q3System>> { - let header = Header::from(data)?; - - let entities = entities::from_data(header.get_lump(&data, 0))?; - let textures = textures::from_data(header.get_lump(&data, 1))?; - let planes = planes::from_data(header.get_lump(&data, 2))?; - let vertices = vertices::verts_from_data(header.get_lump(&data, 10))?; - let meshverts = vertices::meshverts_from_data(header.get_lump(&data, 11))?; - let light_maps = light_maps::from_data(header.get_lump(&data, 14))?; - let light_vols = light_vols::from_data(header.get_lump(&data, 15))?; - let visdata = visdata::from_data(header.get_lump(&data, 16))?; - let brushes = brushes::from_data( - header.get_lump(&data, 8), - header.get_lump(&data, 9), - textures.len() as u32, - planes.len() as u32, - )?; - let effects = effects::from_data(header.get_lump(&data, 12), brushes.len() as u32)?; - let faces = faces::from_data( - header.get_lump(&data, 13), - textures.len() as u32, - effects.len() as u32, - vertices.len() as u32, - meshverts.len() as u32, - light_maps.len() as u32, - )?; - - let tree_root = tree::from_data( - header.get_lump(&data, 3), - header.get_lump(&data, 4), - header.get_lump(&data, 5), - header.get_lump(&data, 6), - faces.len() as u32, - brushes.len() as u32, - )?; - - let models = models::from_data( - header.get_lump(&data, 7), - faces.len() as u32, - brushes.len() as u32, - )?; - - Ok(Q3BspFile { - visdata, - textures, - entities, - planes, - vertices, - meshverts, - light_maps, - light_vols, - brushes, - effects, - faces, - tree_root, - models, - _phantom: PhantomData, - }) - } -} - -impl<T: CoordSystem> Q3BspFile<T> { - pub fn swizzle_to<D: CoordSystem>(mut self) -> Q3BspFile<D> - where - Swizzler: SwizzleFromTo<T, D>, - { - for vertex in self.vertices.iter_mut() { - Swizzler::swizzle(&mut vertex.normal); - Swizzler::swizzle(&mut vertex.position); - } - - for model in self.models.iter_mut() { - Swizzler::swizzle(&mut model.mins); - Swizzler::swizzle(&mut model.maxs); - } - - for face in self.faces.iter_mut() { - Swizzler::swizzle(&mut face.normal); - } - - for plane in self.planes.iter_mut() { - Swizzler::swizzle(&mut plane.normal); - } - - // TODO: Possibly don't need to move? - Q3BspFile { - visdata: self.visdata, - textures: self.textures, - entities: self.entities, - planes: self.planes, - vertices: self.vertices, - meshverts: self.meshverts, - light_maps: self.light_maps, - light_vols: self.light_vols, - brushes: self.brushes, - effects: self.effects, - faces: self.faces, - tree_root: self.tree_root, - models: self.models, - _phantom: PhantomData, - } - } -} |