failed attempt to bypass bug (edge_faces returning two equivalent faces? [FaceVert,EdgeEdge])

This commit is contained in:
Quaternions 2025-03-19 14:55:04 -07:00
parent dcdf57b389
commit 05999f73f4

@ -796,13 +796,12 @@ impl TouchingState{
let minkowski=model_physics::MinkowskiMesh::minkowski_sum(model_mesh,hitbox_mesh.transformed_mesh());
collector.collect(minkowski.predict_collision_face_out(&relative_body,start_time..collector.time(),contact.face_id).map(|(out_edge,time)|{
// TODO: determine if this code should go inside predict_collision_face_out
// check if the face across the out_edge is flush to contact.face_id
let (src_face_n,_src_face_d)=minkowski.face_nd(contact.face_id);
// the face across may be left or right depending on the directed edge parity
let dst_face=minkowski.edge_faces(out_edge.as_undirected()).as_ref()[out_edge.parity() as usize];
let (dst_face_n,_dst_face_d)=minkowski.face_nd(dst_face);
let &[f0,f1]=minkowski.edge_faces(out_edge.as_undirected()).as_ref();
let (f0n,_f0d)=minkowski.face_nd(f0);
let (f1n,_f1d)=minkowski.face_nd(f1);
// are they exactly flush
if src_face_n.cross(dst_face_n)==vec3::ZERO_6
if f0n.cross(f1n)==vec3::ZERO_6
// implicitly don't need to check d values because faces share two vertices
// && n0*d1==n1*d0
{
@ -810,7 +809,7 @@ impl TouchingState{
time:relative_body.time+time.into(),
instruction:InternalInstruction::CollisionTransfer(
*contact,
dst_face,
if out_edge.parity(){f1}else{f0},
),
}
}else{