mirror of
https://github.com/lubosz/overte.git
synced 2025-08-18 05:33:07 +02:00
Merge pull request #5967 from AndrewMeadows/collision-group-hack
allow physical objects to be set collisionless
This commit is contained in:
commit
8153ad7f44
7 changed files with 15 additions and 6 deletions
|
@ -79,6 +79,7 @@ public:
|
||||||
glm::mat4 localToVoxelMatrix() const;
|
glm::mat4 localToVoxelMatrix() const;
|
||||||
|
|
||||||
virtual ShapeType getShapeType() const;
|
virtual ShapeType getShapeType() const;
|
||||||
|
virtual bool shouldBePhysical() const { return true; }
|
||||||
virtual bool isReadyToComputeShape();
|
virtual bool isReadyToComputeShape();
|
||||||
virtual void computeShapeInfo(ShapeInfo& info);
|
virtual void computeShapeInfo(ShapeInfo& info);
|
||||||
|
|
||||||
|
|
|
@ -52,6 +52,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ShapeType getShapeType() const { return SHAPE_TYPE_BOX; }
|
virtual ShapeType getShapeType() const { return SHAPE_TYPE_BOX; }
|
||||||
|
virtual bool shouldBePhysical() const { return true; }
|
||||||
|
|
||||||
virtual void debugDump() const;
|
virtual void debugDump() const;
|
||||||
|
|
||||||
|
|
|
@ -334,7 +334,7 @@ public:
|
||||||
bool getCollisionsWillMove() const { return _collisionsWillMove; }
|
bool getCollisionsWillMove() const { return _collisionsWillMove; }
|
||||||
void setCollisionsWillMove(bool value) { _collisionsWillMove = value; }
|
void setCollisionsWillMove(bool value) { _collisionsWillMove = value; }
|
||||||
|
|
||||||
virtual bool shouldBePhysical() const { return !_ignoreForCollisions; }
|
virtual bool shouldBePhysical() const { return false; }
|
||||||
|
|
||||||
bool getLocked() const { return _locked; }
|
bool getLocked() const { return _locked; }
|
||||||
void setLocked(bool value) { _locked = value; }
|
void setLocked(bool value) { _locked = value; }
|
||||||
|
|
|
@ -466,5 +466,5 @@ QString ModelEntityItem::getAnimationSettings() const {
|
||||||
|
|
||||||
// virtual
|
// virtual
|
||||||
bool ModelEntityItem::shouldBePhysical() const {
|
bool ModelEntityItem::shouldBePhysical() const {
|
||||||
return EntityItem::shouldBePhysical() && getShapeType() != SHAPE_TYPE_NONE;
|
return getShapeType() != SHAPE_TYPE_NONE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,6 +51,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ShapeType getShapeType() const { return SHAPE_TYPE_SPHERE; }
|
virtual ShapeType getShapeType() const { return SHAPE_TYPE_SPHERE; }
|
||||||
|
virtual bool shouldBePhysical() const { return true; }
|
||||||
|
|
||||||
virtual bool supportsDetailedRayIntersection() const { return true; }
|
virtual bool supportsDetailedRayIntersection() const { return true; }
|
||||||
virtual bool findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction,
|
virtual bool findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction,
|
||||||
|
|
|
@ -596,6 +596,12 @@ QString EntityMotionState::getName() {
|
||||||
|
|
||||||
// virtual
|
// virtual
|
||||||
int16_t EntityMotionState::computeCollisionGroup() {
|
int16_t EntityMotionState::computeCollisionGroup() {
|
||||||
|
if (!_entity) {
|
||||||
|
return COLLISION_GROUP_STATIC;
|
||||||
|
}
|
||||||
|
if (_entity->getIgnoreForCollisions()) {
|
||||||
|
return COLLISION_GROUP_COLLISIONLESS;
|
||||||
|
}
|
||||||
switch (computeObjectMotionType()){
|
switch (computeObjectMotionType()){
|
||||||
case MOTION_TYPE_STATIC:
|
case MOTION_TYPE_STATIC:
|
||||||
return COLLISION_GROUP_STATIC;
|
return COLLISION_GROUP_STATIC;
|
||||||
|
|
|
@ -37,11 +37,11 @@ enum MotionStateType {
|
||||||
|
|
||||||
// The update flags trigger two varieties of updates: "hard" which require the body to be pulled
|
// The update flags trigger two varieties of updates: "hard" which require the body to be pulled
|
||||||
// and re-added to the physics engine and "easy" which just updates the body properties.
|
// and re-added to the physics engine and "easy" which just updates the body properties.
|
||||||
const uint32_t HARD_DIRTY_PHYSICS_FLAGS = (uint32_t)(EntityItem::DIRTY_MOTION_TYPE | EntityItem::DIRTY_SHAPE);
|
const uint32_t HARD_DIRTY_PHYSICS_FLAGS = (uint32_t)(EntityItem::DIRTY_MOTION_TYPE | EntityItem::DIRTY_SHAPE |
|
||||||
|
EntityItem::DIRTY_COLLISION_GROUP);
|
||||||
const uint32_t EASY_DIRTY_PHYSICS_FLAGS = (uint32_t)(EntityItem::DIRTY_TRANSFORM | EntityItem::DIRTY_VELOCITIES |
|
const uint32_t EASY_DIRTY_PHYSICS_FLAGS = (uint32_t)(EntityItem::DIRTY_TRANSFORM | EntityItem::DIRTY_VELOCITIES |
|
||||||
EntityItem::DIRTY_MASS | EntityItem::DIRTY_COLLISION_GROUP |
|
EntityItem::DIRTY_MASS | EntityItem::DIRTY_MATERIAL |
|
||||||
EntityItem::DIRTY_MATERIAL | EntityItem::DIRTY_SIMULATOR_ID |
|
EntityItem::DIRTY_SIMULATOR_ID | EntityItem::DIRTY_SIMULATOR_OWNERSHIP);
|
||||||
EntityItem::DIRTY_SIMULATOR_OWNERSHIP);
|
|
||||||
|
|
||||||
// These are the set of incoming flags that the PhysicsEngine needs to hear about:
|
// These are the set of incoming flags that the PhysicsEngine needs to hear about:
|
||||||
const uint32_t DIRTY_PHYSICS_FLAGS = (uint32_t)(HARD_DIRTY_PHYSICS_FLAGS | EASY_DIRTY_PHYSICS_FLAGS |
|
const uint32_t DIRTY_PHYSICS_FLAGS = (uint32_t)(HARD_DIRTY_PHYSICS_FLAGS | EASY_DIRTY_PHYSICS_FLAGS |
|
||||||
|
|
Loading…
Reference in a new issue