// // Created by martin on 17.03.24. // #ifndef ANIMTESTBED_ANIMNODE_H #define ANIMTESTBED_ANIMNODE_H #include #include #include "SyncTrack.h" #include "AnimGraphData.h" struct AnimNode; enum class AnimNodeEvalState { Undefined, Deactivated, Activated, SyncTrackUpdated, TimeUpdated, Evaluated }; struct AnimNode { std::string m_name; std::string m_node_type_name; AnimNodeEvalState m_state = AnimNodeEvalState::Undefined; float m_time_now = 0.f; float m_time_last = 0.f; SyncTrack m_sync_track; std::vector m_inputs; virtual ~AnimNode() = default; virtual bool Init(AnimGraphContext& context) { return true; }; virtual void MarkActiveInputs() { for (const auto & input : m_inputs) { AnimNode* input_node = input.m_source_node; if (input_node != nullptr) { input_node->m_state = AnimNodeEvalState::Activated; } } } virtual void CalcSyncTrack() { for (const auto & input : m_inputs) { AnimNode* input_node = input.m_source_node; if (input_node != nullptr && input.m_source_socket.m_type == SocketType::SocketTypeAnimation && input_node->m_state != AnimNodeEvalState::Deactivated) { m_sync_track = input_node->m_sync_track; return; } } } virtual void UpdateTime(float time_last, float time_now) { m_time_last = time_last; m_time_now = time_now; m_state = AnimNodeEvalState::TimeUpdated; } virtual void Evaluate(AnimGraphContext& context){}; }; #endif //ANIMTESTBED_ANIMNODE_H