diff --git a/lib/rbx_loader/src/primitives.rs b/lib/rbx_loader/src/primitives.rs index 7edd2f4..8dbb7ac 100644 --- a/lib/rbx_loader/src/primitives.rs +++ b/lib/rbx_loader/src/primitives.rs @@ -42,50 +42,6 @@ const CUBE_DEFAULT_NORMALS:[Planar64Vec3;6]=[ vec3::int( 0,-1, 0),//CubeFace::Bottom vec3::int( 0, 0,-1),//CubeFace::Front ]; -const CUBE_DEFAULT_POLYS:[[[u32;3];4];6]=[ - // right (1, 0, 0) - [ - [6,2,0],//[vertex,tex,norm] - [5,1,0], - [2,0,0], - [1,3,0], - ], - // top (0, 1, 0) - [ - [5,3,1], - [4,2,1], - [3,1,1], - [2,0,1], - ], - // back (0, 0, 1) - [ - [0,3,2], - [1,2,2], - [2,1,2], - [3,0,2], - ], - // left (-1, 0, 0) - [ - [0,2,3], - [3,1,3], - [4,0,3], - [7,3,3], - ], - // bottom (0,-1, 0) - [ - [1,1,4], - [0,0,4], - [7,3,4], - [6,2,4], - ], - // front (0, 0,-1) - [ - [4,1,5], - [5,0,5], - [6,3,5], - [7,2,5], - ], -]; #[derive(Hash,PartialEq,Eq)] pub enum WedgeFace{ @@ -132,8 +88,8 @@ impl CubeFaceDescription{ pub fn insert(&mut self,index:CubeFace,value:FaceDescription){ self.0[index as usize]=Some(value); } - pub fn pairs(self)->std::iter::FilterMap<std::iter::Enumerate<std::array::IntoIter<Option<FaceDescription>,6>>,impl FnMut((usize,Option<FaceDescription>))->Option<(usize,FaceDescription)>>{ - self.0.into_iter().enumerate().filter_map(|v|v.1.map(|u|(v.0,u))) + pub fn pairs(self)->impl Iterator<Item=(usize,FaceDescription)>{ + self.0.into_iter().enumerate().filter_map(|(i,v)|v.map(|u|(i,u))) } } pub fn unit_cube(render:RenderConfigId)->Mesh{ @@ -201,6 +157,50 @@ impl FaceDescription{ } } pub fn generate_partial_unit_cube(face_descriptions:CubeFaceDescription)->Mesh{ + const CUBE_DEFAULT_POLYS:[[[u32;3];4];6]=[ + // right (1, 0, 0) + [ + [6,2,0],//[vertex,tex,norm] + [5,1,0], + [2,0,0], + [1,3,0], + ], + // top (0, 1, 0) + [ + [5,3,1], + [4,2,1], + [3,1,1], + [2,0,1], + ], + // back (0, 0, 1) + [ + [0,3,2], + [1,2,2], + [2,1,2], + [3,0,2], + ], + // left (-1, 0, 0) + [ + [0,2,3], + [3,1,3], + [4,0,3], + [7,3,3], + ], + // bottom (0,-1, 0) + [ + [1,1,4], + [0,0,4], + [7,3,4], + [6,2,4], + ], + // front (0, 0,-1) + [ + [4,1,5], + [5,0,5], + [6,3,5], + [7,2,5], + ], + ]; let mut generated_pos=Vec::new(); let mut generated_tex=Vec::new(); let mut generated_normal=Vec::new(); @@ -279,35 +279,35 @@ pub fn generate_partial_unit_cube(face_descriptions:CubeFaceDescription)->Mesh{ } //don't think too hard about the copy paste because this is all going into the map tool eventually... pub fn generate_partial_unit_wedge(face_descriptions:WedgeFaceDescription)->Mesh{ - let wedge_default_polys=[ + const WEDGE_DEFAULT_POLYS:[&[[u32;3]];5]=[ // right (1, 0, 0) - vec![ + &[ [6,2,0],//[vertex,tex,norm] [2,0,0], [1,3,0], ], // FrontTop (0, 1, -1) - vec![ + &[ [3,1,1], [2,0,1], [6,3,1], [7,2,1], ], // back (0, 0, 1) - vec![ + &[ [0,3,2], [1,2,2], [2,1,2], [3,0,2], ], // left (-1, 0, 0) - vec![ + &[ [0,2,3], [3,1,3], [7,3,3], ], // bottom (0,-1, 0) - vec![ + &[ [1,1,4], [0,0,4], [7,3,4], @@ -351,7 +351,7 @@ pub fn generate_partial_unit_wedge(face_descriptions:WedgeFaceDescription)->Mesh //push vertices as they are needed let group_id=PolygonGroupId::new(polygon_groups.len() as u32); polygon_groups.push(PolygonGroup::PolygonList(PolygonList::new(vec![ - wedge_default_polys[face_id].iter().map(|tup|{ + WEDGE_DEFAULT_POLYS[face_id].iter().map(|tup|{ let pos=CUBE_DEFAULT_VERTICES[tup[0] as usize]; let pos_index=if let Some(pos_index)=generated_pos.iter().position(|&p|p==pos){ pos_index @@ -392,34 +392,34 @@ pub fn generate_partial_unit_wedge(face_descriptions:WedgeFaceDescription)->Mesh } pub fn generate_partial_unit_cornerwedge(face_descriptions:CornerWedgeFaceDescription)->Mesh{ - let cornerwedge_default_polys=[ + const CORNERWEDGE_DEFAULT_POLYS:[&[[u32;3]];5]=[ // right (1, 0, 0) - vec![ + &[ [6,2,0],//[vertex,tex,norm] [5,1,0], [1,3,0], ], // BackTop (0, 1, 1) - vec![ + &[ [5,3,1], [0,1,1], [1,0,1], ], // LeftTop (-1, 1, 0) - vec![ + &[ [5,3,2], [7,2,2], [0,1,2], ], // bottom (0,-1, 0) - vec![ + &[ [1,1,3], [0,0,3], [7,3,3], [6,2,3], ], // front (0, 0,-1) - vec![ + &[ [5,0,4], [6,3,4], [7,2,4], @@ -462,7 +462,7 @@ pub fn generate_partial_unit_cornerwedge(face_descriptions:CornerWedgeFaceDescri //push vertices as they are needed let group_id=PolygonGroupId::new(polygon_groups.len() as u32); polygon_groups.push(PolygonGroup::PolygonList(PolygonList::new(vec![ - cornerwedge_default_polys[face_id].iter().map(|tup|{ + CORNERWEDGE_DEFAULT_POLYS[face_id].iter().map(|tup|{ let pos=CUBE_DEFAULT_VERTICES[tup[0] as usize]; let pos_index=if let Some(pos_index)=generated_pos.iter().position(|&p|p==pos){ pos_index