|
@@ -33,9 +33,9 @@
|
|
|
#include "physics_server_sw.h"
|
|
#include "physics_server_sw.h"
|
|
|
#include "project_settings.h"
|
|
#include "project_settings.h"
|
|
|
|
|
|
|
|
-_FORCE_INLINE_ static bool _match_object_type_query(CollisionObjectSW *p_object, uint32_t p_collision_layer, uint32_t p_type_mask) {
|
|
|
|
|
|
|
+_FORCE_INLINE_ static bool _match_object_type_query(CollisionObjectSW *p_object, uint32_t p_collision_mask, uint32_t p_type_mask) {
|
|
|
|
|
|
|
|
- if ((p_object->get_collision_layer() & p_collision_layer) == 0)
|
|
|
|
|
|
|
+ if ((p_object->get_collision_layer() & p_collision_mask) == 0)
|
|
|
return false;
|
|
return false;
|
|
|
|
|
|
|
|
if (p_object->get_type() == CollisionObjectSW::TYPE_AREA)
|
|
if (p_object->get_type() == CollisionObjectSW::TYPE_AREA)
|
|
@@ -46,7 +46,7 @@ _FORCE_INLINE_ static bool _match_object_type_query(CollisionObjectSW *p_object,
|
|
|
return (1 << body->get_mode()) & p_type_mask;
|
|
return (1 << body->get_mode()) & p_type_mask;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-int PhysicsDirectSpaceStateSW::intersect_point(const Vector3 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude, uint32_t p_collision_layer, uint32_t p_object_type_mask) {
|
|
|
|
|
|
|
+int PhysicsDirectSpaceStateSW::intersect_point(const Vector3 &p_point, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude, uint32_t p_collision_mask, uint32_t p_object_type_mask) {
|
|
|
|
|
|
|
|
ERR_FAIL_COND_V(space->locked, false);
|
|
ERR_FAIL_COND_V(space->locked, false);
|
|
|
int amount = space->broadphase->cull_point(p_point, space->intersection_query_results, SpaceSW::INTERSECTION_QUERY_MAX, space->intersection_query_subindex_results);
|
|
int amount = space->broadphase->cull_point(p_point, space->intersection_query_results, SpaceSW::INTERSECTION_QUERY_MAX, space->intersection_query_subindex_results);
|
|
@@ -59,7 +59,7 @@ int PhysicsDirectSpaceStateSW::intersect_point(const Vector3 &p_point, ShapeResu
|
|
|
if (cc >= p_result_max)
|
|
if (cc >= p_result_max)
|
|
|
break;
|
|
break;
|
|
|
|
|
|
|
|
- if (!_match_object_type_query(space->intersection_query_results[i], p_collision_layer, p_object_type_mask))
|
|
|
|
|
|
|
+ if (!_match_object_type_query(space->intersection_query_results[i], p_collision_mask, p_object_type_mask))
|
|
|
continue;
|
|
continue;
|
|
|
|
|
|
|
|
//area can't be picked by ray (default)
|
|
//area can't be picked by ray (default)
|
|
@@ -90,7 +90,7 @@ int PhysicsDirectSpaceStateSW::intersect_point(const Vector3 &p_point, ShapeResu
|
|
|
return cc;
|
|
return cc;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-bool PhysicsDirectSpaceStateSW::intersect_ray(const Vector3 &p_from, const Vector3 &p_to, RayResult &r_result, const Set<RID> &p_exclude, uint32_t p_collision_layer, uint32_t p_object_type_mask, bool p_pick_ray) {
|
|
|
|
|
|
|
+bool PhysicsDirectSpaceStateSW::intersect_ray(const Vector3 &p_from, const Vector3 &p_to, RayResult &r_result, const Set<RID> &p_exclude, uint32_t p_collision_mask, uint32_t p_object_type_mask, bool p_pick_ray) {
|
|
|
|
|
|
|
|
ERR_FAIL_COND_V(space->locked, false);
|
|
ERR_FAIL_COND_V(space->locked, false);
|
|
|
|
|
|
|
@@ -112,7 +112,7 @@ bool PhysicsDirectSpaceStateSW::intersect_ray(const Vector3 &p_from, const Vecto
|
|
|
|
|
|
|
|
for (int i = 0; i < amount; i++) {
|
|
for (int i = 0; i < amount; i++) {
|
|
|
|
|
|
|
|
- if (!_match_object_type_query(space->intersection_query_results[i], p_collision_layer, p_object_type_mask))
|
|
|
|
|
|
|
+ if (!_match_object_type_query(space->intersection_query_results[i], p_collision_mask, p_object_type_mask))
|
|
|
continue;
|
|
continue;
|
|
|
|
|
|
|
|
if (p_pick_ray && !(static_cast<CollisionObjectSW *>(space->intersection_query_results[i])->is_ray_pickable()))
|
|
if (p_pick_ray && !(static_cast<CollisionObjectSW *>(space->intersection_query_results[i])->is_ray_pickable()))
|
|
@@ -168,7 +168,7 @@ bool PhysicsDirectSpaceStateSW::intersect_ray(const Vector3 &p_from, const Vecto
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-int PhysicsDirectSpaceStateSW::intersect_shape(const RID &p_shape, const Transform &p_xform, real_t p_margin, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude, uint32_t p_collision_layer, uint32_t p_object_type_mask) {
|
|
|
|
|
|
|
+int PhysicsDirectSpaceStateSW::intersect_shape(const RID &p_shape, const Transform &p_xform, real_t p_margin, ShapeResult *r_results, int p_result_max, const Set<RID> &p_exclude, uint32_t p_collision_mask, uint32_t p_object_type_mask) {
|
|
|
|
|
|
|
|
if (p_result_max <= 0)
|
|
if (p_result_max <= 0)
|
|
|
return 0;
|
|
return 0;
|
|
@@ -189,7 +189,7 @@ int PhysicsDirectSpaceStateSW::intersect_shape(const RID &p_shape, const Transfo
|
|
|
if (cc >= p_result_max)
|
|
if (cc >= p_result_max)
|
|
|
break;
|
|
break;
|
|
|
|
|
|
|
|
- if (!_match_object_type_query(space->intersection_query_results[i], p_collision_layer, p_object_type_mask))
|
|
|
|
|
|
|
+ if (!_match_object_type_query(space->intersection_query_results[i], p_collision_mask, p_object_type_mask))
|
|
|
continue;
|
|
continue;
|
|
|
|
|
|
|
|
//area can't be picked by ray (default)
|
|
//area can't be picked by ray (default)
|
|
@@ -219,7 +219,7 @@ int PhysicsDirectSpaceStateSW::intersect_shape(const RID &p_shape, const Transfo
|
|
|
return cc;
|
|
return cc;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-bool PhysicsDirectSpaceStateSW::cast_motion(const RID &p_shape, const Transform &p_xform, const Vector3 &p_motion, real_t p_margin, real_t &p_closest_safe, real_t &p_closest_unsafe, const Set<RID> &p_exclude, uint32_t p_collision_layer, uint32_t p_object_type_mask, ShapeRestInfo *r_info) {
|
|
|
|
|
|
|
+bool PhysicsDirectSpaceStateSW::cast_motion(const RID &p_shape, const Transform &p_xform, const Vector3 &p_motion, real_t p_margin, real_t &p_closest_safe, real_t &p_closest_unsafe, const Set<RID> &p_exclude, uint32_t p_collision_mask, uint32_t p_object_type_mask, ShapeRestInfo *r_info) {
|
|
|
|
|
|
|
|
ShapeSW *shape = static_cast<PhysicsServerSW *>(PhysicsServer::get_singleton())->shape_owner.get(p_shape);
|
|
ShapeSW *shape = static_cast<PhysicsServerSW *>(PhysicsServer::get_singleton())->shape_owner.get(p_shape);
|
|
|
ERR_FAIL_COND_V(!shape, false);
|
|
ERR_FAIL_COND_V(!shape, false);
|
|
@@ -249,7 +249,7 @@ bool PhysicsDirectSpaceStateSW::cast_motion(const RID &p_shape, const Transform
|
|
|
|
|
|
|
|
for (int i = 0; i < amount; i++) {
|
|
for (int i = 0; i < amount; i++) {
|
|
|
|
|
|
|
|
- if (!_match_object_type_query(space->intersection_query_results[i], p_collision_layer, p_object_type_mask))
|
|
|
|
|
|
|
+ if (!_match_object_type_query(space->intersection_query_results[i], p_collision_mask, p_object_type_mask))
|
|
|
continue;
|
|
continue;
|
|
|
|
|
|
|
|
if (p_exclude.has(space->intersection_query_results[i]->get_self()))
|
|
if (p_exclude.has(space->intersection_query_results[i]->get_self()))
|
|
@@ -333,7 +333,7 @@ bool PhysicsDirectSpaceStateSW::cast_motion(const RID &p_shape, const Transform
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-bool PhysicsDirectSpaceStateSW::collide_shape(RID p_shape, const Transform &p_shape_xform, real_t p_margin, Vector3 *r_results, int p_result_max, int &r_result_count, const Set<RID> &p_exclude, uint32_t p_collision_layer, uint32_t p_object_type_mask) {
|
|
|
|
|
|
|
+bool PhysicsDirectSpaceStateSW::collide_shape(RID p_shape, const Transform &p_shape_xform, real_t p_margin, Vector3 *r_results, int p_result_max, int &r_result_count, const Set<RID> &p_exclude, uint32_t p_collision_mask, uint32_t p_object_type_mask) {
|
|
|
|
|
|
|
|
if (p_result_max <= 0)
|
|
if (p_result_max <= 0)
|
|
|
return 0;
|
|
return 0;
|
|
@@ -363,7 +363,7 @@ bool PhysicsDirectSpaceStateSW::collide_shape(RID p_shape, const Transform &p_sh
|
|
|
|
|
|
|
|
for (int i = 0; i < amount; i++) {
|
|
for (int i = 0; i < amount; i++) {
|
|
|
|
|
|
|
|
- if (!_match_object_type_query(space->intersection_query_results[i], p_collision_layer, p_object_type_mask))
|
|
|
|
|
|
|
+ if (!_match_object_type_query(space->intersection_query_results[i], p_collision_mask, p_object_type_mask))
|
|
|
continue;
|
|
continue;
|
|
|
|
|
|
|
|
const CollisionObjectSW *col_obj = space->intersection_query_results[i];
|
|
const CollisionObjectSW *col_obj = space->intersection_query_results[i];
|
|
@@ -412,7 +412,7 @@ static void _rest_cbk_result(const Vector3 &p_point_A, const Vector3 &p_point_B,
|
|
|
rd->best_object = rd->object;
|
|
rd->best_object = rd->object;
|
|
|
rd->best_shape = rd->shape;
|
|
rd->best_shape = rd->shape;
|
|
|
}
|
|
}
|
|
|
-bool PhysicsDirectSpaceStateSW::rest_info(RID p_shape, const Transform &p_shape_xform, real_t p_margin, ShapeRestInfo *r_info, const Set<RID> &p_exclude, uint32_t p_collision_layer, uint32_t p_object_type_mask) {
|
|
|
|
|
|
|
+bool PhysicsDirectSpaceStateSW::rest_info(RID p_shape, const Transform &p_shape_xform, real_t p_margin, ShapeRestInfo *r_info, const Set<RID> &p_exclude, uint32_t p_collision_mask, uint32_t p_object_type_mask) {
|
|
|
|
|
|
|
|
ShapeSW *shape = static_cast<PhysicsServerSW *>(PhysicsServer::get_singleton())->shape_owner.get(p_shape);
|
|
ShapeSW *shape = static_cast<PhysicsServerSW *>(PhysicsServer::get_singleton())->shape_owner.get(p_shape);
|
|
|
ERR_FAIL_COND_V(!shape, 0);
|
|
ERR_FAIL_COND_V(!shape, 0);
|
|
@@ -429,7 +429,7 @@ bool PhysicsDirectSpaceStateSW::rest_info(RID p_shape, const Transform &p_shape_
|
|
|
|
|
|
|
|
for (int i = 0; i < amount; i++) {
|
|
for (int i = 0; i < amount; i++) {
|
|
|
|
|
|
|
|
- if (!_match_object_type_query(space->intersection_query_results[i], p_collision_layer, p_object_type_mask))
|
|
|
|
|
|
|
+ if (!_match_object_type_query(space->intersection_query_results[i], p_collision_mask, p_object_type_mask))
|
|
|
continue;
|
|
continue;
|
|
|
|
|
|
|
|
const CollisionObjectSW *col_obj = space->intersection_query_results[i];
|
|
const CollisionObjectSW *col_obj = space->intersection_query_results[i];
|