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);