godot_synced_blend_tree/synced_animation_graph.h

68 lines
2.1 KiB
C
Raw Permalink Normal View History

2025-11-09 17:22:44 +01:00
#pragma once
2025-11-23 18:14:02 +01:00
#include "scene/animation/animation_player.h"
#include "synced_animation_node.h"
2025-11-09 17:22:44 +01:00
2025-11-22 16:45:05 +01:00
#include <cassert>
2025-11-23 18:14:02 +01:00
class Skeleton3D;
class SyncedAnimationGraph : public Node {
GDCLASS(SyncedAnimationGraph, Node);
2025-11-09 17:22:44 +01:00
private:
NodePath animation_player_path;
NodePath skeleton_path;
2025-11-09 17:22:44 +01:00
GraphEvaluationContext graph_context = {};
Ref<SyncedAnimationNode> graph_root_node = nullptr;
AnimationData graph_output;
2025-11-09 17:22:44 +01:00
protected:
void _notification(int p_what);
2025-11-09 17:22:44 +01:00
static void _bind_methods();
/* ---- General settings for animation ---- */
AnimationMixer::AnimationCallbackModeProcess callback_mode_process = AnimationMixer::ANIMATION_CALLBACK_MODE_PROCESS_IDLE;
AnimationMixer::AnimationCallbackModeMethod callback_mode_method = AnimationMixer::ANIMATION_CALLBACK_MODE_METHOD_DEFERRED;
AnimationMixer::AnimationCallbackModeDiscrete callback_mode_discrete = AnimationMixer::ANIMATION_CALLBACK_MODE_DISCRETE_RECESSIVE;
bool processing = false;
bool active = true;
2025-11-09 17:22:44 +01:00
public:
void _process_graph(double p_delta, bool p_update_only = false);
void _apply_animation_data(const AnimationData& output_data) const;
void set_active(bool p_active);
bool is_active() const;
void set_animation_player(const NodePath &p_path);
NodePath get_animation_player() const;
void set_skeleton(const NodePath &p_path);
NodePath get_skeleton() const;
void set_graph_root_node(const Ref<SyncedAnimationNode> &p_animation_node);
Ref<SyncedAnimationNode> get_graph_root_node() const;
void set_callback_mode_process(AnimationMixer::AnimationCallbackModeProcess p_mode);
AnimationMixer::AnimationCallbackModeProcess get_callback_mode_process() const;
void set_callback_mode_method(AnimationMixer::AnimationCallbackModeMethod p_mode);
AnimationMixer::AnimationCallbackModeMethod get_callback_mode_method() const;
void set_callback_mode_discrete(AnimationMixer::AnimationCallbackModeDiscrete p_mode);
AnimationMixer::AnimationCallbackModeDiscrete get_callback_mode_discrete() const;
2025-11-09 17:22:44 +01:00
SyncedAnimationGraph();
private:
void _set_process(bool p_process, bool p_force = false);
2025-11-28 00:07:45 +01:00
void _setup_evaluation_context();
void _cleanup_evaluation_context();
2025-11-28 00:07:45 +01:00
void _setup_graph();
2025-11-22 16:45:05 +01:00
};