[godot] More clean-up.

This commit is contained in:
Mario Zechner 2022-04-06 11:34:03 +02:00
parent cea5adfe1b
commit 25e55b4009
5 changed files with 29 additions and 51 deletions

View File

@ -63,14 +63,14 @@ void SpineAnimation::set_duration(float duration) {
} }
void SpineAnimation::apply(Ref<SpineSkeleton> skeleton, float lastTime, float time, bool loop, void SpineAnimation::apply(Ref<SpineSkeleton> skeleton, float lastTime, float time, bool loop,
Array pEvents, float alpha, SpineConstant::MixBlend blend, Array events, float alpha, SpineConstant::MixBlend blend,
SpineConstant::MixDirection direction) { SpineConstant::MixDirection direction) {
spine::Vector<spine::Event *> events; spine::Vector<spine::Event *> spineEvents;
events.setSize(pEvents.size(), nullptr); spineEvents.setSize(events.size(), nullptr);
for (size_t i = 0; i < events.size(); ++i) { for (size_t i = 0; i < events.size(); ++i) {
events[i] = ((Ref<SpineEvent>) (pEvents[i]))->get_spine_object(); spineEvents[i] = ((Ref<SpineEvent>) (events[i]))->get_spine_object();
} }
animation->apply(*(skeleton->get_spine_object()), lastTime, time, loop, &events, alpha, (spine::MixBlend) blend, (spine::MixDirection) direction); animation->apply(*(skeleton->get_spine_object()), lastTime, time, loop, &spineEvents, alpha, (spine::MixBlend) blend, (spine::MixDirection) direction);
} }
Array SpineAnimation::get_timelines() { Array SpineAnimation::get_timelines() {
@ -88,11 +88,11 @@ Array SpineAnimation::get_timelines() {
} }
bool SpineAnimation::has_timeline(Array ids) { bool SpineAnimation::has_timeline(Array ids) {
spine::Vector<spine::PropertyId> propertyIds; spine::Vector<spine::PropertyId> property_ids;
propertyIds.setSize(ids.size(), 0); property_ids.setSize(ids.size(), 0);
for (size_t i = 0; i < propertyIds.size(); ++i) { for (size_t i = 0; i < property_ids.size(); ++i) {
propertyIds[i] = (int64_t) ids[i]; property_ids[i] = (int64_t) ids[i];
} }
return animation->hasTimeline(propertyIds); return animation->hasTimeline(property_ids);
} }

View File

@ -54,7 +54,7 @@ public:
inline void set_spine_object(spine::Animation *animation) { this->animation = animation; } inline void set_spine_object(spine::Animation *animation) { this->animation = animation; }
inline spine::Animation *get_spine_object() { return animation; } inline spine::Animation *get_spine_object() { return animation; }
void apply(Ref<SpineSkeleton> skeleton, float lastTime, float time, bool loop, Array pEvents, float alpha, SpineConstant::MixBlend blend, SpineConstant::MixDirection direction); void apply(Ref<SpineSkeleton> skeleton, float lastTime, float time, bool loop, Array events, float alpha, SpineConstant::MixBlend blend, SpineConstant::MixDirection direction);
Array get_timelines(); Array get_timelines();

View File

@ -44,7 +44,6 @@ void SpineAnimationState::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_time_scale", "time_scale"), &SpineAnimationState::set_time_scale); ClassDB::bind_method(D_METHOD("set_time_scale", "time_scale"), &SpineAnimationState::set_time_scale);
ClassDB::bind_method(D_METHOD("disable_queue"), &SpineAnimationState::disable_queue); ClassDB::bind_method(D_METHOD("disable_queue"), &SpineAnimationState::disable_queue);
ClassDB::bind_method(D_METHOD("enable_queue"), &SpineAnimationState::enable_queue); ClassDB::bind_method(D_METHOD("enable_queue"), &SpineAnimationState::enable_queue);
// ClassDB::bind_method(D_METHOD("reload"), &SpineAnimationState::reload_animation_state);
ClassDB::bind_method(D_METHOD("get_current", "track_id"), &SpineAnimationState::get_current); ClassDB::bind_method(D_METHOD("get_current", "track_id"), &SpineAnimationState::get_current);
} }
@ -58,25 +57,13 @@ SpineAnimationState::~SpineAnimationState() {
} }
} }
void SpineAnimationState::load_animation_state(Ref<SpineAnimationStateDataResource> ad) { void SpineAnimationState::load_animation_state(Ref<SpineAnimationStateDataResource> animation_state_data) {
if (animation_state) { if (animation_state) {
delete animation_state; delete animation_state;
animation_state = NULL; animation_state = NULL;
} }
animation_state = new spine::AnimationState(ad->get_animation_state_data()); animation_state = new spine::AnimationState(animation_state_data->get_animation_state_data());
anim_state_data_res = ad; anim_state_data_res = animation_state_data;
}
void SpineAnimationState::reload_animation_state() {
if (!anim_state_data_res.is_valid()) {
ERR_PRINT(" Reload animation state fail, because anim_state_data_res not set!");
return;
}
if (animation_state) {
delete animation_state;
animation_state = NULL;
}
animation_state = new spine::AnimationState(anim_state_data_res->get_animation_state_data());
} }
#define CHECK_V \ #define CHECK_V \
@ -164,9 +151,9 @@ float SpineAnimationState::get_time_scale() {
CHECK_X(0); CHECK_X(0);
return animation_state->getTimeScale(); return animation_state->getTimeScale();
} }
void SpineAnimationState::set_time_scale(float v) { void SpineAnimationState::set_time_scale(float time_scale) {
CHECK_V; CHECK_V;
animation_state->setTimeScale(v); animation_state->setTimeScale(time_scale);
} }
void SpineAnimationState::disable_queue() { void SpineAnimationState::disable_queue() {

View File

@ -30,8 +30,6 @@
#ifndef GODOT_SPINEANIMATIONSTATE_H #ifndef GODOT_SPINEANIMATIONSTATE_H
#define GODOT_SPINEANIMATIONSTATE_H #define GODOT_SPINEANIMATIONSTATE_H
#include "core/variant_parser.h"
#include "SpineAnimationStateDataResource.h" #include "SpineAnimationStateDataResource.h"
#include "SpineSkeleton.h" #include "SpineSkeleton.h"
#include "SpineTrackEntry.h" #include "SpineTrackEntry.h"
@ -48,47 +46,40 @@ private:
Ref<SpineAnimationStateDataResource> anim_state_data_res; Ref<SpineAnimationStateDataResource> anim_state_data_res;
public: public:
void load_animation_state(Ref<SpineAnimationStateDataResource> ad); SpineAnimationState();
~SpineAnimationState();
inline void set_animation_state(spine::AnimationState *a) { void load_animation_state(Ref<SpineAnimationStateDataResource> animation_state_data);
animation_state = a;
}
inline spine::AnimationState *get_animation_state() {
return animation_state;
}
void reload_animation_state(); inline void set_spine_object(spine::AnimationState *animation_state) { this->animation_state = animation_state; }
inline spine::AnimationState *get_spine_object() { return animation_state; }
Ref<SpineTrackEntry> set_animation(const String &anim_name, bool loop, uint64_t track_id); Ref<SpineTrackEntry> set_animation(const String &anim_name, bool loop, uint64_t track_id);
inline void set_animation_by_ref(Ref<SpineAnimation> anim, bool loop, uint64_t track_id) {
if (anim.is_valid()) {
animation_state->setAnimation(track_id, anim->get_spine_object(), loop);
}
}
Ref<SpineTrackEntry> add_animation(const String &anim_name, float delay, bool loop, uint64_t track_id); Ref<SpineTrackEntry> add_animation(const String &anim_name, float delay, bool loop, uint64_t track_id);
Ref<SpineTrackEntry> set_empty_animation(uint64_t track_id, float mix_duration); Ref<SpineTrackEntry> set_empty_animation(uint64_t track_id, float mix_duration);
Ref<SpineTrackEntry> add_empty_animation(uint64_t track_id, float mix_duration, float delay); Ref<SpineTrackEntry> add_empty_animation(uint64_t track_id, float mix_duration, float delay);
void set_empty_animations(float mix_duration); void set_empty_animations(float mix_duration);
Ref<SpineAnimationStateDataResource> get_data(); Ref<SpineAnimationStateDataResource> get_data();
float get_time_scale(); float get_time_scale();
void set_time_scale(float v); void set_time_scale(float time_scale);
void disable_queue(); void disable_queue();
void enable_queue(); void enable_queue();
void update(float delta); void update(float delta);
bool apply(Ref<SpineSkeleton> skeleton); bool apply(Ref<SpineSkeleton> skeleton);
void clear_tracks(); void clear_tracks();
void clear_track(uint64_t track_id); void clear_track(uint64_t track_id);
Ref<SpineTrackEntry> get_current(uint64_t track_index); Ref<SpineTrackEntry> get_current(uint64_t track_index);
SpineAnimationState();
~SpineAnimationState();
}; };
#endif//GODOT_SPINEANIMATIONSTATE_H #endif//GODOT_SPINEANIMATIONSTATE_H

View File

@ -37,7 +37,7 @@ void SpineSprite::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_animation_state_data_res"), &SpineSprite::get_animation_state_data_res); ClassDB::bind_method(D_METHOD("get_animation_state_data_res"), &SpineSprite::get_animation_state_data_res);
ClassDB::bind_method(D_METHOD("_on_animation_data_created"), &SpineSprite::_on_animation_data_created); ClassDB::bind_method(D_METHOD("_on_animation_data_created"), &SpineSprite::_on_animation_data_created);
ClassDB::bind_method(D_METHOD("get_skeleton"), &SpineSprite::get_skeleton); ClassDB::bind_method(D_METHOD("get_skeleton"), &SpineSprite::get_skeleton);
ClassDB::bind_method(D_METHOD("get_animation_state"), &SpineSprite::get_animation_state); ClassDB::bind_method(D_METHOD("get_spine_object"), &SpineSprite::get_animation_state);
ClassDB::bind_method(D_METHOD("_on_animation_data_changed"), &SpineSprite::_on_animation_data_changed); ClassDB::bind_method(D_METHOD("_on_animation_data_changed"), &SpineSprite::_on_animation_data_changed);
ClassDB::bind_method(D_METHOD("get_bind_slot_nodes"), &SpineSprite::get_bind_slot_nodes); ClassDB::bind_method(D_METHOD("get_bind_slot_nodes"), &SpineSprite::get_bind_slot_nodes);
@ -197,7 +197,7 @@ void SpineSprite::_on_animation_data_created() {
animation_state = Ref<SpineAnimationState>(memnew(SpineAnimationState)); animation_state = Ref<SpineAnimationState>(memnew(SpineAnimationState));
animation_state->load_animation_state(animation_state_data_res); animation_state->load_animation_state(animation_state_data_res);
animation_state->get_animation_state()->setListener(this); animation_state->get_spine_object()->setListener(this);
animation_state->update(0); animation_state->update(0);
animation_state->apply(skeleton); animation_state->apply(skeleton);