mirror of
https://github.com/Armored-Dragon/overte.git
synced 2025-03-11 16:13:16 +01:00
main actions interface is in EntityItem. changes in actions are queued up and applied before simulation step
This commit is contained in:
parent
f84e970c48
commit
a31a5a1554
7 changed files with 37 additions and 22 deletions
|
@ -2461,8 +2461,9 @@ void Application::update(float deltaTime) {
|
|||
|
||||
|
||||
updateThreads(deltaTime); // If running non-threaded, then give the threads some time to process...
|
||||
|
||||
DependencyManager::get<AvatarManager>()->updateOtherAvatars(deltaTime); //loop through all the other avatars and simulate them...
|
||||
|
||||
//loop through all the other avatars and simulate them...
|
||||
DependencyManager::get<AvatarManager>()->updateOtherAvatars(deltaTime);
|
||||
|
||||
updateCamera(deltaTime); // handle various camera tweaks like off axis projection
|
||||
updateDialogs(deltaTime); // update various stats dialogs if present
|
||||
|
@ -2476,6 +2477,7 @@ void Application::update(float deltaTime) {
|
|||
_physicsEngine.deleteObjects(_entitySimulation.getObjectsToDelete());
|
||||
_physicsEngine.addObjects(_entitySimulation.getObjectsToAdd());
|
||||
_physicsEngine.changeObjects(_entitySimulation.getObjectsToChange());
|
||||
_entitySimulation.applyActionChanges();
|
||||
_entitySimulation.unlock();
|
||||
|
||||
AvatarManager* avatarManager = DependencyManager::get<AvatarManager>().data();
|
||||
|
@ -2498,7 +2500,8 @@ void Application::update(float deltaTime) {
|
|||
|
||||
if (!_aboutToQuit) {
|
||||
PerformanceTimer perfTimer("entities");
|
||||
// Collision events (and their scripts) must not be handled when we're locked, above. (That would risk deadlock.)
|
||||
// Collision events (and their scripts) must not be handled when we're locked, above. (That would risk
|
||||
// deadlock.)
|
||||
_entitySimulation.handleCollisionEvents(collisionEvents);
|
||||
// NOTE: the _entities.update() call below will wait for lock
|
||||
// and will simulate entity motion (the EntityTree has been given an EntitySimulation).
|
||||
|
@ -2511,11 +2514,12 @@ void Application::update(float deltaTime) {
|
|||
PerformanceTimer perfTimer("overlays");
|
||||
_overlays.update(deltaTime);
|
||||
}
|
||||
|
||||
|
||||
{
|
||||
PerformanceTimer perfTimer("myAvatar");
|
||||
updateMyAvatarLookAtPosition();
|
||||
DependencyManager::get<AvatarManager>()->updateMyAvatar(deltaTime); // Sample hardware, update view frustum if needed, and send avatar data to mixer/nodes
|
||||
// Sample hardware, update view frustum if needed, and send avatar data to mixer/nodes
|
||||
DependencyManager::get<AvatarManager>()->updateMyAvatar(deltaTime);
|
||||
}
|
||||
|
||||
{
|
||||
|
|
|
@ -1369,8 +1369,6 @@ void EntityItem::removeAction(const QUuid actionID) {
|
|||
simulation->removeAction(action->getID());
|
||||
}
|
||||
}
|
||||
|
||||
delete action;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -59,6 +59,7 @@ public:
|
|||
virtual void addAction(EntityActionInterface* action) {}
|
||||
virtual void removeAction(const QUuid actionID) {}
|
||||
virtual void removeActions(QList<QUuid> actionIDsToRemove) {}
|
||||
virtual void applyActionChanges() {}
|
||||
|
||||
protected: // these only called by the EntityTree?
|
||||
/// \param entity pointer to EntityItem to be added
|
||||
|
@ -116,7 +117,7 @@ protected:
|
|||
SetOfEntities _entitiesToDelete; // entities simulation decided needed to be deleted (EntityTree will actually delete)
|
||||
SetOfEntities _simpleKinematicEntities; // entities undergoing non-colliding kinematic motion
|
||||
|
||||
private:
|
||||
private:
|
||||
void moveSimpleKinematics();
|
||||
};
|
||||
|
||||
|
|
|
@ -233,19 +233,33 @@ void PhysicalEntitySimulation::handleCollisionEvents(CollisionEvents& collisionE
|
|||
}
|
||||
|
||||
void PhysicalEntitySimulation::addAction(EntityActionInterface* action) {
|
||||
if (_physicsEngine) {
|
||||
_physicsEngine->addAction(action);
|
||||
}
|
||||
// if (_physicsEngine) {
|
||||
// _physicsEngine->addAction(action);
|
||||
// }
|
||||
_actionsToAdd += action;
|
||||
}
|
||||
|
||||
void PhysicalEntitySimulation::removeAction(const QUuid actionID) {
|
||||
if (_physicsEngine) {
|
||||
_physicsEngine->removeAction(actionID);
|
||||
}
|
||||
// if (_physicsEngine) {
|
||||
// _physicsEngine->removeAction(actionID);
|
||||
// }
|
||||
_actionsToRemove += actionID;
|
||||
}
|
||||
|
||||
void PhysicalEntitySimulation::removeActions(QList<QUuid> actionIDsToRemove) {
|
||||
// if (_physicsEngine) {
|
||||
// _physicsEngine->removeActions(actionIDsToRemove);
|
||||
// }
|
||||
_actionsToRemove += actionIDsToRemove;
|
||||
}
|
||||
|
||||
void PhysicalEntitySimulation::applyActionChanges() {
|
||||
if (_physicsEngine) {
|
||||
_physicsEngine->removeActions(actionIDsToRemove);
|
||||
foreach (EntityActionInterface* actionToAdd, _actionsToAdd) {
|
||||
_physicsEngine->addAction(actionToAdd);
|
||||
}
|
||||
foreach (QUuid actionToRemove, _actionsToRemove) {
|
||||
_physicsEngine->removeAction(actionToRemove);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,6 +35,7 @@ public:
|
|||
virtual void addAction(EntityActionInterface* action);
|
||||
virtual void removeAction(const QUuid actionID);
|
||||
virtual void removeActions(QList<QUuid> actionIDsToRemove);
|
||||
virtual void applyActionChanges();
|
||||
|
||||
protected: // only called by EntitySimulation
|
||||
// overrides for EntitySimulation
|
||||
|
@ -68,6 +69,9 @@ private:
|
|||
EntityEditPacketSender* _entityPacketSender = nullptr;
|
||||
|
||||
uint32_t _lastStepSendPackets = 0;
|
||||
|
||||
QList<EntityActionInterface*> _actionsToAdd;
|
||||
QList<QUuid> _actionsToRemove;
|
||||
};
|
||||
|
||||
#endif // hifi_PhysicalEntitySimulation_h
|
||||
|
|
|
@ -466,11 +466,6 @@ void PhysicsEngine::removeAction(const QUuid actionID) {
|
|||
ObjectAction* action = _objectActions[actionID];
|
||||
_dynamicsWorld->removeAction(action);
|
||||
_objectActions.remove(actionID);
|
||||
}
|
||||
}
|
||||
|
||||
void PhysicsEngine::removeActions(QList<QUuid> actionIDsToRemove) {
|
||||
foreach(QUuid actionID, actionIDsToRemove) {
|
||||
removeAction(actionID);
|
||||
delete action;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -97,7 +97,6 @@ public:
|
|||
|
||||
void addAction(EntityActionInterface* action);
|
||||
void removeAction(const QUuid actionID);
|
||||
void removeActions(QList<QUuid> actionIDsToRemove);
|
||||
|
||||
private:
|
||||
void removeContacts(ObjectMotionState* motionState);
|
||||
|
|
Loading…
Reference in a new issue