physics: cylinder hitbox
This commit is contained in:
parent
02615af1fd
commit
9e0c1b3c12
@ -215,7 +215,42 @@ impl PhysicsMesh{
|
||||
}
|
||||
}
|
||||
pub fn unit_cylinder()->Self{
|
||||
Self::unit_cube()
|
||||
const N:usize=24;
|
||||
let mut mb=model::MeshBuilder::new();
|
||||
let color=mb.acquire_color_id(model::Color4::ONE);
|
||||
let tex=mb.acquire_tex_id(model::TextureCoordinate::ZERO);
|
||||
let normal=mb.acquire_normal_id(vec3::ZERO);
|
||||
let mut verts=Vec::with_capacity(2*N);
|
||||
for i in 0..N{
|
||||
let (x,z)=integer::Angle32::raw((integer::Angle32::PI.get() as usize*i/N) as i32).cos_sin();
|
||||
//top
|
||||
let pos=mb.acquire_pos_id(Planar64Vec3::new([x,Planar64::ONE,z]));
|
||||
verts.push(mb.acquire_vertex_id(model::IndexedVertex{pos,color,tex,normal}));
|
||||
//bottom
|
||||
let pos=mb.acquire_pos_id(Planar64Vec3::new([x,Planar64::NEG_ONE,z]));
|
||||
verts.push(mb.acquire_vertex_id(model::IndexedVertex{pos,color,tex,normal}));
|
||||
}
|
||||
let mut polygon_list=Vec::with_capacity(N+2);
|
||||
// side faces
|
||||
for i in 0..N{
|
||||
polygon_list.push(vec![
|
||||
verts[i*2],
|
||||
verts[(i*2+2)%N],
|
||||
verts[(i*2+3)%N],
|
||||
verts[(i*2+1)%N],
|
||||
]);
|
||||
}
|
||||
// top face
|
||||
polygon_list.push((0..N).map(|i|verts[2*i]).collect());
|
||||
// bottom face
|
||||
polygon_list.push((0..N).map(|i|verts[2*i+1]).collect());
|
||||
let polygon_groups=vec![model::PolygonGroup::PolygonList(model::PolygonList::new(polygon_list))];
|
||||
let graphics_groups=vec![];
|
||||
let physics_groups=vec![model::IndexedPhysicsGroup{
|
||||
groups:vec![model::PolygonGroupId::new(0)],
|
||||
}];
|
||||
let mesh=&mb.build(polygon_groups,graphics_groups,physics_groups);
|
||||
mesh.try_into().unwrap()
|
||||
}
|
||||
#[inline]
|
||||
pub const fn complete_mesh(&self)->&PhysicsMeshTopology{
|
||||
|
Loading…
x
Reference in New Issue
Block a user