Merge pull request #20727 from muiroc/fix_sw_sat_table
fixed godotphysics sat dispatch table
This commit is contained in:
commit
978505a90a
|
@ -559,6 +559,12 @@ static void _collision_sphere_capsule(const ShapeSW *p_a, const Transform &p_tra
|
||||||
separator.generate_contacts();
|
separator.generate_contacts();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <bool withMargin>
|
||||||
|
static void _collision_sphere_cylinder(const ShapeSW *p_a, const Transform &p_transform_a, const ShapeSW *p_b, const Transform &p_transform_b, _CollectorCallback *p_collector, real_t p_margin_a, real_t p_margin_b) {
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
template <bool withMargin>
|
template <bool withMargin>
|
||||||
static void _collision_sphere_convex_polygon(const ShapeSW *p_a, const Transform &p_transform_a, const ShapeSW *p_b, const Transform &p_transform_b, _CollectorCallback *p_collector, real_t p_margin_a, real_t p_margin_b) {
|
static void _collision_sphere_convex_polygon(const ShapeSW *p_a, const Transform &p_transform_a, const ShapeSW *p_b, const Transform &p_transform_b, _CollectorCallback *p_collector, real_t p_margin_a, real_t p_margin_b) {
|
||||||
|
|
||||||
|
@ -850,6 +856,12 @@ static void _collision_box_capsule(const ShapeSW *p_a, const Transform &p_transf
|
||||||
separator.generate_contacts();
|
separator.generate_contacts();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <bool withMargin>
|
||||||
|
static void _collision_box_cylinder(const ShapeSW *p_a, const Transform &p_transform_a, const ShapeSW *p_b, const Transform &p_transform_b, _CollectorCallback *p_collector, real_t p_margin_a, real_t p_margin_b) {
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
template <bool withMargin>
|
template <bool withMargin>
|
||||||
static void _collision_box_convex_polygon(const ShapeSW *p_a, const Transform &p_transform_a, const ShapeSW *p_b, const Transform &p_transform_b, _CollectorCallback *p_collector, real_t p_margin_a, real_t p_margin_b) {
|
static void _collision_box_convex_polygon(const ShapeSW *p_a, const Transform &p_transform_a, const ShapeSW *p_b, const Transform &p_transform_b, _CollectorCallback *p_collector, real_t p_margin_a, real_t p_margin_b) {
|
||||||
|
|
||||||
|
@ -1126,6 +1138,12 @@ static void _collision_capsule_capsule(const ShapeSW *p_a, const Transform &p_tr
|
||||||
separator.generate_contacts();
|
separator.generate_contacts();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <bool withMargin>
|
||||||
|
static void _collision_capsule_cylinder(const ShapeSW *p_a, const Transform &p_transform_a, const ShapeSW *p_b, const Transform &p_transform_b, _CollectorCallback *p_collector, real_t p_margin_a, real_t p_margin_b) {
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
template <bool withMargin>
|
template <bool withMargin>
|
||||||
static void _collision_capsule_convex_polygon(const ShapeSW *p_a, const Transform &p_transform_a, const ShapeSW *p_b, const Transform &p_transform_b, _CollectorCallback *p_collector, real_t p_margin_a, real_t p_margin_b) {
|
static void _collision_capsule_convex_polygon(const ShapeSW *p_a, const Transform &p_transform_a, const ShapeSW *p_b, const Transform &p_transform_b, _CollectorCallback *p_collector, real_t p_margin_a, real_t p_margin_b) {
|
||||||
|
|
||||||
|
@ -1246,6 +1264,24 @@ static void _collision_capsule_face(const ShapeSW *p_a, const Transform &p_trans
|
||||||
separator.generate_contacts();
|
separator.generate_contacts();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <bool withMargin>
|
||||||
|
static void _collision_cylinder_cylinder(const ShapeSW *p_a, const Transform &p_transform_a, const ShapeSW *p_b, const Transform &p_transform_b, _CollectorCallback *p_collector, real_t p_margin_a, real_t p_margin_b) {
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <bool withMargin>
|
||||||
|
static void _collision_cylinder_convex_polygon(const ShapeSW *p_a, const Transform &p_transform_a, const ShapeSW *p_b, const Transform &p_transform_b, _CollectorCallback *p_collector, real_t p_margin_a, real_t p_margin_b) {
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <bool withMargin>
|
||||||
|
static void _collision_cylinder_face(const ShapeSW *p_a, const Transform &p_transform_a, const ShapeSW *p_b, const Transform &p_transform_b, _CollectorCallback *p_collector, real_t p_margin_a, real_t p_margin_b) {
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
template <bool withMargin>
|
template <bool withMargin>
|
||||||
static void _collision_convex_polygon_convex_polygon(const ShapeSW *p_a, const Transform &p_transform_a, const ShapeSW *p_b, const Transform &p_transform_b, _CollectorCallback *p_collector, real_t p_margin_a, real_t p_margin_b) {
|
static void _collision_convex_polygon_convex_polygon(const ShapeSW *p_a, const Transform &p_transform_a, const ShapeSW *p_b, const Transform &p_transform_b, _CollectorCallback *p_collector, real_t p_margin_a, real_t p_margin_b) {
|
||||||
|
|
||||||
|
@ -1475,23 +1511,33 @@ bool sat_calculate_penetration(const ShapeSW *p_shape_A, const Transform &p_tran
|
||||||
ERR_FAIL_COND_V(type_B == PhysicsServer::SHAPE_RAY, false);
|
ERR_FAIL_COND_V(type_B == PhysicsServer::SHAPE_RAY, false);
|
||||||
ERR_FAIL_COND_V(p_shape_B->is_concave(), false);
|
ERR_FAIL_COND_V(p_shape_B->is_concave(), false);
|
||||||
|
|
||||||
static const CollisionFunc collision_table[5][5] = {
|
static const CollisionFunc collision_table[6][6] = {
|
||||||
{ _collision_sphere_sphere<false>,
|
{ _collision_sphere_sphere<false>,
|
||||||
_collision_sphere_box<false>,
|
_collision_sphere_box<false>,
|
||||||
_collision_sphere_capsule<false>,
|
_collision_sphere_capsule<false>,
|
||||||
|
_collision_sphere_cylinder<false>,
|
||||||
_collision_sphere_convex_polygon<false>,
|
_collision_sphere_convex_polygon<false>,
|
||||||
_collision_sphere_face<false> },
|
_collision_sphere_face<false> },
|
||||||
{ 0,
|
{ 0,
|
||||||
_collision_box_box<false>,
|
_collision_box_box<false>,
|
||||||
_collision_box_capsule<false>,
|
_collision_box_capsule<false>,
|
||||||
|
_collision_box_cylinder<false>,
|
||||||
_collision_box_convex_polygon<false>,
|
_collision_box_convex_polygon<false>,
|
||||||
_collision_box_face<false> },
|
_collision_box_face<false> },
|
||||||
{ 0,
|
{ 0,
|
||||||
0,
|
0,
|
||||||
_collision_capsule_capsule<false>,
|
_collision_capsule_capsule<false>,
|
||||||
|
_collision_capsule_cylinder<false>,
|
||||||
_collision_capsule_convex_polygon<false>,
|
_collision_capsule_convex_polygon<false>,
|
||||||
_collision_capsule_face<false> },
|
_collision_capsule_face<false> },
|
||||||
{ 0,
|
{ 0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
_collision_cylinder_cylinder<false>,
|
||||||
|
_collision_cylinder_convex_polygon<false>,
|
||||||
|
_collision_cylinder_face<false> },
|
||||||
|
{ 0,
|
||||||
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
_collision_convex_polygon_convex_polygon<false>,
|
_collision_convex_polygon_convex_polygon<false>,
|
||||||
|
@ -1500,26 +1546,37 @@ bool sat_calculate_penetration(const ShapeSW *p_shape_A, const Transform &p_tran
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
|
0,
|
||||||
0 },
|
0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
static const CollisionFunc collision_table_margin[5][5] = {
|
static const CollisionFunc collision_table_margin[6][6] = {
|
||||||
{ _collision_sphere_sphere<true>,
|
{ _collision_sphere_sphere<true>,
|
||||||
_collision_sphere_box<true>,
|
_collision_sphere_box<true>,
|
||||||
_collision_sphere_capsule<true>,
|
_collision_sphere_capsule<true>,
|
||||||
|
_collision_sphere_cylinder<true>,
|
||||||
_collision_sphere_convex_polygon<true>,
|
_collision_sphere_convex_polygon<true>,
|
||||||
_collision_sphere_face<true> },
|
_collision_sphere_face<true> },
|
||||||
{ 0,
|
{ 0,
|
||||||
_collision_box_box<true>,
|
_collision_box_box<true>,
|
||||||
_collision_box_capsule<true>,
|
_collision_box_capsule<true>,
|
||||||
|
_collision_box_cylinder<true>,
|
||||||
_collision_box_convex_polygon<true>,
|
_collision_box_convex_polygon<true>,
|
||||||
_collision_box_face<true> },
|
_collision_box_face<true> },
|
||||||
{ 0,
|
{ 0,
|
||||||
0,
|
0,
|
||||||
_collision_capsule_capsule<true>,
|
_collision_capsule_capsule<true>,
|
||||||
|
_collision_capsule_cylinder<true>,
|
||||||
_collision_capsule_convex_polygon<true>,
|
_collision_capsule_convex_polygon<true>,
|
||||||
_collision_capsule_face<true> },
|
_collision_capsule_face<true> },
|
||||||
{ 0,
|
{ 0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
_collision_cylinder_cylinder<true>,
|
||||||
|
_collision_cylinder_convex_polygon<true>,
|
||||||
|
_collision_cylinder_face<true> },
|
||||||
|
{ 0,
|
||||||
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
_collision_convex_polygon_convex_polygon<true>,
|
_collision_convex_polygon_convex_polygon<true>,
|
||||||
|
@ -1528,6 +1585,7 @@ bool sat_calculate_penetration(const ShapeSW *p_shape_A, const Transform &p_tran
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
|
0,
|
||||||
0 },
|
0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue