71 lines
1.5 KiB
C++
71 lines
1.5 KiB
C++
//
|
|
// Created by martin on 17.03.24.
|
|
//
|
|
|
|
#ifndef ANIMTESTBED_ANIMNODE_H
|
|
#define ANIMTESTBED_ANIMNODE_H
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#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<AnimGraphConnection> 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
|