diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index 98559a56a4..312e1fcea5 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -354,7 +354,9 @@ void RenderableModelEntityItem::updateModelBounds() { bool movingOrAnimating = isMovingRelativeToParent() || isAnimatingSomething(); if ((movingOrAnimating || _needsInitialSimulation || + _needsJointSimulation || _model->getTranslation() != getPosition() || + _model->getScaleToFitDimensions() != getDimensions() || _model->getRotation() != getRotation() || _model->getRegistrationPoint() != getRegistrationPoint()) && _model->isActive() && _dimensionsInitialized) { @@ -370,6 +372,7 @@ void RenderableModelEntityItem::updateModelBounds() { } _needsInitialSimulation = false; + _needsJointSimulation = false; } } @@ -770,6 +773,7 @@ bool RenderableModelEntityItem::setAbsoluteJointRotationInObjectFrame(int index, _absoluteJointRotationsInObjectFrameSet[index] = true; _absoluteJointRotationsInObjectFrameDirty[index] = true; result = true; + _needsJointSimulation = true; } }); return result; @@ -785,11 +789,33 @@ bool RenderableModelEntityItem::setAbsoluteJointTranslationInObjectFrame(int ind _absoluteJointTranslationsInObjectFrameSet[index] = true; _absoluteJointTranslationsInObjectFrameDirty[index] = true; result = true; + _needsJointSimulation = true; } }); return result; } +void RenderableModelEntityItem::setJointRotations(const QVector& rotations) { + ModelEntityItem::setJointRotations(rotations); + _needsJointSimulation = true; +} + +void RenderableModelEntityItem::setJointRotationsSet(const QVector& rotationsSet) { + ModelEntityItem::setJointRotationsSet(rotationsSet); + _needsJointSimulation = true; +} + +void RenderableModelEntityItem::setJointTranslations(const QVector& translations) { + ModelEntityItem::setJointTranslations(translations); + _needsJointSimulation = true; +} + +void RenderableModelEntityItem::setJointTranslationsSet(const QVector& translationsSet) { + ModelEntityItem::setJointTranslationsSet(translationsSet); + _needsJointSimulation = true; +} + + void RenderableModelEntityItem::locationChanged() { EntityItem::locationChanged(); if (_model && _model->isActive()) { diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.h b/libraries/entities-renderer/src/RenderableModelEntityItem.h index 069b7385b5..ac82be83d8 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.h +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.h @@ -69,6 +69,11 @@ public: virtual bool setAbsoluteJointRotationInObjectFrame(int index, const glm::quat& rotation) override; virtual bool setAbsoluteJointTranslationInObjectFrame(int index, const glm::vec3& translation) override; + virtual void setJointRotations(const QVector& rotations) override; + virtual void setJointRotationsSet(const QVector& rotationsSet) override; + virtual void setJointTranslations(const QVector& translations) override; + virtual void setJointTranslationsSet(const QVector& translationsSet) override; + virtual void loader() override; virtual void locationChanged() override; @@ -97,6 +102,8 @@ private: bool _showCollisionHull = false; bool getAnimationFrame(); + + bool _needsJointSimulation { false }; }; #endif // hifi_RenderableModelEntityItem_h diff --git a/libraries/entities/src/ModelEntityItem.h b/libraries/entities/src/ModelEntityItem.h index 686fb1f72d..bce27f1cca 100644 --- a/libraries/entities/src/ModelEntityItem.h +++ b/libraries/entities/src/ModelEntityItem.h @@ -120,10 +120,10 @@ public: virtual glm::vec3 getJointPosition(int jointIndex) const { return glm::vec3(); } virtual glm::quat getJointRotation(int jointIndex) const { return glm::quat(); } - void setJointRotations(const QVector& rotations); - void setJointRotationsSet(const QVector& rotationsSet); - void setJointTranslations(const QVector& translations); - void setJointTranslationsSet(const QVector& translationsSet); + virtual void setJointRotations(const QVector& rotations); + virtual void setJointRotationsSet(const QVector& rotationsSet); + virtual void setJointTranslations(const QVector& translations); + virtual void setJointTranslationsSet(const QVector& translationsSet); QVector getJointRotations() const; QVector getJointRotationsSet() const; QVector getJointTranslations() const;