|
|
@@ -1,8 +1,10 @@
|
|
|
|
#ifndef ANIMATION_SYSTEM_H
|
|
|
|
#ifndef ANIMATION_SYSTEM_H
|
|
|
|
#define ANIMATION_SYSTEM_H
|
|
|
|
#define ANIMATION_SYSTEM_H
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class AnimationNode;
|
|
|
|
|
|
|
|
|
|
|
|
namespace ECS {
|
|
|
|
namespace ECS {
|
|
|
|
struct AnimationPlayer;
|
|
|
|
struct AnimationPlayer;
|
|
|
|
struct AnimationTreee;
|
|
|
|
|
|
|
|
enum AnimationProcessMode {
|
|
|
|
enum AnimationProcessMode {
|
|
|
|
ANIMATION_PROCESS_PHYSICS,
|
|
|
|
ANIMATION_PROCESS_PHYSICS,
|
|
|
|
ANIMATION_PROCESS_IDLE,
|
|
|
|
ANIMATION_PROCESS_IDLE,
|
|
|
@@ -23,12 +25,6 @@ struct TrackNodeCache {
|
|
|
|
NodePath path;
|
|
|
|
NodePath path;
|
|
|
|
flecs::entity_t id;
|
|
|
|
flecs::entity_t id;
|
|
|
|
Ref<Resource> resource;
|
|
|
|
Ref<Resource> resource;
|
|
|
|
#if 0
|
|
|
|
|
|
|
|
Node *node;
|
|
|
|
|
|
|
|
Spatial *spatial;
|
|
|
|
|
|
|
|
Node2D *node_2d;
|
|
|
|
|
|
|
|
Skeleton *skeleton;
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
flecs::entity_t bone_idx;
|
|
|
|
flecs::entity_t bone_idx;
|
|
|
|
// accumulated transforms
|
|
|
|
// accumulated transforms
|
|
|
|
Vector3 loc_accum;
|
|
|
|
Vector3 loc_accum;
|
|
|
@@ -39,51 +35,9 @@ struct TrackNodeCache {
|
|
|
|
float audio_start;
|
|
|
|
float audio_start;
|
|
|
|
float audio_len;
|
|
|
|
float audio_len;
|
|
|
|
bool animation_playing;
|
|
|
|
bool animation_playing;
|
|
|
|
#if 0
|
|
|
|
|
|
|
|
struct PropertyAnim {
|
|
|
|
|
|
|
|
TrackNodeCache *owner;
|
|
|
|
|
|
|
|
SpecialProperty special;
|
|
|
|
|
|
|
|
Vector<StringName> subpath;
|
|
|
|
|
|
|
|
Object *object;
|
|
|
|
|
|
|
|
Variant value_accum;
|
|
|
|
|
|
|
|
uint64_t accum_pass;
|
|
|
|
|
|
|
|
Variant capture;
|
|
|
|
|
|
|
|
PropertyAnim() :
|
|
|
|
|
|
|
|
owner(nullptr),
|
|
|
|
|
|
|
|
special(SP_NONE),
|
|
|
|
|
|
|
|
object(nullptr),
|
|
|
|
|
|
|
|
accum_pass(0)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
Map<StringName, PropertyAnim> property_anim;
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
|
|
|
|
struct BezierAnim {
|
|
|
|
|
|
|
|
Vector<StringName> bezier_property;
|
|
|
|
|
|
|
|
TrackNodeCache *owner;
|
|
|
|
|
|
|
|
float bezier_accum;
|
|
|
|
|
|
|
|
Object *object;
|
|
|
|
|
|
|
|
uint64_t accum_pass;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BezierAnim() :
|
|
|
|
|
|
|
|
owner(nullptr),
|
|
|
|
|
|
|
|
bezier_accum(0.0),
|
|
|
|
|
|
|
|
object(nullptr),
|
|
|
|
|
|
|
|
accum_pass(0)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
Map<StringName, BezierAnim> bezier_anim;
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
TrackNodeCache() :
|
|
|
|
TrackNodeCache() :
|
|
|
|
used(false), id(-1),
|
|
|
|
used(false),
|
|
|
|
#if 0
|
|
|
|
id(-1),
|
|
|
|
node(nullptr),
|
|
|
|
|
|
|
|
spatial(nullptr),
|
|
|
|
|
|
|
|
node_2d(nullptr),
|
|
|
|
|
|
|
|
skeleton(nullptr),
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
bone_idx(-1),
|
|
|
|
bone_idx(-1),
|
|
|
|
accum_pass(0),
|
|
|
|
accum_pass(0),
|
|
|
|
audio_playing(false),
|
|
|
|
audio_playing(false),
|
|
|
@@ -199,10 +153,7 @@ struct AnimationData {
|
|
|
|
assert(animation);
|
|
|
|
assert(animation);
|
|
|
|
animation = anim;
|
|
|
|
animation = anim;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
AnimationData() :
|
|
|
|
AnimationData() : animation(nullptr), node_cache_size(0) {}
|
|
|
|
animation(nullptr), node_cache_size(0)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
AnimationData(const AnimationData &d)
|
|
|
|
AnimationData(const AnimationData &d)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
int i;
|
|
|
|
int i;
|
|
|
@@ -236,10 +187,7 @@ struct AnimationData {
|
|
|
|
memnew_placement(this, AnimationData(d));
|
|
|
|
memnew_placement(this, AnimationData(d));
|
|
|
|
return *this;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
const Animation *get_animation() const
|
|
|
|
const Animation *get_animation() const { return animation; }
|
|
|
|
{
|
|
|
|
|
|
|
|
return animation;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
~AnimationData() { animation = nullptr; }
|
|
|
|
~AnimationData() { animation = nullptr; }
|
|
|
|
|
|
|
|
|
|
|
@@ -305,12 +253,6 @@ struct AnimationPlayerData {
|
|
|
|
TrackNodeCache *cache_update[NODE_CACHE_UPDATE_MAX];
|
|
|
|
TrackNodeCache *cache_update[NODE_CACHE_UPDATE_MAX];
|
|
|
|
int cache_update_size;
|
|
|
|
int cache_update_size;
|
|
|
|
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
|
|
|
|
TrackNodeCache::PropertyAnim *cache_update_prop[NODE_CACHE_UPDATE_MAX];
|
|
|
|
|
|
|
|
int cache_update_prop_size;
|
|
|
|
|
|
|
|
TrackNodeCache::BezierAnim *cache_update_bezier[NODE_CACHE_UPDATE_MAX];
|
|
|
|
|
|
|
|
int cache_update_bezier_size;
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
Set<TrackNodeCache *> playing_caches;
|
|
|
|
Set<TrackNodeCache *> playing_caches;
|
|
|
|
uint64_t accum_pass;
|
|
|
|
uint64_t accum_pass;
|
|
|
|
float speed_scale;
|
|
|
|
float speed_scale;
|
|
|
@@ -327,9 +269,6 @@ struct AnimationPlayerData {
|
|
|
|
AnimationProcessMode animation_process_mode;
|
|
|
|
AnimationProcessMode animation_process_mode;
|
|
|
|
bool processing;
|
|
|
|
bool processing;
|
|
|
|
bool active;
|
|
|
|
bool active;
|
|
|
|
#if 0
|
|
|
|
|
|
|
|
NodePath root;
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
bool playing;
|
|
|
|
bool playing;
|
|
|
|
AnimationPlayerData(int id)
|
|
|
|
AnimationPlayerData(int id)
|
|
|
|
{
|
|
|
|
{
|
|
|
@@ -380,29 +319,6 @@ struct AnimationPlayerData {
|
|
|
|
AnimationPlayerData(AnimationPlayerData &&d)
|
|
|
|
AnimationPlayerData(AnimationPlayerData &&d)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
memnew_placement(this, AnimationPlayerData(d));
|
|
|
|
memnew_placement(this, AnimationPlayerData(d));
|
|
|
|
#if 0
|
|
|
|
|
|
|
|
int i;
|
|
|
|
|
|
|
|
node_cache_map = d.node_cache_map;
|
|
|
|
|
|
|
|
for (i = 0; i < NODE_CACHE_UPDATE_MAX; i++)
|
|
|
|
|
|
|
|
cache_update[i] = d.cache_update[i];
|
|
|
|
|
|
|
|
cache_update_size = d.cache_update_size;
|
|
|
|
|
|
|
|
playing_caches = d.playing_caches;
|
|
|
|
|
|
|
|
accum_pass = d.accum_pass;
|
|
|
|
|
|
|
|
speed_scale = d.speed_scale;
|
|
|
|
|
|
|
|
default_blend_time = d.default_blend_time;
|
|
|
|
|
|
|
|
animation_set = d.animation_set;
|
|
|
|
|
|
|
|
blend_times = d.blend_times;
|
|
|
|
|
|
|
|
playback = d.playback;
|
|
|
|
|
|
|
|
queued = d.queued;
|
|
|
|
|
|
|
|
end_reached = d.end_reached;
|
|
|
|
|
|
|
|
end_notify = d.end_notify;
|
|
|
|
|
|
|
|
autoplay = d.autoplay;
|
|
|
|
|
|
|
|
reset_on_save = d.reset_on_save;
|
|
|
|
|
|
|
|
animation_process_mode = d.animation_process_mode;
|
|
|
|
|
|
|
|
processing = d.processing;
|
|
|
|
|
|
|
|
active = d.active;
|
|
|
|
|
|
|
|
playing = d.playing;
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
d.playing = playing;
|
|
|
|
d.playing = playing;
|
|
|
|
d.cache_update_size = 0;
|
|
|
|
d.cache_update_size = 0;
|
|
|
|
d.active = false;
|
|
|
|
d.active = false;
|
|
|
@@ -410,29 +326,6 @@ struct AnimationPlayerData {
|
|
|
|
AnimationPlayerData &operator=(const AnimationPlayerData &d)
|
|
|
|
AnimationPlayerData &operator=(const AnimationPlayerData &d)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
memnew_placement(this, AnimationPlayerData(d));
|
|
|
|
memnew_placement(this, AnimationPlayerData(d));
|
|
|
|
#if 0
|
|
|
|
|
|
|
|
int i;
|
|
|
|
|
|
|
|
node_cache_map = d.node_cache_map;
|
|
|
|
|
|
|
|
for (i = 0; i < NODE_CACHE_UPDATE_MAX; i++)
|
|
|
|
|
|
|
|
cache_update[i] = d.cache_update[i];
|
|
|
|
|
|
|
|
cache_update_size = d.cache_update_size;
|
|
|
|
|
|
|
|
playing_caches = d.playing_caches;
|
|
|
|
|
|
|
|
accum_pass = d.accum_pass;
|
|
|
|
|
|
|
|
speed_scale = d.speed_scale;
|
|
|
|
|
|
|
|
default_blend_time = d.default_blend_time;
|
|
|
|
|
|
|
|
animation_set = d.animation_set;
|
|
|
|
|
|
|
|
blend_times = d.blend_times;
|
|
|
|
|
|
|
|
playback = d.playback;
|
|
|
|
|
|
|
|
queued = d.queued;
|
|
|
|
|
|
|
|
end_reached = d.end_reached;
|
|
|
|
|
|
|
|
end_notify = d.end_notify;
|
|
|
|
|
|
|
|
autoplay = d.autoplay;
|
|
|
|
|
|
|
|
reset_on_save = d.reset_on_save;
|
|
|
|
|
|
|
|
animation_process_mode = d.animation_process_mode;
|
|
|
|
|
|
|
|
processing = d.processing;
|
|
|
|
|
|
|
|
active = d.active;
|
|
|
|
|
|
|
|
playing = d.playing;
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
return *this;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
AnimationPlayerData &operator=(AnimationPlayerData &&d)
|
|
|
|
AnimationPlayerData &operator=(AnimationPlayerData &&d)
|
|
|
@@ -464,11 +357,13 @@ struct AnimationPlayerData {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
~AnimationPlayerData() { playing = false; }
|
|
|
|
~AnimationPlayerData() { playing = false; }
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
/* AnimationPlayer */
|
|
|
|
/* public functions */
|
|
|
|
/* public functions */
|
|
|
|
StringName find_animation(
|
|
|
|
StringName find_animation(
|
|
|
|
struct AnimationPlayerData *player, const Ref<Animation> &p_animation);
|
|
|
|
struct AnimationPlayerData *player, const Ref<Animation> &p_animation);
|
|
|
|
Error add_animation(flecs::entity_t entity, flecs::world &ecs, struct AnimationPlayerData *player,
|
|
|
|
Error add_animation(flecs::entity_t entity, flecs::world &ecs,
|
|
|
|
const StringName &p_name, const Animation *p_animation);
|
|
|
|
struct AnimationPlayerData *player, const StringName &p_name,
|
|
|
|
|
|
|
|
const Animation *p_animation);
|
|
|
|
void remove_animation(flecs::entity_t entity, flecs::world &ecs,
|
|
|
|
void remove_animation(flecs::entity_t entity, flecs::world &ecs,
|
|
|
|
struct AnimationPlayerData *player, const StringName &p_name);
|
|
|
|
struct AnimationPlayerData *player, const StringName &p_name);
|
|
|
|
void rename_animation(struct AnimationPlayerData *player,
|
|
|
|
void rename_animation(struct AnimationPlayerData *player,
|
|
|
@@ -537,7 +432,8 @@ void advance(flecs::entity_t entity, flecs::world &ecs,
|
|
|
|
AnimationPlayerData *player, float p_time);
|
|
|
|
AnimationPlayerData *player, float p_time);
|
|
|
|
void set_root(struct AnimationPlayerData *player, const NodePath &p_root);
|
|
|
|
void set_root(struct AnimationPlayerData *player, const NodePath &p_root);
|
|
|
|
NodePath get_root(struct AnimationPlayerData *player);
|
|
|
|
NodePath get_root(struct AnimationPlayerData *player);
|
|
|
|
void clear_caches(flecs::entity_t entity, flecs::world &ecs, struct AnimationPlayerData *player);
|
|
|
|
void clear_caches(flecs::entity_t entity, flecs::world &ecs,
|
|
|
|
|
|
|
|
struct AnimationPlayerData *player);
|
|
|
|
void get_argument_options(struct AnimationPlayerData *player,
|
|
|
|
void get_argument_options(struct AnimationPlayerData *player,
|
|
|
|
const StringName &p_function, int p_idx, List<String> *r_options);
|
|
|
|
const StringName &p_function, int p_idx, List<String> *r_options);
|
|
|
|
} //namespace ECS
|
|
|
|
} //namespace ECS
|
|
|
|