diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e94e2bab..ad1198146 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -238,6 +238,15 @@ - **Additions** - Added `SpineSlider` and `SpineSliderData` classes for slider constraints + - Added `SpineTrackEntry.get_additive()` / `set_additive()` for additive blending per track entry. + +- **Breaking changes (since previous 4.3 beta)** + - `SpineTrackEntry.get_hold_previous()` / `set_hold_previous()` removed. + - `SpineTrackEntry.get_mix_blend()` / `set_mix_blend()` removed. Use `get_additive()` / `set_additive()` for additive blending. + - `SpineConstant.MixBlend` and `SpineConstant.MixDirection` enums removed. + - `SpineTimeline.apply()` signature changed: `blend` and `direction` parameters replaced with `from_setup`, `add`, `out`. + - `SpineAnimation.apply()` signature changed to match. + - `SpineAnimationTrack` property `hold_previous` replaced with `additive`, property `mix_blend` removed. - Added `SpineBoneLocal` and `SpineBonePose` classes for new pose system - Added pose classes for constraints: `SpineIkConstraintPose`, `SpinePathConstraintPose`, `SpinePhysicsConstraintPose`, `SpineSliderPose`, `SpineTransformConstraintPose` diff --git a/spine-godot/spine_godot/SpineAnimation.cpp b/spine-godot/spine_godot/SpineAnimation.cpp index 3a0ece1e3..a5b3aa4f9 100644 --- a/spine-godot/spine_godot/SpineAnimation.cpp +++ b/spine-godot/spine_godot/SpineAnimation.cpp @@ -40,7 +40,7 @@ void SpineAnimation::_bind_methods() { ClassDB::bind_method(D_METHOD("get_duration"), &SpineAnimation::get_duration); ClassDB::bind_method(D_METHOD("set_duration", "duration"), &SpineAnimation::set_duration); - ClassDB::bind_method(D_METHOD("apply", "skeleton", "last_time", "time", "loop", "events", "alpha", "blend", "direction", "appliedPose"), + ClassDB::bind_method(D_METHOD("apply", "skeleton", "last_time", "time", "loop", "events", "alpha", "from_setup", "add", "out", "appliedPose"), &SpineAnimation::apply); ClassDB::bind_method(D_METHOD("get_timelines"), &SpineAnimation::get_timelines); ClassDB::bind_method(D_METHOD("has_timeline", "ids"), &SpineAnimation::has_timeline); @@ -67,12 +67,11 @@ void SpineAnimation::set_duration(float duration) { get_spine_object()->setDuration(duration); } -void SpineAnimation::apply(Ref skeleton, float last_time, float time, bool loop, Array events, float alpha, - SpineConstant::MixBlend blend, SpineConstant::MixDirection direction, bool appliedPose) { +void SpineAnimation::apply(Ref skeleton, float last_time, float time, bool loop, Array events, float alpha, bool from_setup, bool add, + bool out, bool appliedPose) { SPINE_CHECK(get_spine_object(), ) spine::Array spineEvents; - get_spine_object()->apply(*(skeleton->get_spine_object()), last_time, time, loop, &spineEvents, alpha, (spine::MixBlend) blend, - (spine::MixDirection) direction, appliedPose); + get_spine_object()->apply(*(skeleton->get_spine_object()), last_time, time, loop, &spineEvents, alpha, from_setup, add, out, appliedPose); for (int i = 0; i < (int) spineEvents.size(); ++i) { auto event_ref = memnew(SpineEvent); event_ref->set_spine_object(skeleton->get_spine_owner(), spineEvents[i]); diff --git a/spine-godot/spine_godot/SpineAnimation.h b/spine-godot/spine_godot/SpineAnimation.h index fab68e75a..63b042048 100644 --- a/spine-godot/spine_godot/SpineAnimation.h +++ b/spine-godot/spine_godot/SpineAnimation.h @@ -45,8 +45,8 @@ protected: static void _bind_methods(); public: - void apply(Ref skeleton, float last_time, float time, bool loop, Array events, float alpha, SpineConstant::MixBlend blend, - SpineConstant::MixDirection direction, bool appliedPose); + void apply(Ref skeleton, float last_time, float time, bool loop, Array events, float alpha, bool from_setup, bool add, bool out, + bool appliedPose); Array get_timelines(); diff --git a/spine-godot/spine_godot/SpineAnimationTrack.cpp b/spine-godot/spine_godot/SpineAnimationTrack.cpp index 63faaa212..728a3962f 100644 --- a/spine-godot/spine_godot/SpineAnimationTrack.cpp +++ b/spine-godot/spine_godot/SpineAnimationTrack.cpp @@ -59,8 +59,8 @@ void SpineAnimationTrack::_bind_methods() { ClassDB::bind_method(D_METHOD("get_track_index"), &SpineAnimationTrack::get_track_index); ClassDB::bind_method(D_METHOD("set_mix_duration", "mix_duration"), &SpineAnimationTrack::set_mix_duration); ClassDB::bind_method(D_METHOD("get_mix_duration"), &SpineAnimationTrack::get_mix_duration); - ClassDB::bind_method(D_METHOD("set_hold_previous", "hold_previous"), &SpineAnimationTrack::set_hold_previous); - ClassDB::bind_method(D_METHOD("get_hold_previous"), &SpineAnimationTrack::get_hold_previous); + ClassDB::bind_method(D_METHOD("set_additive", "additive"), &SpineAnimationTrack::set_additive); + ClassDB::bind_method(D_METHOD("get_additive"), &SpineAnimationTrack::get_additive); ClassDB::bind_method(D_METHOD("set_reverse", "reverse"), &SpineAnimationTrack::set_reverse); ClassDB::bind_method(D_METHOD("get_reverse"), &SpineAnimationTrack::get_reverse); ClassDB::bind_method(D_METHOD("set_shortest_rotation", "shortest_rotation"), &SpineAnimationTrack::set_shortest_rotation); @@ -73,8 +73,8 @@ void SpineAnimationTrack::_bind_methods() { ClassDB::bind_method(D_METHOD("get_mix_attachment_threshold"), &SpineAnimationTrack::get_mix_attachment_threshold); ClassDB::bind_method(D_METHOD("set_mix_draw_order_threshold", "mix_draw_order_threshold"), &SpineAnimationTrack::set_mix_draw_order_threshold); ClassDB::bind_method(D_METHOD("get_mix_draw_order_threshold"), &SpineAnimationTrack::get_mix_draw_order_threshold); - ClassDB::bind_method(D_METHOD("set_mix_blend", "mix_blend"), &SpineAnimationTrack::set_mix_blend); - ClassDB::bind_method(D_METHOD("get_mix_blend"), &SpineAnimationTrack::get_mix_blend); + + ClassDB::bind_method(D_METHOD("set_blend_tree_mode", "blend_tree_mode_enabled"), &SpineAnimationTrack::set_blend_tree_mode); ClassDB::bind_method(D_METHOD("get_blend_tree_mode"), &SpineAnimationTrack::get_blend_tree_mode); ClassDB::bind_method(D_METHOD("set_debug", "debug"), &SpineAnimationTrack::set_debug); @@ -91,22 +91,21 @@ void SpineAnimationTrack::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::INT, "track_index", PROPERTY_HINT_RANGE, "0,256,1"), "set_track_index", "get_track_index"); ADD_PROPERTY(PropertyInfo(VARIANT_FLOAT, "mix_duration"), "set_mix_duration", "get_mix_duration"); - ADD_PROPERTY(PropertyInfo(Variant::BOOL, "hold_previous"), "set_hold_previous", "get_hold_previous"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "additive"), "set_additive", "get_additive"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "reverse"), "set_reverse", "get_reverse"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "shortest_rotation"), "set_shortest_rotation", "get_shortest_rotation"); ADD_PROPERTY(PropertyInfo(Variant::VARIANT_FLOAT, "time_scale"), "set_time_scale", "get_time_scale"); ADD_PROPERTY(PropertyInfo(Variant::VARIANT_FLOAT, "alpha"), "set_alpha", "get_alpha"); ADD_PROPERTY(PropertyInfo(Variant::VARIANT_FLOAT, "attachment_threshold"), "set_mix_attachment_threshold", "get_mix_attachment_threshold"); ADD_PROPERTY(PropertyInfo(Variant::VARIANT_FLOAT, "draw_order_threshold"), "set_mix_draw_order_threshold", "get_mix_draw_order_threshold"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "mix_blend", PROPERTY_HINT_ENUM, "Setup,First,Replace,Add"), "set_mix_blend", "get_mix_blend"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "blend_tree_mode"), "set_blend_tree_mode", "get_blend_tree_mode"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "debug"), "set_debug", "get_debug"); } SpineAnimationTrack::SpineAnimationTrack() - : loop(false), animation_changed(false), track_index(-1), mix_duration(-1), hold_previous(false), reverse(false), shortest_rotation(false), - time_scale(1), alpha(1), mix_attachment_threshold(0), mix_draw_order_threshold(0), mix_blend(SpineConstant::MixBlend_Replace), - blend_tree_mode(false), debug(false), sprite(nullptr) { + : loop(false), animation_changed(false), track_index(-1), mix_duration(-1), additive(false), reverse(false), shortest_rotation(false), + time_scale(1), alpha(1), mix_attachment_threshold(0), mix_draw_order_threshold(0), blend_tree_mode(false), debug(false), sprite(nullptr) { } void SpineAnimationTrack::_notification(int what) { @@ -314,14 +313,14 @@ void SpineAnimationTrack::update_animation_state(const Variant &variant_sprite) auto &entry = animation_state->setAnimation(track_index, SPINE_STRING(animation_name), loop); if (should_set_mix) entry.setMixDuration(mix_duration); - entry.setHoldPrevious(hold_previous); + entry.setAdditive(additive); entry.setReverse(reverse); entry.setShortestRotation(shortest_rotation); entry.setTimeScale(time_scale); entry.setAlpha(alpha); entry.setMixAttachmentThreshold(mix_attachment_threshold); entry.setMixDrawOrderThreshold(mix_draw_order_threshold); - entry.setMixBlend((spine::MixBlend) mix_blend); + if (debug) print_line(String("Setting animation {0} with mix_duration {1} on track {2} on {3}") @@ -428,13 +427,13 @@ void SpineAnimationTrack::update_animation_state(const Variant &variant_sprite) entry.setMixDuration(0); entry.setTrackTime(track_time); - entry.setHoldPrevious(hold_previous); + entry.setAdditive(additive); entry.setReverse(reverse); entry.setShortestRotation(shortest_rotation); entry.setAlpha(alpha); entry.setMixAttachmentThreshold(mix_attachment_threshold); entry.setMixDrawOrderThreshold(mix_draw_order_threshold); - entry.setMixBlend((spine::MixBlend) mix_blend); + #endif } else { if (animation_player->is_playing()) { @@ -454,14 +453,14 @@ void SpineAnimationTrack::update_animation_state(const Variant &variant_sprite) auto &entry = animation_state->setAnimation(track_index, SPINE_STRING(animation_name), loop); if (should_set_mix) entry.setMixDuration(mix_duration); - entry.setHoldPrevious(hold_previous); + entry.setAdditive(additive); entry.setReverse(reverse); entry.setShortestRotation(shortest_rotation); entry.setTimeScale(time_scale); entry.setAlpha(alpha); entry.setMixAttachmentThreshold(mix_attachment_threshold); entry.setMixDrawOrderThreshold(mix_draw_order_threshold); - entry.setMixBlend((spine::MixBlend) mix_blend); + if (debug) print_line(String("Setting animation {0} with mix_duration {1} on track {2} on {3}") @@ -519,12 +518,12 @@ float SpineAnimationTrack::get_mix_duration() { return mix_duration; } -void SpineAnimationTrack::set_hold_previous(bool _hold_previous) { - hold_previous = _hold_previous; +void SpineAnimationTrack::set_additive(bool _additive) { + additive = _additive; } -bool SpineAnimationTrack::get_hold_previous() { - return hold_previous; +bool SpineAnimationTrack::get_additive() { + return additive; } void SpineAnimationTrack::set_reverse(bool _reverse) { @@ -575,14 +574,6 @@ float SpineAnimationTrack::get_mix_draw_order_threshold() { return mix_draw_order_threshold; } -void SpineAnimationTrack::set_mix_blend(SpineConstant::MixBlend _blend) { - mix_blend = _blend; -} - -SpineConstant::MixBlend SpineAnimationTrack::get_mix_blend() { - return mix_blend; -} - void SpineAnimationTrack::set_blend_tree_mode(bool _blend_tree_mode) { blend_tree_mode = _blend_tree_mode; } diff --git a/spine-godot/spine_godot/SpineAnimationTrack.h b/spine-godot/spine_godot/SpineAnimationTrack.h index 3454cec24..cb4929b8f 100644 --- a/spine-godot/spine_godot/SpineAnimationTrack.h +++ b/spine-godot/spine_godot/SpineAnimationTrack.h @@ -48,14 +48,14 @@ protected: // These can be set by the user. int track_index; float mix_duration; - bool hold_previous; + bool additive; bool reverse; bool shortest_rotation; float time_scale; float alpha; float mix_attachment_threshold; float mix_draw_order_threshold; - SpineConstant::MixBlend mix_blend; + bool blend_tree_mode; bool debug; @@ -96,9 +96,9 @@ public: float get_mix_duration(); - void set_hold_previous(bool _hold_previous); + void set_additive(bool _additive); - bool get_hold_previous(); + bool get_additive(); void set_reverse(bool _reverse); @@ -124,9 +124,6 @@ public: float get_mix_draw_order_threshold(); - void set_mix_blend(SpineConstant::MixBlend _blend); - - SpineConstant::MixBlend get_mix_blend(); void set_blend_tree_mode(bool _blend_tree_mode); diff --git a/spine-godot/spine_godot/SpineConstant.cpp b/spine-godot/spine_godot/SpineConstant.cpp index dfe4aabb5..32cbeb24a 100644 --- a/spine-godot/spine_godot/SpineConstant.cpp +++ b/spine-godot/spine_godot/SpineConstant.cpp @@ -30,14 +30,6 @@ #include "SpineConstant.h" void SpineConstant::_bind_methods() { - BIND_ENUM_CONSTANT(MixBlend_Setup) - BIND_ENUM_CONSTANT(MixBlend_First) - BIND_ENUM_CONSTANT(MixBlend_Replace) - BIND_ENUM_CONSTANT(MixBlend_Add) - - BIND_ENUM_CONSTANT(MixDirection_In) - BIND_ENUM_CONSTANT(MixDirection_Out) - BIND_ENUM_CONSTANT(Property_Rotate) BIND_ENUM_CONSTANT(Property_X) BIND_ENUM_CONSTANT(Property_Y) diff --git a/spine-godot/spine_godot/SpineConstant.h b/spine-godot/spine_godot/SpineConstant.h index 9bb96f87e..5260a46cc 100644 --- a/spine-godot/spine_godot/SpineConstant.h +++ b/spine-godot/spine_godot/SpineConstant.h @@ -38,18 +38,6 @@ protected: static void _bind_methods(); public: - enum MixBlend { - MixBlend_Setup = 0, - MixBlend_First, - MixBlend_Replace, - MixBlend_Add - }; - - enum MixDirection { - MixDirection_In = 0, - MixDirection_Out - }; - enum PropertyId { Property_Rotate = 1 << 0, Property_X = 1 << 1, @@ -124,8 +112,6 @@ public: }; }; -VARIANT_ENUM_CAST(SpineConstant::MixBlend) -VARIANT_ENUM_CAST(SpineConstant::MixDirection) VARIANT_ENUM_CAST(SpineConstant::PropertyId) VARIANT_ENUM_CAST(SpineConstant::Inherit) VARIANT_ENUM_CAST(SpineConstant::PositionMode) diff --git a/spine-godot/spine_godot/SpineSkin.cpp b/spine-godot/spine_godot/SpineSkin.cpp index 32bc8a07f..4c48d0ba4 100644 --- a/spine-godot/spine_godot/SpineSkin.cpp +++ b/spine-godot/spine_godot/SpineSkin.cpp @@ -163,7 +163,7 @@ Array SpineSkin::get_attachments() { attachment_ref = Ref(memnew(SpineAttachment)); attachment_ref->set_spine_object(get_spine_owner(), entry._attachment); } - entry_ref->init(entry._slotIndex, entry._name.buffer(), attachment_ref); + entry_ref->init(entry._slotIndex, entry._placeholderName.buffer(), attachment_ref); result.push_back(entry_ref); } return result; diff --git a/spine-godot/spine_godot/SpineTimeline.cpp b/spine-godot/spine_godot/SpineTimeline.cpp index dee19b706..28178990c 100644 --- a/spine-godot/spine_godot/SpineTimeline.cpp +++ b/spine-godot/spine_godot/SpineTimeline.cpp @@ -35,7 +35,8 @@ #endif void SpineTimeline::_bind_methods() { - ClassDB::bind_method(D_METHOD("apply", "skeleton", "last_time", "time", "events", "alpha", "blend", "direction"), &SpineTimeline::apply); + ClassDB::bind_method(D_METHOD("apply", "skeleton", "last_time", "time", "events", "alpha", "from_setup", "add", "out", "applied_pose"), + &SpineTimeline::apply); ClassDB::bind_method(D_METHOD("get_frame_entries"), &SpineTimeline::get_frame_entries); ClassDB::bind_method(D_METHOD("get_frame_count"), &SpineTimeline::get_frame_count); ClassDB::bind_method(D_METHOD("get_frames"), &SpineTimeline::get_frames); @@ -44,8 +45,8 @@ void SpineTimeline::_bind_methods() { ClassDB::bind_method(D_METHOD("get_type"), &SpineTimeline::get_type); } -void SpineTimeline::apply(Ref skeleton, float last_time, float time, Array events, float alpha, SpineConstant::MixBlend blend, - SpineConstant::MixDirection direction, bool applied_pose) { +void SpineTimeline::apply(Ref skeleton, float last_time, float time, Array events, float alpha, bool from_setup, bool add, bool out, + bool applied_pose) { SPINE_CHECK(get_spine_object(), ) if (!skeleton->get_spine_object()) return; spine::Array spine_events; @@ -53,8 +54,7 @@ void SpineTimeline::apply(Ref skeleton, float last_time, float ti for (int i = 0; i < events.size(); ++i) { events[i] = ((Ref) spine_events[i])->get_spine_object(); } - get_spine_object()->apply(*(skeleton->get_spine_object()), last_time, time, &spine_events, alpha, (spine::MixBlend) blend, - (spine::MixDirection) direction, applied_pose); + get_spine_object()->apply(*(skeleton->get_spine_object()), last_time, time, &spine_events, alpha, from_setup, add, out, applied_pose); } int SpineTimeline::get_frame_entries() { diff --git a/spine-godot/spine_godot/SpineTimeline.h b/spine-godot/spine_godot/SpineTimeline.h index c4613ad7b..45b5e3b15 100644 --- a/spine-godot/spine_godot/SpineTimeline.h +++ b/spine-godot/spine_godot/SpineTimeline.h @@ -45,8 +45,8 @@ protected: static void _bind_methods(); public: - void apply(Ref skeleton, float last_time, float time, Array events, float alpha, SpineConstant::MixBlend blend, - SpineConstant::MixDirection direction, bool applied_pose); + void apply(Ref skeleton, float last_time, float time, Array events, float alpha, bool from_setup, bool add, bool out, + bool applied_pose); int get_frame_entries(); diff --git a/spine-godot/spine_godot/SpineTrackEntry.cpp b/spine-godot/spine_godot/SpineTrackEntry.cpp index f6953c562..7d6f89bf9 100644 --- a/spine-godot/spine_godot/SpineTrackEntry.cpp +++ b/spine-godot/spine_godot/SpineTrackEntry.cpp @@ -36,8 +36,8 @@ void SpineTrackEntry::_bind_methods() { ClassDB::bind_method(D_METHOD("get_previous"), &SpineTrackEntry::get_previous); ClassDB::bind_method(D_METHOD("get_loop"), &SpineTrackEntry::get_loop); ClassDB::bind_method(D_METHOD("set_loop", "v"), &SpineTrackEntry::set_loop); - ClassDB::bind_method(D_METHOD("get_hold_previous"), &SpineTrackEntry::get_hold_previous); - ClassDB::bind_method(D_METHOD("set_hold_previous", "v"), &SpineTrackEntry::set_hold_previous); + ClassDB::bind_method(D_METHOD("get_additive"), &SpineTrackEntry::get_additive); + ClassDB::bind_method(D_METHOD("set_additive", "v"), &SpineTrackEntry::set_additive); ClassDB::bind_method(D_METHOD("get_reverse"), &SpineTrackEntry::get_reverse); ClassDB::bind_method(D_METHOD("set_reverse", "v"), &SpineTrackEntry::set_reverse); ClassDB::bind_method(D_METHOD("get_shortest_rotation"), &SpineTrackEntry::get_shortest_rotation); @@ -74,8 +74,7 @@ void SpineTrackEntry::_bind_methods() { ClassDB::bind_method(D_METHOD("get_mix_duration"), &SpineTrackEntry::get_mix_duration); ClassDB::bind_method(D_METHOD("set_mix_duration", "v"), &SpineTrackEntry::set_mix_duration); ClassDB::bind_method(D_METHOD("set_mix_duration_and_delay", "v", "delay"), &SpineTrackEntry::set_mix_duration_and_delay); - ClassDB::bind_method(D_METHOD("get_mix_blend"), &SpineTrackEntry::get_mix_blend); - ClassDB::bind_method(D_METHOD("set_mix_blend", "v"), &SpineTrackEntry::set_mix_blend); + ClassDB::bind_method(D_METHOD("get_mixing_from"), &SpineTrackEntry::get_mixing_from); ClassDB::bind_method(D_METHOD("get_mixing_to"), &SpineTrackEntry::get_mixing_to); ClassDB::bind_method(D_METHOD("reset_rotation_directions"), &SpineTrackEntry::reset_rotation_directions); @@ -115,14 +114,14 @@ void SpineTrackEntry::set_loop(bool v) { get_spine_object()->setLoop(v); } -bool SpineTrackEntry::get_hold_previous() { +bool SpineTrackEntry::get_additive() { SPINE_CHECK(get_spine_object(), false) - return get_spine_object()->getHoldPrevious(); + return get_spine_object()->getAdditive(); } -void SpineTrackEntry::set_hold_previous(bool v) { +void SpineTrackEntry::set_additive(bool v) { SPINE_CHECK(get_spine_object(), ) - get_spine_object()->setHoldPrevious(v); + get_spine_object()->setAdditive(v); } bool SpineTrackEntry::get_reverse() { @@ -309,16 +308,6 @@ void SpineTrackEntry::set_mix_duration_and_delay(float v, float delay) { get_spine_object()->setMixDuration(v, delay); } -SpineConstant::MixBlend SpineTrackEntry::get_mix_blend() { - SPINE_CHECK(get_spine_object(), SpineConstant::MixBlend_Setup) - return (SpineConstant::MixBlend) get_spine_object()->getMixBlend(); -} - -void SpineTrackEntry::set_mix_blend(SpineConstant::MixBlend v) { - SPINE_CHECK(get_spine_object(), ) - get_spine_object()->setMixBlend((spine::MixBlend) v); -} - Ref SpineTrackEntry::get_mixing_from() { SPINE_CHECK(get_spine_object(), nullptr) auto mixing_from = get_spine_object()->getMixingFrom(); diff --git a/spine-godot/spine_godot/SpineTrackEntry.h b/spine-godot/spine_godot/SpineTrackEntry.h index 42ff04692..7a53c155d 100644 --- a/spine-godot/spine_godot/SpineTrackEntry.h +++ b/spine-godot/spine_godot/SpineTrackEntry.h @@ -53,9 +53,9 @@ public: void set_loop(bool v); - bool get_hold_previous(); + bool get_additive(); - void set_hold_previous(bool v); + void set_additive(bool v); bool get_reverse(); @@ -129,9 +129,6 @@ public: void set_mix_duration_and_delay(float v, float delay); - SpineConstant::MixBlend get_mix_blend(); - - void set_mix_blend(SpineConstant::MixBlend v); Ref get_mixing_from();