From 27bfc9907f834071a406bb1c870d34c25eaf60af Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Mon, 8 Dec 2014 16:31:36 -0800 Subject: [PATCH 1/2] fix bug preventing butterflies from animating (forgot to make base method virtual) --- libraries/entities/src/EntityItem.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/entities/src/EntityItem.h b/libraries/entities/src/EntityItem.h index 314b1c23d5..6fb51cfdba 100644 --- a/libraries/entities/src/EntityItem.h +++ b/libraries/entities/src/EntityItem.h @@ -130,7 +130,7 @@ public: // perform linear extrapolation for SimpleEntitySimulation void simulate(const quint64& now); - bool needsToCallUpdate() const { return false; } + virtual bool needsToCallUpdate() const { return false; } virtual void debugDump() const; From 675a2dd989c5dfe4d8449564f871d93bf49dbb40 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Mon, 8 Dec 2014 16:32:25 -0800 Subject: [PATCH 2/2] add DIRTY_UPDATEABLE flag for changes that need it --- libraries/entities/src/EntityItem.h | 1 + libraries/entities/src/ModelEntityItem.cpp | 16 ++++++++++++++ libraries/entities/src/ModelEntityItem.h | 6 ++--- .../entities/src/SimpleEntitySimulation.cpp | 22 +++++++------------ 4 files changed, 28 insertions(+), 17 deletions(-) diff --git a/libraries/entities/src/EntityItem.h b/libraries/entities/src/EntityItem.h index 6fb51cfdba..915440ee6a 100644 --- a/libraries/entities/src/EntityItem.h +++ b/libraries/entities/src/EntityItem.h @@ -49,6 +49,7 @@ public: DIRTY_MOTION_TYPE = 0x0010, DIRTY_SHAPE = 0x0020, DIRTY_LIFETIME = 0x0040, + DIRTY_UPDATEABLE = 0x0080, // add new simulation-relevant flags above // all other flags below DIRTY_SCRIPT = 0x8000 diff --git a/libraries/entities/src/ModelEntityItem.cpp b/libraries/entities/src/ModelEntityItem.cpp index 565974d19e..b9bf75178f 100644 --- a/libraries/entities/src/ModelEntityItem.cpp +++ b/libraries/entities/src/ModelEntityItem.cpp @@ -397,6 +397,11 @@ void ModelEntityItem::debugDump() const { qDebug() << " model URL:" << getModelURL(); } +void ModelEntityItem::setAnimationURL(const QString& url) { + _dirtyFlags |= EntityItem::DIRTY_UPDATEABLE; + _animationURL = url; +} + void ModelEntityItem::setAnimationSettings(const QString& value) { // the animations setting is a JSON string that may contain various animation settings. // if it includes fps, frameIndex, or running, those values will be parsed out and @@ -448,6 +453,17 @@ void ModelEntityItem::setAnimationSettings(const QString& value) { } _animationSettings = value; + _dirtyFlags |= EntityItem::DIRTY_UPDATEABLE; +} + +void ModelEntityItem::setAnimationIsPlaying(bool value) { + _dirtyFlags |= EntityItem::DIRTY_UPDATEABLE; + _animationLoop.setRunning(value); +} + +void ModelEntityItem::setAnimationFPS(float value) { + _dirtyFlags |= EntityItem::DIRTY_UPDATEABLE; + _animationLoop.setFPS(value); } QString ModelEntityItem::getAnimationSettings() const { diff --git a/libraries/entities/src/ModelEntityItem.h b/libraries/entities/src/ModelEntityItem.h index 502b21af12..6b4ca2416a 100644 --- a/libraries/entities/src/ModelEntityItem.h +++ b/libraries/entities/src/ModelEntityItem.h @@ -73,16 +73,16 @@ public: // model related properties void setModelURL(const QString& url) { _modelURL = url; } - void setAnimationURL(const QString& url) { _animationURL = url; } + void setAnimationURL(const QString& url); static const float DEFAULT_ANIMATION_FRAME_INDEX; void setAnimationFrameIndex(float value) { _animationLoop.setFrameIndex(value); } void setAnimationSettings(const QString& value); static const bool DEFAULT_ANIMATION_IS_PLAYING; - void setAnimationIsPlaying(bool value) { _animationLoop.setRunning(value); } + void setAnimationIsPlaying(bool value); static const float DEFAULT_ANIMATION_FPS; - void setAnimationFPS(float value) { _animationLoop.setFPS(value); } + void setAnimationFPS(float value); void setAnimationLoop(bool loop) { _animationLoop.setLoop(loop); } bool getAnimationLoop() const { return _animationLoop.getLoop(); } diff --git a/libraries/entities/src/SimpleEntitySimulation.cpp b/libraries/entities/src/SimpleEntitySimulation.cpp index 17dbd46727..6fd2d7c48c 100644 --- a/libraries/entities/src/SimpleEntitySimulation.cpp +++ b/libraries/entities/src/SimpleEntitySimulation.cpp @@ -31,12 +31,10 @@ void SimpleEntitySimulation::updateEntitiesInternal(const quint64& now) { } void SimpleEntitySimulation::addEntityInternal(EntityItem* entity) { - if (entity->getCollisionsWillMove()) { - if (entity->isMoving()) { - _movingEntities.insert(entity); - } else { - _movableButStoppedEntities.insert(entity); - } + if (entity->isMoving()) { + _movingEntities.insert(entity); + } else if (entity->getCollisionsWillMove()) { + _movableButStoppedEntities.insert(entity); } } @@ -50,14 +48,10 @@ const int SIMPLE_SIMULATION_DIRTY_FLAGS = EntityItem::DIRTY_VELOCITY | EntityIte void SimpleEntitySimulation::entityChangedInternal(EntityItem* entity) { int dirtyFlags = entity->getDirtyFlags(); if (dirtyFlags & SIMPLE_SIMULATION_DIRTY_FLAGS) { - if (entity->getCollisionsWillMove()) { - if (entity->isMoving()) { - _movingEntities.insert(entity); - _movableButStoppedEntities.remove(entity); - } else { - _movingEntities.remove(entity); - _movableButStoppedEntities.insert(entity); - } + if (entity->isMoving()) { + _movingEntities.insert(entity); + } else if (entity->getCollisionsWillMove()) { + _movableButStoppedEntities.remove(entity); } else { _movingEntities.remove(entity); _movableButStoppedEntities.remove(entity);