/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ #pragma once #include "Base/ITickable.hpp" #include "Base/Event.hpp" #include "Math/Math.hpp" #include "Math/Pose.hpp" #include "Scene/Node.hpp" #include namespace OpenVulkano::Scene { class SimpleAnimationController : public ITickable { Node *m_node = nullptr; Math::PoseF m_targetPose; Math::PoseF m_initialPose; double m_duration = 0; double m_elapsed = 0; public: Event m_completionEvent; SimpleAnimationController() = default; void Reset() { m_elapsed = 0; } void SwapPoses() { std::swap(m_initialPose, m_targetPose); } Node* GetNode() const { return m_node; } void SetNode(Node *node) { m_node = node; } const Math::PoseF& GetInitialPose() const { return m_initialPose; } const Math::PoseF& GetTargetPose() const { return m_targetPose; } void SetPoses(const Math::PoseF &initialPose, const Math::PoseF &targetPose) { m_initialPose = initialPose; m_targetPose = targetPose; } double GetDuration() const { return m_duration; } void SetDuration(double duration) { m_duration = duration; } double GetProgress(); void Tick() override; }; }