mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 16:38:27 +02:00
more correct collision group during grabs
This commit is contained in:
parent
dd2f8ff2d6
commit
1860e61a30
3 changed files with 10 additions and 26 deletions
|
@ -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;
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue