// // Created by martin on 12.11.21. // #ifndef ANIMTESTBED_ANIMSAMPLERNODE_H #define ANIMTESTBED_ANIMSAMPLERNODE_H #include "../AnimNode.h" struct AnimSamplerNode : public AnimNode { AnimSamplerNode(AnimationController* animation_controller) : AnimNode(animation_controller), m_override_ratio(false), m_anim_ratio(0.f) { assert(m_current_time < 100.0f); m_anim_node_type = AnimNodeType::AnimSampler; }; virtual ~AnimSamplerNode() {} ozz::animation::Animation* m_animation; bool m_override_ratio; float m_anim_ratio; ozz::vector m_local_matrices; ozz::animation::SamplingCache m_sampling_cache; void SetAnimation(ozz::animation::Animation* animation, const SyncTrack& sync_track); virtual void UpdateIsSynced(bool is_synced) override { m_is_time_synced = is_synced; } virtual void UpdateSyncTrack() override { } virtual void UpdateTime(float dt) override { m_current_time += dt; if (!m_override_ratio) { if (m_is_time_synced) { m_anim_ratio = fmodf((float)m_current_time, 1.0f); m_current_time = m_anim_ratio; } else { m_anim_ratio = fmodf((float)m_current_time / m_sync_track.m_duration, 1.0f); } } if (m_anim_ratio < 0.f) { m_anim_ratio += 1.0f; } } virtual void Evaluate( ozz::vector* local_matrices) override; virtual void GetInputNodes(std::vector& input_nodes) const override{}; virtual void DrawDebugUi(); }; #endif //ANIMTESTBED_ANIMSAMPLERNODE_H