failed attempt to bypass bug (edge_faces returning two equivalent faces? [FaceVert,EdgeEdge])
This commit is contained in:
parent
dcdf57b389
commit
05999f73f4
@ -796,13 +796,12 @@ impl TouchingState{
|
|||||||
let minkowski=model_physics::MinkowskiMesh::minkowski_sum(model_mesh,hitbox_mesh.transformed_mesh());
|
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)|{
|
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
|
// 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
|
// 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 &[f0,f1]=minkowski.edge_faces(out_edge.as_undirected()).as_ref();
|
||||||
let (dst_face_n,_dst_face_d)=minkowski.face_nd(dst_face);
|
let (f0n,_f0d)=minkowski.face_nd(f0);
|
||||||
|
let (f1n,_f1d)=minkowski.face_nd(f1);
|
||||||
// are they exactly flush
|
// 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
|
// implicitly don't need to check d values because faces share two vertices
|
||||||
// && n0*d1==n1*d0
|
// && n0*d1==n1*d0
|
||||||
{
|
{
|
||||||
@ -810,7 +809,7 @@ impl TouchingState{
|
|||||||
time:relative_body.time+time.into(),
|
time:relative_body.time+time.into(),
|
||||||
instruction:InternalInstruction::CollisionTransfer(
|
instruction:InternalInstruction::CollisionTransfer(
|
||||||
*contact,
|
*contact,
|
||||||
dst_face,
|
if out_edge.parity(){f1}else{f0},
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user