mirror of
https://github.com/lubosz/overte.git
synced 2025-08-07 20:06:02 +02:00
don't allow someone else to delete an action that I own. reset dynamic property when releasing and entity, even if refCount isn't 0
This commit is contained in:
parent
382a0c48da
commit
9db839bc13
4 changed files with 13 additions and 7 deletions
|
@ -1740,6 +1740,7 @@ bool EntityItem::removeActionInternal(const QUuid& actionID, EntitySimulation* s
|
||||||
EntityActionPointer action = _objectActions[actionID];
|
EntityActionPointer action = _objectActions[actionID];
|
||||||
|
|
||||||
action->setOwnerEntity(nullptr);
|
action->setOwnerEntity(nullptr);
|
||||||
|
action->setIsMine(false);
|
||||||
_objectActions.remove(actionID);
|
_objectActions.remove(actionID);
|
||||||
|
|
||||||
if (simulation) {
|
if (simulation) {
|
||||||
|
@ -1846,8 +1847,10 @@ void EntityItem::deserializeActionsInternal() {
|
||||||
QUuid id = i.key();
|
QUuid id = i.key();
|
||||||
if (!updated.contains(id)) {
|
if (!updated.contains(id)) {
|
||||||
EntityActionPointer action = i.value();
|
EntityActionPointer action = i.value();
|
||||||
// if we've just added this action, don't remove it due to lack of mention in an incoming packet.
|
// don't let someone else delete my action.
|
||||||
if (! action->locallyAddedButNotYetReceived) {
|
if (!action->isMine() &&
|
||||||
|
// if we've just added this action, don't remove it due to lack of mention in an incoming packet.
|
||||||
|
!action->locallyAddedButNotYetReceived) {
|
||||||
_actionsToRemove << id;
|
_actionsToRemove << id;
|
||||||
_previouslyDeletedActions.insert(id, now);
|
_previouslyDeletedActions.insert(id, now);
|
||||||
}
|
}
|
||||||
|
|
|
@ -213,8 +213,8 @@ bool EntityTree::updateEntityWithElement(EntityItemPointer entity, const EntityI
|
||||||
properties.setVelocityChanged(false);
|
properties.setVelocityChanged(false);
|
||||||
properties.setAngularVelocityChanged(false);
|
properties.setAngularVelocityChanged(false);
|
||||||
properties.setAccelerationChanged(false);
|
properties.setAccelerationChanged(false);
|
||||||
properties.setParentID(QUuid());
|
properties.setParentIDChanged(false);
|
||||||
properties.setParentJointIndex(false);
|
properties.setParentJointIndexChanged(false);
|
||||||
|
|
||||||
if (wantTerseEditLogging()) {
|
if (wantTerseEditLogging()) {
|
||||||
qCDebug(entities) << (senderNode ? senderNode->getUUID() : "null") << "physical edits suppressed";
|
qCDebug(entities) << (senderNode ? senderNode->getUUID() : "null") << "physical edits suppressed";
|
||||||
|
|
|
@ -45,10 +45,9 @@ bool ObjectActionSpring::getTarget(float deltaTimeStep, glm::quat& rotation, glm
|
||||||
position = _desiredPositionalTarget;
|
position = _desiredPositionalTarget;
|
||||||
linearVelocity = glm::vec3();
|
linearVelocity = glm::vec3();
|
||||||
angularVelocity = glm::vec3();
|
angularVelocity = glm::vec3();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool ObjectActionSpring::prepareForSpringUpdate(btScalar deltaTimeStep) {
|
bool ObjectActionSpring::prepareForSpringUpdate(btScalar deltaTimeStep) {
|
||||||
glm::quat rotation;
|
glm::quat rotation;
|
||||||
glm::vec3 position;
|
glm::vec3 position;
|
||||||
|
@ -140,10 +139,13 @@ void ObjectActionSpring::updateActionWorker(btScalar deltaTimeStep) {
|
||||||
float speed = glm::min(offsetLength / _linearTimeScale, SPRING_MAX_SPEED);
|
float speed = glm::min(offsetLength / _linearTimeScale, SPRING_MAX_SPEED);
|
||||||
targetVelocity = (-speed / offsetLength) * offset;
|
targetVelocity = (-speed / offsetLength) * offset;
|
||||||
if (speed > rigidBody->getLinearSleepingThreshold()) {
|
if (speed > rigidBody->getLinearSleepingThreshold()) {
|
||||||
|
qDebug() << "HERE";
|
||||||
|
forceBodyNonStatic();
|
||||||
rigidBody->activate();
|
rigidBody->activate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// this action is aggresively critically damped and defeats the current velocity
|
// this action is aggresively critically damped and defeats the current velocity
|
||||||
|
qDebug() << targetVelocity.x() << targetVelocity.y() << targetVelocity.z();
|
||||||
rigidBody->setLinearVelocity(targetVelocity);
|
rigidBody->setLinearVelocity(targetVelocity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1895,7 +1895,8 @@ function MyController(hand) {
|
||||||
Entities.editEntity(entityID, deactiveProps);
|
Entities.editEntity(entityID, deactiveProps);
|
||||||
} else if (noVelocity) {
|
} else if (noVelocity) {
|
||||||
Entities.editEntity(entityID, {velocity: {x: 0.0, y: 0.0, z: 0.0},
|
Entities.editEntity(entityID, {velocity: {x: 0.0, y: 0.0, z: 0.0},
|
||||||
angularVelocity: {x: 0.0, y: 0.0, z: 0.0}});
|
angularVelocity: {x: 0.0, y: 0.0, z: 0.0},
|
||||||
|
dynamic: data["dynamic"]});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
data = null;
|
data = null;
|
||||||
|
|
Loading…
Reference in a new issue