more correct collision group during grabs

This commit is contained in:
Andrew Meadows 2019-04-03 07:42:56 -07:00
parent dd2f8ff2d6
commit 1860e61a30
3 changed files with 10 additions and 26 deletions

View file

@ -1698,10 +1698,7 @@ AACube EntityItem::getQueryAACube(bool& success) const {
} }
bool EntityItem::shouldPuffQueryAACube() const { bool EntityItem::shouldPuffQueryAACube() const {
bool hasGrabs = _grabsLock.resultWithReadLock<bool>([&] { return hasActions() || isChildOfMyAvatar() || isMovingRelativeToParent();
return _grabs.count() > 0;
});
return hasActions() || isChildOfMyAvatar() || isMovingRelativeToParent() || hasGrabs;
} }
// TODO: get rid of all users of this function... // TODO: get rid of all users of this function...
@ -1896,7 +1893,8 @@ void EntityItem::setScaledDimensions(const glm::vec3& value) {
void EntityItem::setUnscaledDimensions(const glm::vec3& value) { void EntityItem::setUnscaledDimensions(const glm::vec3& value) {
glm::vec3 newDimensions = glm::max(value, glm::vec3(ENTITY_ITEM_MIN_DIMENSION)); glm::vec3 newDimensions = glm::max(value, glm::vec3(ENTITY_ITEM_MIN_DIMENSION));
if (getUnscaledDimensions() != newDimensions) { const float MIN_SCALE_CHANGE_SQUARED = 1.0e-6f;
if (glm::length2(getUnscaledDimensions() - newDimensions) > MIN_SCALE_CHANGE_SQUARED) {
withWriteLock([&] { withWriteLock([&] {
_unscaledDimensions = newDimensions; _unscaledDimensions = newDimensions;
}); });
@ -2086,7 +2084,7 @@ void EntityItem::computeCollisionGroupAndFinalMask(int32_t& group, int32_t& mask
} else { } else {
if (getDynamic()) { if (getDynamic()) {
group = BULLET_COLLISION_GROUP_DYNAMIC; group = BULLET_COLLISION_GROUP_DYNAMIC;
} else if (isMovingRelativeToParent() || hasActions()) { } else if (hasActions() || isMovingRelativeToParent()) {
group = BULLET_COLLISION_GROUP_KINEMATIC; group = BULLET_COLLISION_GROUP_KINEMATIC;
} else { } else {
group = BULLET_COLLISION_GROUP_STATIC; group = BULLET_COLLISION_GROUP_STATIC;
@ -3057,30 +3055,18 @@ bool EntityItem::getCollisionless() const {
} }
uint16_t EntityItem::getCollisionMask() const { uint16_t EntityItem::getCollisionMask() const {
uint16_t result; return _collisionMask;
withReadLock([&] {
result = _collisionMask;
});
return result;
} }
bool EntityItem::getDynamic() const { bool EntityItem::getDynamic() const {
if (SHAPE_TYPE_STATIC_MESH == getShapeType()) { if (SHAPE_TYPE_STATIC_MESH == getShapeType()) {
return false; return false;
} }
bool result; return _dynamic;
withReadLock([&] {
result = _dynamic;
});
return result;
} }
bool EntityItem::getLocked() const { bool EntityItem::getLocked() const {
bool result; return _locked;
withReadLock([&] {
result = _locked;
});
return result;
} }
void EntityItem::setLocked(bool value) { void EntityItem::setLocked(bool value) {
@ -3152,7 +3138,6 @@ uint32_t EntityItem::getDirtyFlags() const {
return result; return result;
} }
void EntityItem::markDirtyFlags(uint32_t mask) { void EntityItem::markDirtyFlags(uint32_t mask) {
withWriteLock([&] { withWriteLock([&] {
mask &= Simulation::DIRTY_FLAGS; mask &= Simulation::DIRTY_FLAGS;

View file

@ -448,7 +448,7 @@ public:
bool clearActions(EntitySimulationPointer simulation); bool clearActions(EntitySimulationPointer simulation);
void setDynamicData(QByteArray dynamicData); void setDynamicData(QByteArray dynamicData);
const QByteArray getDynamicData() const; const QByteArray getDynamicData() const;
bool hasActions() const { return !_objectActions.empty(); } bool hasActions() const { return !_objectActions.empty() || !_grabActions.empty(); }
QList<QUuid> getActionIDs() const { return _objectActions.keys(); } QList<QUuid> getActionIDs() const { return _objectActions.keys(); }
QVariantMap getActionArguments(const QUuid& actionID) const; QVariantMap getActionArguments(const QUuid& actionID) const;
void deserializeActions(); void deserializeActions();

View file

@ -217,9 +217,8 @@ PhysicsMotionType EntityMotionState::computePhysicsMotionType() const {
} }
return MOTION_TYPE_DYNAMIC; return MOTION_TYPE_DYNAMIC;
} }
if (_entity->isMovingRelativeToParent() || if (_entity->hasActions() ||
_entity->hasActions() || _entity->isMovingRelativeToParent() ||
_entity->hasGrabs() ||
_entity->hasAncestorOfType(NestableType::Avatar)) { _entity->hasAncestorOfType(NestableType::Avatar)) {
return MOTION_TYPE_KINEMATIC; return MOTION_TYPE_KINEMATIC;
} }