From 6f19093cb9959881b2002393ba6f66aec6c1d498 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Mon, 23 Nov 2015 10:03:35 -0800 Subject: [PATCH] if an entity with an action has a motion-type of static, flag it so it gets updated in bullet --- libraries/entities/src/EntityItem.h | 1 + libraries/physics/src/ObjectAction.cpp | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/libraries/entities/src/EntityItem.h b/libraries/entities/src/EntityItem.h index 5ceccef4b1..727a806b62 100644 --- a/libraries/entities/src/EntityItem.h +++ b/libraries/entities/src/EntityItem.h @@ -398,6 +398,7 @@ public: void getAllTerseUpdateProperties(EntityItemProperties& properties) const; void flagForOwnership() { _dirtyFlags |= Simulation::DIRTY_SIMULATOR_OWNERSHIP; } + void flagForMotionStateChange() { _dirtyFlags |= Simulation::DIRTY_MOTION_TYPE; } bool addAction(EntitySimulation* simulation, EntityActionPointer action); bool updateAction(EntitySimulation* simulation, const QUuid& actionID, const QVariantMap& arguments); diff --git a/libraries/physics/src/ObjectAction.cpp b/libraries/physics/src/ObjectAction.cpp index 3188283f68..8e0cdfd266 100644 --- a/libraries/physics/src/ObjectAction.cpp +++ b/libraries/physics/src/ObjectAction.cpp @@ -244,6 +244,15 @@ void ObjectAction::activateBody() { if (rigidBody) { rigidBody->activate(); } + auto ownerEntity = _ownerEntity.lock(); + if (!ownerEntity) { + return; + } + void* physicsInfo = ownerEntity->getPhysicsInfo(); + ObjectMotionState* motionState = static_cast(physicsInfo); + if (motionState && motionState->getMotionType() == MOTION_TYPE_STATIC) { + ownerEntity->flagForMotionStateChange(); + } } bool ObjectAction::lifetimeIsOver() {