cleanup some writeLocks

This commit is contained in:
ZappoMan 2017-11-02 17:46:15 -07:00
parent b5199220ab
commit baff900839

View file

@ -1734,9 +1734,11 @@ void EntityItem::setParentID(const QUuid& value) {
void EntityItem::setDimensions(const glm::vec3& value) { void EntityItem::setDimensions(const glm::vec3& value) {
glm::vec3 newDimensions = glm::max(value, glm::vec3(0.0f)); // can never have negative dimensions glm::vec3 newDimensions = glm::max(value, glm::vec3(0.0f)); // can never have negative dimensions
if (getDimensions() != newDimensions) { if (getDimensions() != newDimensions) {
withWriteLock([&] {
_dimensions = newDimensions; _dimensions = newDimensions;
markDirtyFlags(Simulation::DIRTY_SHAPE | Simulation::DIRTY_MASS); _dirtyFlags |= (Simulation::DIRTY_SHAPE | Simulation::DIRTY_MASS);
_queryAACubeSet = false; _queryAACubeSet = false;
});
locationChanged(); locationChanged();
dimensionsChanged(); dimensionsChanged();
} }
@ -1783,13 +1785,16 @@ void EntityItem::setVelocity(const glm::vec3& value) {
void EntityItem::setDamping(float value) { void EntityItem::setDamping(float value) {
auto clampedDamping = glm::clamp(value, 0.0f, 1.0f); auto clampedDamping = glm::clamp(value, 0.0f, 1.0f);
withWriteLock([&] {
if (_damping != clampedDamping) { if (_damping != clampedDamping) {
_damping = clampedDamping; _damping = clampedDamping;
_dirtyFlags |= Simulation::DIRTY_MATERIAL; _dirtyFlags |= Simulation::DIRTY_MATERIAL;
} }
});
} }
void EntityItem::setGravity(const glm::vec3& value) { void EntityItem::setGravity(const glm::vec3& value) {
withWriteLock([&] {
if (_gravity != value) { if (_gravity != value) {
if (getShapeType() == SHAPE_TYPE_STATIC_MESH) { if (getShapeType() == SHAPE_TYPE_STATIC_MESH) {
_gravity = Vectors::ZERO; _gravity = Vectors::ZERO;
@ -1806,6 +1811,7 @@ void EntityItem::setGravity(const glm::vec3& value) {
} }
} }
} }
});
} }
void EntityItem::setAngularVelocity(const glm::vec3& value) { void EntityItem::setAngularVelocity(const glm::vec3& value) {
@ -1834,28 +1840,35 @@ void EntityItem::setAngularVelocity(const glm::vec3& value) {
void EntityItem::setAngularDamping(float value) { void EntityItem::setAngularDamping(float value) {
auto clampedDamping = glm::clamp(value, 0.0f, 1.0f); auto clampedDamping = glm::clamp(value, 0.0f, 1.0f);
withWriteLock([&] {
if (_angularDamping != clampedDamping) { if (_angularDamping != clampedDamping) {
_angularDamping = clampedDamping; _angularDamping = clampedDamping;
_dirtyFlags |= Simulation::DIRTY_MATERIAL; _dirtyFlags |= Simulation::DIRTY_MATERIAL;
} }
});
} }
void EntityItem::setCollisionless(bool value) { void EntityItem::setCollisionless(bool value) {
withWriteLock([&] {
if (_collisionless != value) { if (_collisionless != value) {
_collisionless = value; _collisionless = value;
_dirtyFlags |= Simulation::DIRTY_COLLISION_GROUP; _dirtyFlags |= Simulation::DIRTY_COLLISION_GROUP;
} }
});
} }
void EntityItem::setCollisionMask(uint8_t value) { void EntityItem::setCollisionMask(uint8_t value) {
withWriteLock([&] {
if ((_collisionMask & ENTITY_COLLISION_MASK_DEFAULT) != (value & ENTITY_COLLISION_MASK_DEFAULT)) { if ((_collisionMask & ENTITY_COLLISION_MASK_DEFAULT) != (value & ENTITY_COLLISION_MASK_DEFAULT)) {
_collisionMask = (value & ENTITY_COLLISION_MASK_DEFAULT); _collisionMask = (value & ENTITY_COLLISION_MASK_DEFAULT);
_dirtyFlags |= Simulation::DIRTY_COLLISION_GROUP; _dirtyFlags |= Simulation::DIRTY_COLLISION_GROUP;
} }
});
} }
void EntityItem::setDynamic(bool value) { void EntityItem::setDynamic(bool value) {
if (getDynamic() != value) { if (getDynamic() != value) {
withWriteLock([&] {
// dynamic and STATIC_MESH are incompatible so we check for that case // dynamic and STATIC_MESH are incompatible so we check for that case
if (value && getShapeType() == SHAPE_TYPE_STATIC_MESH) { if (value && getShapeType() == SHAPE_TYPE_STATIC_MESH) {
if (_dynamic) { if (_dynamic) {
@ -1866,15 +1879,19 @@ void EntityItem::setDynamic(bool value) {
_dynamic = value; _dynamic = value;
_dirtyFlags |= Simulation::DIRTY_MOTION_TYPE; _dirtyFlags |= Simulation::DIRTY_MOTION_TYPE;
} }
});
} }
} }
void EntityItem::setRestitution(float value) { void EntityItem::setRestitution(float value) {
float clampedValue = glm::max(glm::min(ENTITY_ITEM_MAX_RESTITUTION, value), ENTITY_ITEM_MIN_RESTITUTION); float clampedValue = glm::max(glm::min(ENTITY_ITEM_MAX_RESTITUTION, value), ENTITY_ITEM_MIN_RESTITUTION);
withWriteLock([&] {
if (_restitution != clampedValue) { if (_restitution != clampedValue) {
_restitution = clampedValue; _restitution = clampedValue;
_dirtyFlags |= Simulation::DIRTY_MATERIAL; _dirtyFlags |= Simulation::DIRTY_MATERIAL;
} }
});
} }
void EntityItem::setFriction(float value) { void EntityItem::setFriction(float value) {
@ -1888,17 +1905,21 @@ void EntityItem::setFriction(float value) {
} }
void EntityItem::setLifetime(float value) { void EntityItem::setLifetime(float value) {
withWriteLock([&] {
if (_lifetime != value) { if (_lifetime != value) {
_lifetime = value; _lifetime = value;
_dirtyFlags |= Simulation::DIRTY_LIFETIME; _dirtyFlags |= Simulation::DIRTY_LIFETIME;
} }
});
} }
void EntityItem::setCreated(uint64_t value) { void EntityItem::setCreated(uint64_t value) {
withWriteLock([&] {
if (_created != value) { if (_created != value) {
_created = value; _created = value;
_dirtyFlags |= Simulation::DIRTY_LIFETIME; _dirtyFlags |= Simulation::DIRTY_LIFETIME;
} }
});
} }
void EntityItem::computeCollisionGroupAndFinalMask(int16_t& group, int16_t& mask) const { void EntityItem::computeCollisionGroupAndFinalMask(int16_t& group, int16_t& mask) const {
@ -1970,16 +1991,6 @@ void EntityItem::setSimulationOwner(const QUuid& id, quint8 priority) {
_simulationOwner.set(id, priority); _simulationOwner.set(id, priority);
} }
/*
void EntityItem::setSimulationOwner(const SimulationOwner& owner) {
if (wantTerseEditLogging() && _simulationOwner != owner) {
qCDebug(entities) << "sim ownership for" << getDebugName() << "is now" << owner;
}
_simulationOwner.set(owner);
}
*/
void EntityItem::setSimulationOwner(const SimulationOwner& owner) { void EntityItem::setSimulationOwner(const SimulationOwner& owner) {
// NOTE: this method only used by EntityServer. The Interface uses special code in readEntityDataFromBuffer(). // NOTE: this method only used by EntityServer. The Interface uses special code in readEntityDataFromBuffer().
if (wantTerseEditLogging() && _simulationOwner != owner) { if (wantTerseEditLogging() && _simulationOwner != owner) {