diff options
Diffstat (limited to 'stockton-levels/src/q3/models.rs')
-rw-r--r-- | stockton-levels/src/q3/models.rs | 65 |
1 files changed, 0 insertions, 65 deletions
diff --git a/stockton-levels/src/q3/models.rs b/stockton-levels/src/q3/models.rs deleted file mode 100644 index a3de54a..0000000 --- a/stockton-levels/src/q3/models.rs +++ /dev/null @@ -1,65 +0,0 @@ -use super::Q3BspFile; -use crate::coords::CoordSystem; -use crate::helpers::{slice_to_u32, slice_to_vec3}; -use crate::traits::models::*; -use crate::types::{ParseError, Result}; - -const MODEL_SIZE: usize = (4 * 3 * 2) + (4 * 4); - -pub fn from_data(data: &[u8], n_faces: u32, n_brushes: u32) -> Result<Box<[Model]>> { - if data.len() % MODEL_SIZE != 0 { - return Err(ParseError::Invalid); - } - let n_models = data.len() / MODEL_SIZE; - - let mut models = Vec::with_capacity(n_models); - for n in 0..n_models { - let raw = &data[n * MODEL_SIZE..(n + 1) * MODEL_SIZE]; - - let mins = slice_to_vec3(&raw[0..12]); - let maxs = slice_to_vec3(&raw[12..24]); - - let faces_idx = { - let start = slice_to_u32(&raw[24..28]); - let n = slice_to_u32(&raw[28..32]); - - if start + n > n_faces { - return Err(ParseError::Invalid); - } - - start..start + n - }; - - let brushes_idx = { - let start = slice_to_u32(&raw[32..36]); - let n = slice_to_u32(&raw[36..40]); - - if start + n > n_brushes { - return Err(ParseError::Invalid); - } - - start..start + n - }; - - models.push(Model { - mins, - maxs, - faces_idx, - brushes_idx, - }) - } - - Ok(models.into_boxed_slice()) -} - -impl<T: CoordSystem> HasModels<T> for Q3BspFile<T> { - type ModelsIter<'a> = std::slice::Iter<'a, Model>; - - fn models_iter(&self) -> Self::ModelsIter<'_> { - self.models.iter() - } - - fn get_model(&self, index: u32) -> &Model { - &self.models[index as usize] - } -} |