diff --git a/modules/base/rendering/renderablemodel.cpp b/modules/base/rendering/renderablemodel.cpp index 2a387cbd9d..1c3033ced4 100644 --- a/modules/base/rendering/renderablemodel.cpp +++ b/modules/base/rendering/renderablemodel.cpp @@ -163,6 +163,7 @@ namespace { enum class AnimationMode { Once, LoopFromStart, + LoopInfinitely, Bounce }; @@ -336,6 +337,9 @@ RenderableModel::RenderableModel(const ghoul::Dictionary& dictionary) case Parameters::AnimationMode::LoopFromStart: _animationMode = AnimationMode::LoopFromStart; break; + case Parameters::AnimationMode::LoopInfinitely: + _animationMode = AnimationMode::LoopInfinitely; + break; case Parameters::AnimationMode::Bounce: _animationMode = AnimationMode::Bounce; break; @@ -587,6 +591,16 @@ void RenderableModel::update(const UpdateData& data) { _geometry->animationDuration() ); break; + case AnimationMode::LoopInfinitely: + realtiveTime = std::fmod( + data.time.j2000Seconds() - data.time.convertTime(_animationStart), + _geometry->animationDuration() + ); + + if (realtiveTime < 0) { + realtiveTime += _geometry->animationDuration(); + } + break; case AnimationMode::Once: default: realtiveTime = diff --git a/modules/base/rendering/renderablemodel.h b/modules/base/rendering/renderablemodel.h index 7ef6d4a977..a8d8ea49f9 100644 --- a/modules/base/rendering/renderablemodel.h +++ b/modules/base/rendering/renderablemodel.h @@ -73,6 +73,7 @@ private: enum class AnimationMode { Once = 0, LoopFromStart, + LoopInfinitely, Bounce };