mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 06:18:52 +02:00
set script-triggerd sim ownership priority correctly
This commit is contained in:
parent
ce81ab1f9d
commit
1a685d2409
4 changed files with 24 additions and 15 deletions
|
@ -78,8 +78,10 @@ void addAvatarEntities(const QVariantList& avatarEntities) {
|
||||||
}
|
}
|
||||||
|
|
||||||
entity->setLastBroadcast(usecTimestampNow());
|
entity->setLastBroadcast(usecTimestampNow());
|
||||||
// since we're creating this object we will immediately volunteer to own its simulation
|
if (entityProperties.getDynamic()) {
|
||||||
entity->setScriptSimulationPriority(VOLUNTEER_SIMULATION_PRIORITY);
|
// since we're creating a dynamic object we volunteer immediately to own its simulation
|
||||||
|
entity->upgradeScriptSimulationPriority(VOLUNTEER_SIMULATION_PRIORITY);
|
||||||
|
}
|
||||||
entityProperties.setLastEdited(entity->getLastEdited());
|
entityProperties.setLastEdited(entity->getLastEdited());
|
||||||
} else {
|
} else {
|
||||||
qCDebug(entities) << "AvatarEntitiesBookmark failed to add new Entity to local Octree";
|
qCDebug(entities) << "AvatarEntitiesBookmark failed to add new Entity to local Octree";
|
||||||
|
|
|
@ -1382,8 +1382,11 @@ void EntityItem::getTransformAndVelocityProperties(EntityItemProperties& propert
|
||||||
properties._accelerationChanged = true;
|
properties._accelerationChanged = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EntityItem::setScriptSimulationPriority(uint8_t priority) {
|
void EntityItem::upgradeScriptSimulationPriority(uint8_t priority) {
|
||||||
uint8_t newPriority = stillHasGrabActions() ? glm::max(priority, SCRIPT_GRAB_SIMULATION_PRIORITY) : priority;
|
uint8_t newPriority = glm::max(priority, _scriptSimulationPriority);
|
||||||
|
if (newPriority < SCRIPT_GRAB_SIMULATION_PRIORITY && stillHasGrabActions()) {
|
||||||
|
newPriority = SCRIPT_GRAB_SIMULATION_PRIORITY;
|
||||||
|
}
|
||||||
if (newPriority != _scriptSimulationPriority) {
|
if (newPriority != _scriptSimulationPriority) {
|
||||||
// set the dirty flag to trigger a bid or ownership update
|
// set the dirty flag to trigger a bid or ownership update
|
||||||
markDirtyFlags(Simulation::DIRTY_SIMULATION_OWNERSHIP_PRIORITY);
|
markDirtyFlags(Simulation::DIRTY_SIMULATION_OWNERSHIP_PRIORITY);
|
||||||
|
|
|
@ -325,7 +325,7 @@ public:
|
||||||
// TODO: move this "ScriptSimulationPriority" and "PendingOwnership" stuff into EntityMotionState
|
// TODO: move this "ScriptSimulationPriority" and "PendingOwnership" stuff into EntityMotionState
|
||||||
// but first would need to do some other cleanup. In the meantime these live here as "scratch space"
|
// but first would need to do some other cleanup. In the meantime these live here as "scratch space"
|
||||||
// to allow libs that don't know about each other to communicate.
|
// to allow libs that don't know about each other to communicate.
|
||||||
void setScriptSimulationPriority(uint8_t priority);
|
void upgradeScriptSimulationPriority(uint8_t priority);
|
||||||
void clearScriptSimulationPriority();
|
void clearScriptSimulationPriority();
|
||||||
uint8_t getScriptSimulationPriority() const { return _scriptSimulationPriority; }
|
uint8_t getScriptSimulationPriority() const { return _scriptSimulationPriority; }
|
||||||
void setPendingOwnershipPriority(uint8_t priority);
|
void setPendingOwnershipPriority(uint8_t priority);
|
||||||
|
|
|
@ -290,7 +290,7 @@ bool EntityScriptingInterface::addLocalEntityCopy(EntityItemProperties& properti
|
||||||
|
|
||||||
entity->setLastBroadcast(usecTimestampNow());
|
entity->setLastBroadcast(usecTimestampNow());
|
||||||
// since we're creating this object we will immediately volunteer to own its simulation
|
// since we're creating this object we will immediately volunteer to own its simulation
|
||||||
entity->setScriptSimulationPriority(VOLUNTEER_SIMULATION_PRIORITY);
|
entity->upgradeScriptSimulationPriority(VOLUNTEER_SIMULATION_PRIORITY);
|
||||||
properties.setLastEdited(entity->getLastEdited());
|
properties.setLastEdited(entity->getLastEdited());
|
||||||
} else {
|
} else {
|
||||||
qCDebug(entities) << "script failed to add new Entity to local Octree";
|
qCDebug(entities) << "script failed to add new Entity to local Octree";
|
||||||
|
@ -569,16 +569,20 @@ QUuid EntityScriptingInterface::editEntity(QUuid id, const EntityItemProperties&
|
||||||
// TODO: figure out how to change simulation ownership priority
|
// TODO: figure out how to change simulation ownership priority
|
||||||
//}
|
//}
|
||||||
} else {
|
} else {
|
||||||
// we don't own the simulation
|
// we don't own the simulation but think we would like to
|
||||||
|
// --> flag the object for simulation ownership at at least POKE
|
||||||
|
// (the bid for simulation ownership (if any) will be sent by the physics simulation)
|
||||||
|
entity->upgradeScriptSimulationPriority(SCRIPT_POKE_SIMULATION_PRIORITY);
|
||||||
|
|
||||||
uint8_t desiredPriority = entity->getScriptSimulationPriority();
|
uint8_t desiredPriority = entity->getScriptSimulationPriority();
|
||||||
if (desiredPriority < simulationOwner.getPriority()) {
|
if (desiredPriority < simulationOwner.getPriority()) {
|
||||||
// we don't desire to own it --> clear restricted properties
|
// the priority at which we'd like to own it is not high enough
|
||||||
|
// --> assume failure and clear all restricted property changes
|
||||||
properties.clearSimulationRestrictedProperties();
|
properties.clearSimulationRestrictedProperties();
|
||||||
} else {
|
} else {
|
||||||
// we want to own it --> copy ALL restricted properties
|
// the priority at which we'd like to own it is high enough to win.
|
||||||
|
// --> assume success and copy ALL restricted properties
|
||||||
properties.copySimulationRestrictedProperties(entity);
|
properties.copySimulationRestrictedProperties(entity);
|
||||||
// and also store our simulation
|
|
||||||
properties.setSimulationOwner(sessionID, desiredPriority);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (!simulationOwner.getID().isNull()) {
|
} else if (!simulationOwner.getID().isNull()) {
|
||||||
|
@ -587,7 +591,7 @@ QUuid EntityScriptingInterface::editEntity(QUuid id, const EntityItemProperties&
|
||||||
properties.clearSimulationRestrictedProperties();
|
properties.clearSimulationRestrictedProperties();
|
||||||
}
|
}
|
||||||
// clear the cached simulationPriority level
|
// clear the cached simulationPriority level
|
||||||
entity->setScriptSimulationPriority(0);
|
entity->upgradeScriptSimulationPriority(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// set these to make EntityItemProperties::getScalesWithParent() work correctly
|
// set these to make EntityItemProperties::getScalesWithParent() work correctly
|
||||||
|
@ -1452,7 +1456,7 @@ QUuid EntityScriptingInterface::addAction(const QString& actionTypeString,
|
||||||
}
|
}
|
||||||
action->setIsMine(true);
|
action->setIsMine(true);
|
||||||
success = entity->addAction(simulation, action);
|
success = entity->addAction(simulation, action);
|
||||||
entity->setScriptSimulationPriority(SCRIPT_GRAB_SIMULATION_PRIORITY);
|
entity->upgradeScriptSimulationPriority(SCRIPT_GRAB_SIMULATION_PRIORITY);
|
||||||
return false; // Physics will cause a packet to be sent, so don't send from here.
|
return false; // Physics will cause a packet to be sent, so don't send from here.
|
||||||
});
|
});
|
||||||
if (success) {
|
if (success) {
|
||||||
|
@ -1468,7 +1472,7 @@ bool EntityScriptingInterface::updateAction(const QUuid& entityID, const QUuid&
|
||||||
return actionWorker(entityID, [&](EntitySimulationPointer simulation, EntityItemPointer entity) {
|
return actionWorker(entityID, [&](EntitySimulationPointer simulation, EntityItemPointer entity) {
|
||||||
bool success = entity->updateAction(simulation, actionID, arguments);
|
bool success = entity->updateAction(simulation, actionID, arguments);
|
||||||
if (success) {
|
if (success) {
|
||||||
entity->setScriptSimulationPriority(SCRIPT_GRAB_SIMULATION_PRIORITY);
|
entity->upgradeScriptSimulationPriority(SCRIPT_GRAB_SIMULATION_PRIORITY);
|
||||||
}
|
}
|
||||||
return success;
|
return success;
|
||||||
});
|
});
|
||||||
|
@ -1482,7 +1486,7 @@ bool EntityScriptingInterface::deleteAction(const QUuid& entityID, const QUuid&
|
||||||
success = entity->removeAction(simulation, actionID);
|
success = entity->removeAction(simulation, actionID);
|
||||||
if (success) {
|
if (success) {
|
||||||
// reduce from grab to poke
|
// reduce from grab to poke
|
||||||
entity->setScriptSimulationPriority(SCRIPT_POKE_SIMULATION_PRIORITY);
|
entity->upgradeScriptSimulationPriority(SCRIPT_POKE_SIMULATION_PRIORITY);
|
||||||
}
|
}
|
||||||
return false; // Physics will cause a packet to be sent, so don't send from here.
|
return false; // Physics will cause a packet to be sent, so don't send from here.
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue