From 4eb2a5cf5e900a80abda46677038b0e88de53445 Mon Sep 17 00:00:00 2001 From: amantley Date: Wed, 17 Jan 2018 19:25:20 -0800 Subject: [PATCH 1/4] added a property check in renderableModelEntity for the animation url this fixes the bug stopping you from changing animations on an entity --- .../src/RenderableModelEntityItem.cpp | 14 +++++++++++++- .../src/RenderableModelEntityItem.h | 3 +++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index 827507c3aa..684540453b 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -1394,7 +1394,19 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce // That is where _currentFrame and _lastAnimated were updated. if (_animating) { DETAILED_PROFILE_RANGE(simulation_physics, "Animate"); - if (!jointsMapped()) { + // check animation url change + auto newprops = entity->getAnimationProperties(); + if (newprops != _previousAnimationProperties) { + if (newprops.getURL() != _previousAnimationProperties.getURL()) { + _animation = DependencyManager::get()->getAnimation(entity->getAnimationURL()); + _jointMappingCompleted = false; + mapJoints(entity, model->getJointNames()); + } + _previousAnimationProperties = newprops; + } + // + if (!jointsMapped() || _animation->getURL().toString() != entity->getAnimationURL()) { + qCDebug(entitiesrenderer) << "changed animation or started animation"; mapJoints(entity, model->getJointNames()); } if (!(entity->getAnimationFirstFrame() < 0) && !(entity->getAnimationFirstFrame() > entity->getAnimationLastFrame())) { diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.h b/libraries/entities-renderer/src/RenderableModelEntityItem.h index b3988e0239..ce4d44daf8 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.h +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.h @@ -193,6 +193,9 @@ private: bool _animating { false }; uint64_t _lastAnimated { 0 }; + //fix test + AnimationPropertyGroup _previousAnimationProperties; + render::ItemKey _itemKey { render::ItemKey::Builder().withTypeMeta() }; }; From 9f484a7f57e870bf4d3691dce47d3cf80243571b Mon Sep 17 00:00:00 2001 From: amantley Date: Thu, 18 Jan 2018 08:54:05 -0800 Subject: [PATCH 2/4] Removed extraneous comments in RenderableItemEntity.cpp and .h --- libraries/entities-renderer/src/RenderableModelEntityItem.cpp | 1 - libraries/entities-renderer/src/RenderableModelEntityItem.h | 2 -- 2 files changed, 3 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index 684540453b..cdbdd31d71 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -1404,7 +1404,6 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce } _previousAnimationProperties = newprops; } - // if (!jointsMapped() || _animation->getURL().toString() != entity->getAnimationURL()) { qCDebug(entitiesrenderer) << "changed animation or started animation"; mapJoints(entity, model->getJointNames()); diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.h b/libraries/entities-renderer/src/RenderableModelEntityItem.h index ce4d44daf8..014c5bbf67 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.h +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.h @@ -192,8 +192,6 @@ private: bool _shouldHighlight { false }; bool _animating { false }; uint64_t _lastAnimated { 0 }; - - //fix test AnimationPropertyGroup _previousAnimationProperties; render::ItemKey _itemKey { render::ItemKey::Builder().withTypeMeta() }; From 1c97272767e3806c3fa9aa35d9474097c57e9934 Mon Sep 17 00:00:00 2001 From: amantley Date: Thu, 18 Jan 2018 12:09:28 -0800 Subject: [PATCH 3/4] Cleaned up the code a bit so that there is no need for a new class variable for properties to verify the change of url --- .../src/RenderableModelEntityItem.cpp | 18 +++++++----------- .../src/RenderableModelEntityItem.h | 1 - 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index cdbdd31d71..8b5a23b787 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -1394,18 +1394,14 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce // That is where _currentFrame and _lastAnimated were updated. if (_animating) { DETAILED_PROFILE_RANGE(simulation_physics, "Animate"); - // check animation url change - auto newprops = entity->getAnimationProperties(); - if (newprops != _previousAnimationProperties) { - if (newprops.getURL() != _previousAnimationProperties.getURL()) { - _animation = DependencyManager::get()->getAnimation(entity->getAnimationURL()); - _jointMappingCompleted = false; - mapJoints(entity, model->getJointNames()); - } - _previousAnimationProperties = newprops; + + if (!jointsMapped()) { + mapJoints(entity, model->getJointNames()); } - if (!jointsMapped() || _animation->getURL().toString() != entity->getAnimationURL()) { - qCDebug(entitiesrenderer) << "changed animation or started animation"; + //else the joints have been mapped before but we have new animation to load + else if (_animation && (_animation->getURL().toString() != entity->getAnimationURL())) { + _animation = DependencyManager::get()->getAnimation(entity->getAnimationURL()); + _jointMappingCompleted = false; mapJoints(entity, model->getJointNames()); } if (!(entity->getAnimationFirstFrame() < 0) && !(entity->getAnimationFirstFrame() > entity->getAnimationLastFrame())) { diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.h b/libraries/entities-renderer/src/RenderableModelEntityItem.h index 014c5bbf67..b3988e0239 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.h +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.h @@ -192,7 +192,6 @@ private: bool _shouldHighlight { false }; bool _animating { false }; uint64_t _lastAnimated { 0 }; - AnimationPropertyGroup _previousAnimationProperties; render::ItemKey _itemKey { render::ItemKey::Builder().withTypeMeta() }; }; From 961ed88fb094515e95afd656ba2e920073cabfa5 Mon Sep 17 00:00:00 2001 From: amantley Date: Thu, 18 Jan 2018 12:56:24 -0800 Subject: [PATCH 4/4] fixed coding standards in RenderableModelEntityItem.cpp --- .../entities-renderer/src/RenderableModelEntityItem.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index 8b5a23b787..fc1688974c 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -1397,9 +1397,8 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce if (!jointsMapped()) { mapJoints(entity, model->getJointNames()); - } - //else the joints have been mapped before but we have new animation to load - else if (_animation && (_animation->getURL().toString() != entity->getAnimationURL())) { + //else the joint have been mapped before but we have a new animation to load + } else if (_animation && (_animation->getURL().toString() != entity->getAnimationURL())) { _animation = DependencyManager::get()->getAnimation(entity->getAnimationURL()); _jointMappingCompleted = false; mapJoints(entity, model->getJointNames());