@@ -49,7 +49,9 @@ void collide_double_sided_vs_shape(const JPH::Shape *p_shape1, const JPH::Shape
49
49
const JoltCustomDoubleSidedShape *shape1 = static_cast <const JoltCustomDoubleSidedShape *>(p_shape1);
50
50
51
51
JPH::CollideShapeSettings new_collide_shape_settings = p_collide_shape_settings;
52
- new_collide_shape_settings.mBackFaceMode = JPH::EBackFaceMode::CollideWithBackFaces;
52
+ if (shape1->should_collide_with_back_faces ()) {
53
+ new_collide_shape_settings.mBackFaceMode = JPH::EBackFaceMode::CollideWithBackFaces;
54
+ }
53
55
54
56
JPH::CollisionDispatch::sCollideShapeVsShape (shape1->GetInnerShape (), p_shape2, p_scale1, p_scale2, p_center_of_mass_transform1, p_center_of_mass_transform2, p_sub_shape_id_creator1, p_sub_shape_id_creator2, new_collide_shape_settings, p_collector, p_shape_filter);
55
57
}
@@ -60,7 +62,9 @@ void collide_shape_vs_double_sided(const JPH::Shape *p_shape1, const JPH::Shape
60
62
const JoltCustomDoubleSidedShape *shape2 = static_cast <const JoltCustomDoubleSidedShape *>(p_shape2);
61
63
62
64
JPH::CollideShapeSettings new_collide_shape_settings = p_collide_shape_settings;
63
- new_collide_shape_settings.mBackFaceMode = JPH::EBackFaceMode::CollideWithBackFaces;
65
+ if (shape2->should_collide_with_back_faces ()) {
66
+ new_collide_shape_settings.mBackFaceMode = JPH::EBackFaceMode::CollideWithBackFaces;
67
+ }
64
68
65
69
JPH::CollisionDispatch::sCollideShapeVsShape (p_shape1, shape2->GetInnerShape (), p_scale1, p_scale2, p_center_of_mass_transform1, p_center_of_mass_transform2, p_sub_shape_id_creator1, p_sub_shape_id_creator2, new_collide_shape_settings, p_collector, p_shape_filter);
66
70
}
@@ -71,7 +75,9 @@ void cast_shape_vs_double_sided(const JPH::ShapeCast &p_shape_cast, const JPH::S
71
75
const JoltCustomDoubleSidedShape *shape = static_cast <const JoltCustomDoubleSidedShape *>(p_shape);
72
76
73
77
JPH::ShapeCastSettings new_shape_cast_settings = p_shape_cast_settings;
74
- new_shape_cast_settings.mBackFaceModeTriangles = JPH::EBackFaceMode::CollideWithBackFaces;
78
+ if (shape->should_collide_with_back_faces ()) {
79
+ new_shape_cast_settings.mBackFaceModeTriangles = JPH::EBackFaceMode::CollideWithBackFaces;
80
+ }
75
81
76
82
JPH::CollisionDispatch::sCastShapeVsShapeLocalSpace (p_shape_cast, new_shape_cast_settings, shape->GetInnerShape (), p_scale, p_shape_filter, p_center_of_mass_transform2, p_sub_shape_id_creator1, p_sub_shape_id_creator2, p_collector);
77
83
}
@@ -104,8 +110,7 @@ void JoltCustomDoubleSidedShape::register_type() {
104
110
105
111
void JoltCustomDoubleSidedShape::CastRay (const JPH::RayCast &p_ray, const JPH::RayCastSettings &p_ray_cast_settings, const JPH::SubShapeIDCreator &p_sub_shape_id_creator, JPH::CastRayCollector &p_collector, const JPH::ShapeFilter &p_shape_filter) const {
106
112
JPH::RayCastSettings new_ray_cast_settings = p_ray_cast_settings;
107
-
108
- if (!back_face_collision) {
113
+ if (!should_collide_with_back_faces ()) {
109
114
new_ray_cast_settings.SetBackFaceMode (JPH::EBackFaceMode::IgnoreBackFaces);
110
115
}
111
116
0 commit comments