diff --git a/include/openspace/scene/rotation.h b/include/openspace/scene/rotation.h index 2c5caab483..f95481a504 100644 --- a/include/openspace/scene/rotation.h +++ b/include/openspace/scene/rotation.h @@ -66,9 +66,9 @@ public: virtual bool initialize(); + virtual void update(const UpdateData& data); const glm::dmat3& matrix() const; virtual glm::dmat3 matrix(const UpdateData& time) const = 0; - virtual void update(const UpdateData& data); static documentation::Documentation Documentation(); diff --git a/include/openspace/scene/scale.h b/include/openspace/scene/scale.h index 537cd57514..55f22458f6 100644 --- a/include/openspace/scene/scale.h +++ b/include/openspace/scene/scale.h @@ -49,9 +49,9 @@ public: virtual bool initialize(); + virtual void update(const UpdateData& data); glm::dvec3 scaleValue() const; virtual glm::dvec3 scaleValue(const UpdateData& data) const = 0; - virtual void update(const UpdateData& data); static documentation::Documentation Documentation(); diff --git a/modules/base/rotation/multirotation.cpp b/modules/base/rotation/multirotation.cpp index 83235a0f15..0e727c3038 100644 --- a/modules/base/rotation/multirotation.cpp +++ b/modules/base/rotation/multirotation.cpp @@ -64,6 +64,12 @@ MultiRotation::MultiRotation(const ghoul::Dictionary& dictionary) } } +void MultiRotation::update(const UpdateData& data) { + for (const ghoul::mm_unique_ptr& rot : _rotations) { + rot->update(data); + } +} + glm::dmat3 MultiRotation::matrix(const UpdateData& data) const { glm::dmat3 res = glm::dmat3(1.0); for (const ghoul::mm_unique_ptr& rot : _rotations) { diff --git a/modules/base/rotation/multirotation.h b/modules/base/rotation/multirotation.h index 335330a7ad..dea7363d16 100644 --- a/modules/base/rotation/multirotation.h +++ b/modules/base/rotation/multirotation.h @@ -39,6 +39,7 @@ class MultiRotation : public Rotation { public: explicit MultiRotation(const ghoul::Dictionary& dictionary); + void update(const UpdateData& data) override; glm::dmat3 matrix(const UpdateData& data) const override; static documentation::Documentation Documentation(); diff --git a/modules/base/rotation/timelinerotation.cpp b/modules/base/rotation/timelinerotation.cpp index 6421d40796..2643ec7646 100644 --- a/modules/base/rotation/timelinerotation.cpp +++ b/modules/base/rotation/timelinerotation.cpp @@ -83,6 +83,18 @@ TimelineRotation::TimelineRotation(const ghoul::Dictionary& dictionary) addProperty(_shouldInterpolate); } +void TimelineRotation::update(const UpdateData& data) { + const double now = data.time.j2000Seconds(); + using KeyframePointer = const Keyframe>*; + + if (KeyframePointer prev = _timeline.lastKeyframeBefore(now, true); prev) { + prev->data->update(data); + } + if (KeyframePointer next = _timeline.firstKeyframeAfter(now, true); next) { + next->data->update(data); + } +} + glm::dmat3 TimelineRotation::matrix(const UpdateData& data) const { const double now = data.time.j2000Seconds(); using KeyframePointer = const Keyframe>*; diff --git a/modules/base/rotation/timelinerotation.h b/modules/base/rotation/timelinerotation.h index b84e3daa3c..189fb5de6d 100644 --- a/modules/base/rotation/timelinerotation.h +++ b/modules/base/rotation/timelinerotation.h @@ -40,6 +40,7 @@ class TimelineRotation : public Rotation { public: explicit TimelineRotation(const ghoul::Dictionary& dictionary); + void update(const UpdateData& data) override; glm::dmat3 matrix(const UpdateData& data) const override; static documentation::Documentation Documentation(); diff --git a/modules/base/scale/multiscale.cpp b/modules/base/scale/multiscale.cpp index e5646f2ffc..c734d45a6c 100644 --- a/modules/base/scale/multiscale.cpp +++ b/modules/base/scale/multiscale.cpp @@ -63,6 +63,12 @@ MultiScale::MultiScale(const ghoul::Dictionary& dictionary) } } +void MultiScale::update(const UpdateData& data) { + for (const ghoul::mm_unique_ptr& scale : _scales) { + scale->update(data); + } +} + glm::dvec3 MultiScale::scaleValue(const UpdateData& data) const { glm::dvec3 res = glm::dvec3(1.0); for (const ghoul::mm_unique_ptr& scale : _scales) { diff --git a/modules/base/scale/multiscale.h b/modules/base/scale/multiscale.h index c55e05b1b9..e0f75e576e 100644 --- a/modules/base/scale/multiscale.h +++ b/modules/base/scale/multiscale.h @@ -35,6 +35,7 @@ class MultiScale : public Scale { public: explicit MultiScale(const ghoul::Dictionary& dictionary); + void update(const UpdateData& data) override; glm::dvec3 scaleValue(const UpdateData& data) const override; static documentation::Documentation Documentation(); diff --git a/modules/base/scale/timelinescale.cpp b/modules/base/scale/timelinescale.cpp index 272805971d..0f2c832b66 100644 --- a/modules/base/scale/timelinescale.cpp +++ b/modules/base/scale/timelinescale.cpp @@ -81,6 +81,18 @@ TimelineScale::TimelineScale(const ghoul::Dictionary& dictionary) addProperty(_shouldInterpolate); } +void TimelineScale::update(const UpdateData& data) { + const double now = data.time.j2000Seconds(); + using KeyframePointer = const Keyframe>*; + + if (KeyframePointer prev = _timeline.lastKeyframeBefore(now, true); prev) { + prev->data->update(data); + } + if (KeyframePointer next = _timeline.firstKeyframeAfter(now, true); next) { + next->data->update(data); + } +} + glm::dvec3 TimelineScale::scaleValue(const UpdateData& data) const { const double now = data.time.j2000Seconds(); using KeyframePointer = const Keyframe>*; diff --git a/modules/base/scale/timelinescale.h b/modules/base/scale/timelinescale.h index 0d0b85c239..224c943fe6 100644 --- a/modules/base/scale/timelinescale.h +++ b/modules/base/scale/timelinescale.h @@ -41,6 +41,7 @@ class TimelineScale : public Scale { public: explicit TimelineScale(const ghoul::Dictionary& dictionary); + void update(const UpdateData& data) override; glm::dvec3 scaleValue(const UpdateData& data) const override; static documentation::Documentation Documentation(); diff --git a/modules/base/translation/multitranslation.cpp b/modules/base/translation/multitranslation.cpp index 825b3eebd8..854fd779ba 100644 --- a/modules/base/translation/multitranslation.cpp +++ b/modules/base/translation/multitranslation.cpp @@ -64,6 +64,12 @@ MultiTranslation::MultiTranslation(const ghoul::Dictionary& dictionary) } } +void MultiTranslation::update(const UpdateData& data) { + for (const ghoul::mm_unique_ptr& rot : _translations) { + rot->update(data); + } +} + glm::dvec3 MultiTranslation::position(const UpdateData& data) const { glm::dvec3 res = glm::dvec3(1.0); for (const ghoul::mm_unique_ptr& rot : _translations) { diff --git a/modules/base/translation/multitranslation.h b/modules/base/translation/multitranslation.h index a39cb158e8..7a5f3c3e86 100644 --- a/modules/base/translation/multitranslation.h +++ b/modules/base/translation/multitranslation.h @@ -37,6 +37,7 @@ class MultiTranslation : public Translation { public: explicit MultiTranslation(const ghoul::Dictionary& dictionary); + void update(const UpdateData& data) override; glm::dvec3 position(const UpdateData& data) const override; static documentation::Documentation Documentation(); diff --git a/modules/base/translation/timelinetranslation.cpp b/modules/base/translation/timelinetranslation.cpp index 8559934058..690d820e36 100644 --- a/modules/base/translation/timelinetranslation.cpp +++ b/modules/base/translation/timelinetranslation.cpp @@ -83,6 +83,18 @@ TimelineTranslation::TimelineTranslation(const ghoul::Dictionary& dictionary) addProperty(_shouldInterpolate); } +void TimelineTranslation::update(const UpdateData& data) { + const double now = data.time.j2000Seconds(); + using KeyframePointer = const Keyframe>*; + + if (KeyframePointer prev = _timeline.lastKeyframeBefore(now, true); prev) { + prev->data->update(data); + } + if (KeyframePointer next = _timeline.firstKeyframeAfter(now, true); next) { + next->data->update(data); + } +} + glm::dvec3 TimelineTranslation::position(const UpdateData& data) const { const double now = data.time.j2000Seconds(); using KeyframePointer = const Keyframe>*; diff --git a/modules/base/translation/timelinetranslation.h b/modules/base/translation/timelinetranslation.h index 1440ab47e7..04bf958ac3 100644 --- a/modules/base/translation/timelinetranslation.h +++ b/modules/base/translation/timelinetranslation.h @@ -41,6 +41,7 @@ class TimelineTranslation : public Translation { public: explicit TimelineTranslation(const ghoul::Dictionary& dictionary); + void update(const UpdateData& data) override; glm::dvec3 position(const UpdateData& data) const override; static documentation::Documentation Documentation();