diff --git a/interface/src/avatar/AvatarMotionState.cpp b/interface/src/avatar/AvatarMotionState.cpp index 7a5fb5662c..06da384a94 100644 --- a/interface/src/avatar/AvatarMotionState.cpp +++ b/interface/src/avatar/AvatarMotionState.cpp @@ -10,7 +10,7 @@ // #include -#include +#include #include "Avatar.h" #include "AvatarMotionState.h" diff --git a/libraries/physics/src/DynamicCharacterController.cpp b/libraries/physics/src/DynamicCharacterController.cpp index b55975c11a..1fca236f63 100644 --- a/libraries/physics/src/DynamicCharacterController.cpp +++ b/libraries/physics/src/DynamicCharacterController.cpp @@ -3,9 +3,10 @@ #include #include +#include + #include "BulletUtil.h" #include "DynamicCharacterController.h" -#include "PhysicsEngine.h" const btVector3 LOCAL_UP_AXIS(0.0f, 1.0f, 0.0f); const float DEFAULT_GRAVITY = -5.0f; diff --git a/libraries/physics/src/EntityMotionState.cpp b/libraries/physics/src/EntityMotionState.cpp index c7cbca7ea7..9bac73c945 100644 --- a/libraries/physics/src/EntityMotionState.cpp +++ b/libraries/physics/src/EntityMotionState.cpp @@ -11,6 +11,7 @@ #include #include +#include #include "BulletUtil.h" #include "EntityMotionState.h" diff --git a/libraries/physics/src/PhysicsEngine.cpp b/libraries/physics/src/PhysicsEngine.cpp index 5d6823c403..c27eaafdfd 100644 --- a/libraries/physics/src/PhysicsEngine.cpp +++ b/libraries/physics/src/PhysicsEngine.cpp @@ -9,6 +9,8 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +#include + #include "ObjectMotionState.h" #include "PhysicsEngine.h" #include "PhysicsHelpers.h" diff --git a/libraries/physics/src/PhysicsEngine.h b/libraries/physics/src/PhysicsEngine.h index f0bd8ba4e9..edc6615a26 100644 --- a/libraries/physics/src/PhysicsEngine.h +++ b/libraries/physics/src/PhysicsEngine.h @@ -25,61 +25,6 @@ #include "ObjectMotionState.h" #include "ThreadSafeDynamicsWorld.h" -/* Note: These are the collision groups defined in btBroadphaseProxy. Only - * DefaultFilter and StaticFilter are explicitly used by Bullet (when the - * collision filter of an object is not manually specified), the rest are - * merely suggestions. - * -enum CollisionFilterGroups { - DefaultFilter = 1, - StaticFilter = 2, - KinematicFilter = 4, - DebrisFilter = 8, - SensorTrigger = 16, - CharacterFilter = 32, - AllFilter = -1 -} - * - * When using custom collision filters we pretty much need to do all or nothing. - * We'll be doing it all which means we define our own groups and build custom masks - * for everything. - * -*/ - -const int16_t COLLISION_GROUP_DEFAULT = 1 << 0; -const int16_t COLLISION_GROUP_STATIC = 1 << 1; -const int16_t COLLISION_GROUP_KINEMATIC = 1 << 2; -const int16_t COLLISION_GROUP_DEBRIS = 1 << 3; -const int16_t COLLISION_GROUP_TRIGGER = 1 << 4; -const int16_t COLLISION_GROUP_MY_AVATAR = 1 << 5; -const int16_t COLLISION_GROUP_OTHER_AVATAR = 1 << 6; -const int16_t COLLISION_GROUP_MY_ATTACHMENT = 1 << 7; -const int16_t COLLISION_GROUP_OTHER_ATTACHMENT = 1 << 8; -// ... -const int16_t COLLISION_GROUP_COLLISIONLESS = 1 << 15; - - -/* Note: In order for objectA to collide with objectB at the filter stage - * both (groupA & maskB) and (groupB & maskA) must be non-zero. - */ -// DEFAULT collides with everything except COLLISIONLESS -const int16_t COLLISION_MASK_DEFAULT = ~ COLLISION_GROUP_COLLISIONLESS; -const int16_t COLLISION_MASK_STATIC = COLLISION_MASK_DEFAULT; -const int16_t COLLISION_MASK_KINEMATIC = COLLISION_MASK_DEFAULT; -// DEBRIS also doesn't collide with: other DEBRIS, and TRIGGER -const int16_t COLLISION_MASK_DEBRIS = ~ (COLLISION_GROUP_COLLISIONLESS - | COLLISION_GROUP_DEBRIS - | COLLISION_GROUP_TRIGGER); -// TRIGGER also doesn't collide with: DEBRIS, TRIGGER, and STATIC (TRIGGER only detects moveable things that matter) -const int16_t COLLISION_MASK_TRIGGER = COLLISION_MASK_DEBRIS & ~(COLLISION_GROUP_STATIC); -// AVATAR also doesn't collide with: corresponding ATTACHMENT -const int16_t COLLISION_MASK_MY_AVATAR = ~(COLLISION_GROUP_COLLISIONLESS | COLLISION_GROUP_MY_ATTACHMENT); -const int16_t COLLISION_MASK_MY_ATTACHMENT = ~(COLLISION_GROUP_COLLISIONLESS | COLLISION_GROUP_MY_AVATAR); -const int16_t COLLISION_MASK_OTHER_AVATAR = ~(COLLISION_GROUP_COLLISIONLESS | COLLISION_GROUP_OTHER_ATTACHMENT); -const int16_t COLLISION_MASK_OTHER_ATTACHMENT = ~(COLLISION_GROUP_COLLISIONLESS | COLLISION_GROUP_OTHER_AVATAR); -// ... -const int16_t COLLISION_MASK_COLLISIONLESS = 0; - const float HALF_SIMULATION_EXTENT = 512.0f; // meters // simple class for keeping track of contacts diff --git a/libraries/shared/src/PhysicsCollisionGroups.h b/libraries/shared/src/PhysicsCollisionGroups.h new file mode 100644 index 0000000000..cce9637cd4 --- /dev/null +++ b/libraries/shared/src/PhysicsCollisionGroups.h @@ -0,0 +1,79 @@ +// +// PhysicsCollisionGroups.h +// libraries/shared/src +// +// Created by Andrew Meadows 2015.06.03 +// Copyright 2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#ifndef hifi_PhysicsCollisionGroups_h +#define hifi_PhysicsCollisionGroups_h + +#include + +/* Note: These are the Bullet collision groups defined in btBroadphaseProxy. Only + * DefaultFilter and StaticFilter are explicitly used by Bullet (when the collision + * filter of an object is not manually specified), the rest are merely suggestions. + * +enum CollisionFilterGroups { + DefaultFilter = 1, + StaticFilter = 2, + KinematicFilter = 4, + DebrisFilter = 8, + SensorTrigger = 16, + CharacterFilter = 32, + AllFilter = -1 +} + * + * When using custom collision filters we pretty much need to do all or nothing. + * We'll be doing it all which means we define our own groups and build custom masks + * for everything. + * +*/ + +const int16_t COLLISION_GROUP_DEFAULT = 1 << 0; +const int16_t COLLISION_GROUP_STATIC = 1 << 1; +const int16_t COLLISION_GROUP_KINEMATIC = 1 << 2; +const int16_t COLLISION_GROUP_DEBRIS = 1 << 3; +const int16_t COLLISION_GROUP_TRIGGER = 1 << 4; +const int16_t COLLISION_GROUP_MY_AVATAR = 1 << 5; +const int16_t COLLISION_GROUP_OTHER_AVATAR = 1 << 6; +const int16_t COLLISION_GROUP_MY_ATTACHMENT = 1 << 7; +const int16_t COLLISION_GROUP_OTHER_ATTACHMENT = 1 << 8; +// ... +const int16_t COLLISION_GROUP_COLLISIONLESS = 1 << 15; + + +/* Note: In order for objectA to collide with objectB at the filter stage + * both (groupA & maskB) and (groupB & maskA) must be non-zero. + */ + +// DEFAULT collides with everything except COLLISIONLESS +const int16_t COLLISION_MASK_DEFAULT = ~ COLLISION_GROUP_COLLISIONLESS; + +// STATIC also doesn't collide with other STATIC +const int16_t COLLISION_MASK_STATIC = ~ (COLLISION_GROUP_COLLISIONLESS | COLLISION_MASK_STATIC); + +const int16_t COLLISION_MASK_KINEMATIC = COLLISION_MASK_DEFAULT; + +// DEBRIS also doesn't collide with other DEBRIS, or TRIGGER +const int16_t COLLISION_MASK_DEBRIS = ~ (COLLISION_GROUP_COLLISIONLESS + | COLLISION_GROUP_DEBRIS + | COLLISION_GROUP_TRIGGER); + +// TRIGGER also doesn't collide with DEBRIS, TRIGGER, or STATIC (TRIGGER only detects moveable things that matter) +const int16_t COLLISION_MASK_TRIGGER = COLLISION_MASK_DEBRIS & ~(COLLISION_GROUP_STATIC); + +// AVATAR also doesn't collide with corresponding ATTACHMENTs +const int16_t COLLISION_MASK_MY_AVATAR = ~(COLLISION_GROUP_COLLISIONLESS | COLLISION_GROUP_MY_ATTACHMENT); +const int16_t COLLISION_MASK_MY_ATTACHMENT = ~(COLLISION_GROUP_COLLISIONLESS | COLLISION_GROUP_MY_AVATAR); +const int16_t COLLISION_MASK_OTHER_AVATAR = ~(COLLISION_GROUP_COLLISIONLESS | COLLISION_GROUP_OTHER_ATTACHMENT); +const int16_t COLLISION_MASK_OTHER_ATTACHMENT = ~(COLLISION_GROUP_COLLISIONLESS | COLLISION_GROUP_OTHER_AVATAR); + +// COLLISIONLESS gets an empty mask. +const int16_t COLLISION_MASK_COLLISIONLESS = 0; + +#endif // hifi_PhysicsCollisionGroups_h