Merge pull request #20727 from muiroc/fix_sw_sat_table

fixed godotphysics sat dispatch table
This commit is contained in:
Juan Linietsky 2018-08-08 09:49:48 -03:00 committed by GitHub
commit 978505a90a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 60 additions and 2 deletions

View File

@ -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 },
}; };