AnimTestbed/src/AnimNode.h

51 lines
1.1 KiB
C
Raw Normal View History

2021-11-12 21:16:43 +01:00
//
// Created by martin on 12.11.21.
//
#ifndef ANIMTESTBED_ANIMNODE_H
#define ANIMTESTBED_ANIMNODE_H
#include <string>
#include "AnimationController.h"
2021-11-13 00:08:32 +01:00
enum class AnimNodeType {
Blend,
SpeedScale,
AnimSampler
};
2021-11-12 21:16:43 +01:00
2021-11-13 00:08:32 +01:00
struct AnimNode {
AnimNode(AnimationController* animation_controller)
: m_animation_controller(animation_controller),
m_current_time(0.f),
m_is_time_synced(false),
m_anim_duration(0.f) {}
virtual ~AnimNode(){};
AnimNodeType m_anim_node_type;
2021-11-12 21:16:43 +01:00
std::string m_name;
float m_current_time;
2021-11-13 00:08:32 +01:00
bool m_is_time_synced;
float m_anim_duration;
2021-11-12 21:16:43 +01:00
AnimationController* m_animation_controller;
ozz::vector<ozz::math::SoaTransform> m_local_matrices;
2021-11-13 00:08:32 +01:00
virtual void Reset() { m_current_time = 0.f; }
virtual void UpdateIsSynced(bool is_synced) = 0;
virtual void EvalAnimDuration() = 0;
2021-11-12 21:16:43 +01:00
2021-11-13 00:08:32 +01:00
virtual void UpdateTime(float dt) { m_current_time += dt; }
2021-11-12 21:16:43 +01:00
2021-11-13 00:08:32 +01:00
virtual void Evaluate(
ozz::vector<ozz::math::SoaTransform>* local_matrices) = 0;
2021-11-12 21:16:43 +01:00
2021-11-13 00:08:32 +01:00
virtual void CollectNodeOrdering(std::vector<AnimNode*>& anim_nodes) = 0;
2021-11-13 00:08:32 +01:00
virtual void DrawDebugUi(){};
2021-11-12 21:16:43 +01:00
};
#endif //ANIMTESTBED_ANIMNODE_H