From 502921e87708cbb21c25104612921131146c7495 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Thu, 7 Jan 2016 13:53:50 -0800 Subject: [PATCH] more consistency for collision group values --- libraries/physics/src/EntityMotionState.cpp | 6 +++--- libraries/shared/src/PhysicsCollisionGroups.h | 21 +++++++++++-------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/libraries/physics/src/EntityMotionState.cpp b/libraries/physics/src/EntityMotionState.cpp index cecc5c96b1..956ed9fedd 100644 --- a/libraries/physics/src/EntityMotionState.cpp +++ b/libraries/physics/src/EntityMotionState.cpp @@ -620,12 +620,12 @@ void EntityMotionState::computeCollisionGroupAndMask(int16_t& group, int16_t& ma case MOTION_TYPE_STATIC: group = BULLET_COLLISION_GROUP_STATIC; break; - case MOTION_TYPE_KINEMATIC: - group = BULLET_COLLISION_GROUP_KINEMATIC; - break; case MOTION_TYPE_DYNAMIC: group = BULLET_COLLISION_GROUP_DYNAMIC; break; + case MOTION_TYPE_KINEMATIC: + group = BULLET_COLLISION_GROUP_KINEMATIC; + break; default: break; } diff --git a/libraries/shared/src/PhysicsCollisionGroups.h b/libraries/shared/src/PhysicsCollisionGroups.h index 67862b7983..a86722a084 100644 --- a/libraries/shared/src/PhysicsCollisionGroups.h +++ b/libraries/shared/src/PhysicsCollisionGroups.h @@ -34,8 +34,8 @@ enum CollisionFilterGroups { * */ -const int16_t BULLET_COLLISION_GROUP_DYNAMIC = 1 << 0; -const int16_t BULLET_COLLISION_GROUP_STATIC = 1 << 1; +const int16_t BULLET_COLLISION_GROUP_STATIC = 1 << 0; +const int16_t BULLET_COLLISION_GROUP_DYNAMIC = 1 << 1; const int16_t BULLET_COLLISION_GROUP_KINEMATIC = 1 << 2; const int16_t BULLET_COLLISION_GROUP_MY_AVATAR = 1 << 3; const int16_t BULLET_COLLISION_GROUP_OTHER_AVATAR = 1 << 4; @@ -50,13 +50,15 @@ const int16_t BULLET_COLLISION_GROUP_COLLISIONLESS = 1 << 14; // the default collision mask is: collides with everything except collisionless const int16_t BULLET_COLLISION_MASK_DEFAULT = ~ BULLET_COLLISION_GROUP_COLLISIONLESS; -const int16_t BULLET_COLLISION_MASK_DYNAMIC = BULLET_COLLISION_MASK_DEFAULT; - -// STATIC is special: it collides with everything exept COLLISIONLESS and other STATIC +// STATIC does not collide with itself (as optimization of physics simulation) const int16_t BULLET_COLLISION_MASK_STATIC = ~ (BULLET_COLLISION_GROUP_COLLISIONLESS | BULLET_COLLISION_GROUP_STATIC); +const int16_t BULLET_COLLISION_MASK_DYNAMIC = BULLET_COLLISION_MASK_DEFAULT; const int16_t BULLET_COLLISION_MASK_KINEMATIC = BULLET_COLLISION_MASK_DEFAULT; -const int16_t BULLET_COLLISION_MASK_MY_AVATAR = BULLET_COLLISION_MASK_DEFAULT; + +// MY_AVATAR does not collide with itself +const int16_t BULLET_COLLISION_MASK_MY_AVATAR = ~(BULLET_COLLISION_GROUP_COLLISIONLESS | BULLET_COLLISION_GROUP_MY_AVATAR); + const int16_t BULLET_COLLISION_MASK_OTHER_AVATAR = BULLET_COLLISION_MASK_DEFAULT; // COLLISIONLESS gets an empty mask. @@ -64,15 +66,16 @@ const int16_t BULLET_COLLISION_MASK_COLLISIONLESS = 0; // The USER collision groups are exposed to script and can be used to generate per-object collision masks. -const uint8_t USER_COLLISION_GROUP_DYNAMIC = 1 << 0; -const uint8_t USER_COLLISION_GROUP_STATIC = 1 << 1; +// They are not necessarily the same as the BULLET_COLLISION_GROUPS, but we start them off with matching numbers. +const uint8_t USER_COLLISION_GROUP_STATIC = 1 << 0; +const uint8_t USER_COLLISION_GROUP_DYNAMIC = 1 << 1; const uint8_t USER_COLLISION_GROUP_KINEMATIC = 1 << 2; const uint8_t USER_COLLISION_GROUP_MY_AVATAR = 1 << 3; const uint8_t USER_COLLISION_GROUP_OTHER_AVATAR = 1 << 4; const uint8_t ENTITY_COLLISION_MASK_DEFAULT = - USER_COLLISION_GROUP_DYNAMIC | USER_COLLISION_GROUP_STATIC | + USER_COLLISION_GROUP_DYNAMIC | USER_COLLISION_GROUP_KINEMATIC | USER_COLLISION_GROUP_MY_AVATAR | USER_COLLISION_GROUP_OTHER_AVATAR;