diff --git a/spine-godot/example/examples/03-mix-and-match/mix-and-match.gd b/spine-godot/example/examples/03-mix-and-match/mix-and-match.gd index e11707383..4b8eabcc4 100644 --- a/spine-godot/example/examples/03-mix-and-match/mix-and-match.gd +++ b/spine-godot/example/examples/03-mix-and-match/mix-and-match.gd @@ -2,7 +2,7 @@ extends SpineSprite func _ready(): var data = get_skeleton().get_data() - var custom_skin = SpineSkin.new().init("custom-skin") + var custom_skin = new_skin("custom-skin") var skin_base = data.find_skin("skin-base") custom_skin.add_skin(skin_base) custom_skin.add_skin(data.find_skin("nose/short")) diff --git a/spine-godot/spine_godot/SpineAnimation.cpp b/spine-godot/spine_godot/SpineAnimation.cpp index 02dc46a40..fc677ff68 100644 --- a/spine-godot/spine_godot/SpineAnimation.cpp +++ b/spine-godot/spine_godot/SpineAnimation.cpp @@ -68,7 +68,7 @@ void SpineAnimation::apply(Ref skeleton, float last_time, float t spine_object->apply(*(skeleton->get_spine_object()), last_time, time, loop, &spineEvents, alpha, (spine::MixBlend) blend, (spine::MixDirection) direction); for (int i = 0; i < (int)spineEvents.size(); ++i) { auto event_ref = memnew(SpineEvent); - event_ref->set_spine_object(spineEvents[i]); + event_ref->set_spine_object(skeleton->get_spine_owner(), spineEvents[i]); events.append(event_ref); } } @@ -81,7 +81,7 @@ Array SpineAnimation::get_timelines() { for (int i = 0; i < (int)result.size(); ++i) { auto timeline_ref = Ref(memnew(SpineTimeline)); - timeline_ref->set_spine_object(timelines[i]); + timeline_ref->set_spine_object(get_spine_owner(), timelines[i]); result.set(i, timeline_ref); } return result; diff --git a/spine-godot/spine_godot/SpineEvent.cpp b/spine-godot/spine_godot/SpineEvent.cpp index 51d6901c1..1ab0c9917 100644 --- a/spine-godot/spine_godot/SpineEvent.cpp +++ b/spine-godot/spine_godot/SpineEvent.cpp @@ -29,6 +29,7 @@ #include "SpineEvent.h" #include "SpineCommon.h" +#include "SpineSprite.h" void SpineEvent::_bind_methods() { ClassDB::bind_method(D_METHOD("get_data"), &SpineEvent::get_data); @@ -45,67 +46,64 @@ void SpineEvent::_bind_methods() { ClassDB::bind_method(D_METHOD("set_balance", "v"), &SpineEvent::set_balance); } -SpineEvent::SpineEvent() : event(nullptr) { -} - Ref SpineEvent::get_data() { - SPINE_CHECK(event, nullptr) + SPINE_CHECK(spine_object, nullptr) Ref event_data(memnew(SpineEventData)); - event_data->set_spine_object((spine::EventData*)&(event->getData())); + event_data->set_spine_object(*get_spine_owner()->get_skeleton_data_res(), (spine::EventData*)&spine_object->getData()); return event_data; } float SpineEvent::get_time() { - SPINE_CHECK(event, 0) - return event->getTime(); + SPINE_CHECK(spine_object, 0) + return spine_object->getTime(); } int SpineEvent::get_int_value() { - SPINE_CHECK(event, 0) - return event->getIntValue(); + SPINE_CHECK(spine_object, 0) + return spine_object->getIntValue(); } void SpineEvent::set_int_value(int v) { - SPINE_CHECK(event,) - event->setIntValue(v); + SPINE_CHECK(spine_object,) + spine_object->setIntValue(v); } float SpineEvent::get_float_value() { - SPINE_CHECK(event, 0) - return event->getFloatValue(); + SPINE_CHECK(spine_object, 0) + return spine_object->getFloatValue(); } void SpineEvent::set_float_value(float v) { - SPINE_CHECK(event,) - event->setFloatValue(v); + SPINE_CHECK(spine_object,) + spine_object->setFloatValue(v); } String SpineEvent::get_string_value() { - SPINE_CHECK(event, "") - return event->getStringValue().buffer(); + SPINE_CHECK(spine_object, "") + return spine_object->getStringValue().buffer(); } void SpineEvent::set_string_value(const String &v) { - SPINE_CHECK(event,) - event->setStringValue(spine::String(v.utf8())); + SPINE_CHECK(spine_object,) + spine_object->setStringValue(spine::String(v.utf8())); } float SpineEvent::get_volume() { - SPINE_CHECK(event, 0) - return event->getVolume(); + SPINE_CHECK(spine_object, 0) + return spine_object->getVolume(); } void SpineEvent::set_volume(float v) { - SPINE_CHECK(event,) - event->setVolume(v); + SPINE_CHECK(spine_object,) + spine_object->setVolume(v); } float SpineEvent::get_balance() { - SPINE_CHECK(event, 0) - return event->getBalance(); + SPINE_CHECK(spine_object, 0) + return spine_object->getBalance(); } void SpineEvent::set_balance(float v) { - SPINE_CHECK(event,) - event->setBalance(v); + SPINE_CHECK(spine_object,) + spine_object->setBalance(v); } diff --git a/spine-godot/spine_godot/SpineEvent.h b/spine-godot/spine_godot/SpineEvent.h index 3ac5440f8..da8f8960a 100644 --- a/spine-godot/spine_godot/SpineEvent.h +++ b/spine-godot/spine_godot/SpineEvent.h @@ -34,22 +34,15 @@ #include "SpineEventData.h" #include -class SpineEvent : public REFCOUNTED { - GDCLASS(SpineEvent, REFCOUNTED) +class SpineSprite; + +class SpineEvent : public SpineObjectWrapper { + GDCLASS(SpineEvent, SpineObjectWrapper) protected: static void _bind_methods(); -private: - spine::Event *event; - public: - SpineEvent(); - - void set_spine_object(spine::Event *_event) { event = _event; } - - spine::Event *get_spine_object() const { return event; } - Ref get_data(); float get_time(); diff --git a/spine-godot/spine_godot/SpineEventData.cpp b/spine-godot/spine_godot/SpineEventData.cpp index 5d30a123b..4713b7db6 100644 --- a/spine-godot/spine_godot/SpineEventData.cpp +++ b/spine-godot/spine_godot/SpineEventData.cpp @@ -44,60 +44,57 @@ void SpineEventData::_bind_methods() { ClassDB::bind_method(D_METHOD("set_balance", "v"), &SpineEventData::set_balance); } -SpineEventData::SpineEventData() : event_data(nullptr) { -} - String SpineEventData::get_event_name() { - SPINE_CHECK(event_data, "") - return event_data->getName().buffer(); + SPINE_CHECK(spine_object, "") + return spine_object->getName().buffer(); } int SpineEventData::get_int_value() { - SPINE_CHECK(event_data, 0) - return event_data->getIntValue(); + SPINE_CHECK(spine_object, 0) + return spine_object->getIntValue(); } void SpineEventData::set_int_value(int v) { - SPINE_CHECK(event_data,) - event_data->setIntValue(v); + SPINE_CHECK(spine_object,) + spine_object->setIntValue(v); } float SpineEventData::get_float_value() { - SPINE_CHECK(event_data, 0) - return event_data->getFloatValue(); + SPINE_CHECK(spine_object, 0) + return spine_object->getFloatValue(); } void SpineEventData::set_float_value(float v) { - SPINE_CHECK(event_data,) - event_data->setFloatValue(v); + SPINE_CHECK(spine_object,) + spine_object->setFloatValue(v); } String SpineEventData::get_string_value() { - SPINE_CHECK(event_data, "") - return event_data->getStringValue().buffer(); + SPINE_CHECK(spine_object, "") + return spine_object->getStringValue().buffer(); } void SpineEventData::set_string_value(const String &v) { - SPINE_CHECK(event_data,) - event_data->setStringValue(spine::String(v.utf8())); + SPINE_CHECK(spine_object,) + spine_object->setStringValue(spine::String(v.utf8())); } float SpineEventData::get_volume() { - SPINE_CHECK(event_data, 0) - return event_data->getVolume(); + SPINE_CHECK(spine_object, 0) + return spine_object->getVolume(); } void SpineEventData::set_volume(float v) { - SPINE_CHECK(event_data,) - event_data->setVolume(v); + SPINE_CHECK(spine_object,) + spine_object->setVolume(v); } float SpineEventData::get_balance() { - SPINE_CHECK(event_data, 0) - return event_data->getBalance(); + SPINE_CHECK(spine_object, 0) + return spine_object->getBalance(); } void SpineEventData::set_balance(float v) { - SPINE_CHECK(event_data,) - event_data->setBalance(v); + SPINE_CHECK(spine_object,) + spine_object->setBalance(v); } diff --git a/spine-godot/spine_godot/SpineEventData.h b/spine-godot/spine_godot/SpineEventData.h index deb1bde1c..899425645 100644 --- a/spine-godot/spine_godot/SpineEventData.h +++ b/spine-godot/spine_godot/SpineEventData.h @@ -33,22 +33,15 @@ #include "SpineCommon.h" #include -class SpineEventData : public REFCOUNTED { +class SpineSkeletonDataResource; + +class SpineEventData : public SpineObjectWrapper { GDCLASS(SpineEventData, REFCOUNTED); protected: static void _bind_methods(); -private: - spine::EventData *event_data; - public: - SpineEventData(); - - void set_spine_object(spine::EventData *_event_data) { event_data = _event_data; } - - spine::EventData *get_spine_object() const { return event_data; } - String get_event_name(); int get_int_value(); diff --git a/spine-godot/spine_godot/SpineIkConstraint.cpp b/spine-godot/spine_godot/SpineIkConstraint.cpp index 038037b65..febe45069 100644 --- a/spine-godot/spine_godot/SpineIkConstraint.cpp +++ b/spine-godot/spine_godot/SpineIkConstraint.cpp @@ -96,7 +96,7 @@ Ref SpineIkConstraint::get_target() { void SpineIkConstraint::set_target(Ref v) { SPINE_CHECK(spine_object,) - spine_object->setTarget(v.is_valid() ? v->get_spine_object() : nullptr); + spine_object->setTarget(v.is_valid() && v->get_spine_object() ? v->get_spine_object() : nullptr); } int SpineIkConstraint::get_bend_direction() { diff --git a/spine-godot/spine_godot/SpineIkConstraintData.cpp b/spine-godot/spine_godot/SpineIkConstraintData.cpp index 0270cc483..3de3e2995 100644 --- a/spine-godot/spine_godot/SpineIkConstraintData.cpp +++ b/spine-godot/spine_godot/SpineIkConstraintData.cpp @@ -72,7 +72,7 @@ Ref SpineIkConstraintData::get_target() { void SpineIkConstraintData::set_target(Ref v) { SPINE_CHECK(spine_object,) - get_spine_constraint_data()->setTarget(v.is_valid() ? v->get_spine_object() : nullptr); + get_spine_constraint_data()->setTarget(v.is_valid() && v->get_spine_object() ? v->get_spine_object() : nullptr); } int SpineIkConstraintData::get_bend_direction() { diff --git a/spine-godot/spine_godot/SpinePathConstraint.cpp b/spine-godot/spine_godot/SpinePathConstraint.cpp index cadb423ef..460c24f5f 100644 --- a/spine-godot/spine_godot/SpinePathConstraint.cpp +++ b/spine-godot/spine_godot/SpinePathConstraint.cpp @@ -138,7 +138,7 @@ Ref SpinePathConstraint::get_target() { void SpinePathConstraint::set_target(Ref v) { SPINE_CHECK(spine_object,) - spine_object->setTarget(v.is_valid() ? v->get_spine_object() : nullptr); + spine_object->setTarget(v.is_valid() && v->get_spine_object() ? v->get_spine_object() : nullptr); } Ref SpinePathConstraint::get_data() { diff --git a/spine-godot/spine_godot/SpinePathConstraintData.cpp b/spine-godot/spine_godot/SpinePathConstraintData.cpp index 7a352414b..a82636dbb 100644 --- a/spine-godot/spine_godot/SpinePathConstraintData.cpp +++ b/spine-godot/spine_godot/SpinePathConstraintData.cpp @@ -79,7 +79,7 @@ Ref SpinePathConstraintData::get_target() { void SpinePathConstraintData::set_target(Ref v) { SPINE_CHECK(get_spine_constraint_data(),) - get_spine_constraint_data()->setTarget(v.is_valid() ? v->get_spine_object() : nullptr); + get_spine_constraint_data()->setTarget(v.is_valid() && v->get_spine_object()? v->get_spine_object() : nullptr); } SpineConstant::PositionMode SpinePathConstraintData::get_position_mode() { diff --git a/spine-godot/spine_godot/SpineSkeleton.cpp b/spine-godot/spine_godot/SpineSkeleton.cpp index 7f3194c02..377f9864c 100644 --- a/spine-godot/spine_godot/SpineSkeleton.cpp +++ b/spine-godot/spine_godot/SpineSkeleton.cpp @@ -76,16 +76,17 @@ SpineSkeleton::~SpineSkeleton() { delete skeleton; } -void SpineSkeleton::set_spine_sprite(SpineSprite *sprite) { +void SpineSkeleton::set_spine_sprite(SpineSprite *_sprite) { delete skeleton; skeleton = nullptr; + sprite = _sprite; if (!sprite || !sprite->get_skeleton_data_res().is_valid() || !sprite->get_skeleton_data_res()->is_skeleton_data_loaded()) return; skeleton = new spine::Skeleton(sprite->get_skeleton_data_res()->get_skeleton_data()); } Ref SpineSkeleton::get_skeleton_data_res() const { if (!sprite) return nullptr; - return sprite->get_skeleton(); + return sprite->get_skeleton_data_res(); } void SpineSkeleton::update_world_transform() { @@ -135,7 +136,7 @@ void SpineSkeleton::set_skin_by_name(const String &skin_name) { void SpineSkeleton::set_skin(Ref new_skin) { SPINE_CHECK(skeleton,) - skeleton->setSkin(new_skin.is_valid() ? new_skin->get_spine_object() : nullptr); + skeleton->setSkin(new_skin.is_valid() && new_skin->get_spine_object() ? new_skin->get_spine_object() : nullptr); } Ref SpineSkeleton::get_attachment_by_slot_name(const String &slot_name, const String &attachment_name) { diff --git a/spine-godot/spine_godot/SpineSkeleton.h b/spine-godot/spine_godot/SpineSkeleton.h index 29f68b9f6..8740f49e7 100644 --- a/spine-godot/spine_godot/SpineSkeleton.h +++ b/spine-godot/spine_godot/SpineSkeleton.h @@ -55,8 +55,9 @@ class SpineSkeleton : public REFCOUNTED { protected: static void _bind_methods(); - void set_spine_sprite(SpineSprite *sprite); + void set_spine_sprite(SpineSprite *_sprite); spine::Skeleton *get_spine_object() { return skeleton; } + SpineSprite *get_spine_owner() { return sprite; } Ref get_skeleton_data_res() const; private: diff --git a/spine-godot/spine_godot/SpineSkeletonDataResource.cpp b/spine-godot/spine_godot/SpineSkeletonDataResource.cpp index e1dda5818..e6eac32c4 100644 --- a/spine-godot/spine_godot/SpineSkeletonDataResource.cpp +++ b/spine-godot/spine_godot/SpineSkeletonDataResource.cpp @@ -325,7 +325,7 @@ Ref SpineSkeletonDataResource::find_event(const String &event_da auto event = skeleton_data->findEvent(SPINE_STRING(event_data_name)); if (!event) return nullptr; Ref event_ref(memnew(SpineEventData)); - event_ref->set_spine_object(event); + event_ref->set_spine_object(this, event); return event_ref; } @@ -413,7 +413,7 @@ Ref SpineSkeletonDataResource::get_default_skin() const { void SpineSkeletonDataResource::set_default_skin(Ref skin) { SPINE_CHECK(skeleton_data,) - skeleton_data->setDefaultSkin(skin.is_valid() ? skin->get_spine_object() : nullptr); + skeleton_data->setDefaultSkin(skin.is_valid() && skin->get_spine_object() ? skin->get_spine_object() : nullptr); } Array SpineSkeletonDataResource::get_events() const { @@ -423,7 +423,7 @@ Array SpineSkeletonDataResource::get_events() const { result.resize((int)events.size()); for (int i = 0; i < events.size(); ++i) { Ref event_ref(memnew(SpineEventData)); - event_ref->set_spine_object(events[i]); + event_ref->set_spine_object(this, events[i]); result[i] = event_ref; } return result; diff --git a/spine-godot/spine_godot/SpineSkin.cpp b/spine-godot/spine_godot/SpineSkin.cpp index dfe54a8bf..3bebcfec2 100644 --- a/spine-godot/spine_godot/SpineSkin.cpp +++ b/spine-godot/spine_godot/SpineSkin.cpp @@ -65,6 +65,7 @@ Ref SpineSkin::init(const String &name, SpineSprite *sprite) { } if (!sprite->get_skeleton_data_res().is_valid() || !sprite->get_skeleton_data_res()->is_skeleton_data_loaded()) { ERR_PRINT("SpineSkeletonDataResource on SpineSprite must be valid and loaded."); + return this; } owns_skin = true; set_spine_object(*sprite->get_skeleton_data_res(), new spine::Skin(SPINE_STRING(name))); @@ -73,7 +74,7 @@ Ref SpineSkin::init(const String &name, SpineSprite *sprite) { void SpineSkin::set_attachment(int slot_index, const String &name, Ref attachment) { SPINE_CHECK(spine_object,) - spine_object->setAttachment(slot_index, SPINE_STRING(name), attachment.is_valid() ? attachment->get_spine_object() : nullptr); + spine_object->setAttachment(slot_index, SPINE_STRING(name), attachment.is_valid() && attachment->get_spine_object()? attachment->get_spine_object() : nullptr); } Ref SpineSkin::get_attachment(int slot_index, const String &name) { diff --git a/spine-godot/spine_godot/SpineSlot.cpp b/spine-godot/spine_godot/SpineSlot.cpp index d039529a5..375907440 100644 --- a/spine-godot/spine_godot/SpineSlot.cpp +++ b/spine-godot/spine_godot/SpineSlot.cpp @@ -113,7 +113,7 @@ Ref SpineSlot::get_attachment() { void SpineSlot::set_attachment(Ref v) { SPINE_CHECK(spine_object,) - spine_object->setAttachment(v.is_valid() ? v->get_spine_object() : nullptr); + spine_object->setAttachment(v.is_valid() && v->get_spine_object() ? v->get_spine_object() : nullptr); } int SpineSlot::get_attachment_state() { diff --git a/spine-godot/spine_godot/SpineSprite.cpp b/spine-godot/spine_godot/SpineSprite.cpp index 86fd48f40..6e0545e33 100644 --- a/spine-godot/spine_godot/SpineSprite.cpp +++ b/spine-godot/spine_godot/SpineSprite.cpp @@ -51,6 +51,7 @@ void SpineSprite::_bind_methods() { ClassDB::bind_method(D_METHOD("get_update_mode"), &SpineSprite::get_update_mode); ClassDB::bind_method(D_METHOD("update_skeleton", "delta"), &SpineSprite::update_skeleton); + ClassDB::bind_method(D_METHOD("new_skin", "name"), &SpineSprite::new_skin); ADD_SIGNAL(MethodInfo("animation_started", PropertyInfo(Variant::OBJECT, "spine_sprite", PROPERTY_HINT_TYPE_STRING, "SpineSprite"), PropertyInfo(Variant::OBJECT, "animation_state", PROPERTY_HINT_TYPE_STRING, "SpineAnimationState"), PropertyInfo(Variant::OBJECT, "track_entry", PROPERTY_HINT_TYPE_STRING, "SpineTrackEntry"))); ADD_SIGNAL(MethodInfo("animation_interrupted", PropertyInfo(Variant::OBJECT, "spine_sprite", PROPERTY_HINT_TYPE_STRING, "SpineSprite"), PropertyInfo(Variant::OBJECT, "animation_state", PROPERTY_HINT_TYPE_STRING, "SpineAnimationState"), PropertyInfo(Variant::OBJECT, "track_entry", PROPERTY_HINT_TYPE_STRING, "SpineTrackEntry"))); @@ -456,7 +457,7 @@ void SpineSprite::callback(spine::AnimationState *state, spine::EventType type, Ref event_ref(nullptr); if (event) { event_ref = Ref(memnew(SpineEvent)); - event_ref->set_spine_object(event); + event_ref->set_spine_object(this, event); } switch (type) { @@ -473,7 +474,7 @@ void SpineSprite::callback(spine::AnimationState *state, spine::EventType type, emit_signal("animation_completed", this, animation_state, entry_ref); break; case spine::EventType_Dispose: - emit_signal("animation_disposed", this, animation_state, entry_ref, event_ref); + emit_signal("animation_disposed", this, animation_state, entry_ref); break; case spine::EventType_Event: emit_signal("animation_event", this, animation_state, entry_ref, event_ref); @@ -494,9 +495,7 @@ Transform2D SpineSprite::get_global_bone_transform(const String &bone_name) { void SpineSprite::set_global_bone_transform(const String &bone_name, Transform2D transform) { if (!animation_state.is_valid() && !skeleton.is_valid()) return; auto bone = skeleton->find_bone(bone_name); - if (!bone.is_valid()) { - return; - } + if (!bone.is_valid()) return; bone->set_global_transform(transform); } @@ -511,7 +510,7 @@ void SpineSprite::set_update_mode(SpineSprite::UpdateMode v) { } Ref SpineSprite::new_skin(const String& name) { - auto skin = memnew(SpineSkin); + Ref skin = memnew(SpineSkin); skin->init(name, this); return skin; } diff --git a/spine-godot/spine_godot/SpineTimeline.cpp b/spine-godot/spine_godot/SpineTimeline.cpp index 94e4a4b6a..8937ae5fd 100644 --- a/spine-godot/spine_godot/SpineTimeline.cpp +++ b/spine-godot/spine_godot/SpineTimeline.cpp @@ -44,35 +44,32 @@ void SpineTimeline::_bind_methods() { ClassDB::bind_method(D_METHOD("get_type"), &SpineTimeline::get_type); } -SpineTimeline::SpineTimeline() : timeline(nullptr) { -} - void SpineTimeline::apply(Ref skeleton, float last_time, float time, Array events, float alpha, SpineConstant::MixBlend blend, SpineConstant::MixDirection direction) { - SPINE_CHECK(timeline,) + SPINE_CHECK(spine_object,) if (!skeleton->get_spine_object()) return; spine::Vector spine_events; spine_events.setSize((int)events.size(), nullptr); for (int i = 0; i < events.size(); ++i) { events[i] = ((Ref) spine_events[i])->get_spine_object(); } - timeline->apply(*(skeleton->get_spine_object()), last_time, time, &spine_events, alpha, (spine::MixBlend) blend, (spine::MixDirection) direction); + spine_object->apply(*(skeleton->get_spine_object()), last_time, time, &spine_events, alpha, (spine::MixBlend) blend, (spine::MixDirection) direction); } int SpineTimeline::get_frame_entries() { - SPINE_CHECK(timeline, 0) - return (int)timeline->getFrameEntries(); + SPINE_CHECK(spine_object, 0) + return (int)spine_object->getFrameEntries(); } int SpineTimeline::get_frame_count() { - SPINE_CHECK(timeline, 0) - return (int)timeline->getFrameCount(); + SPINE_CHECK(spine_object, 0) + return (int)spine_object->getFrameCount(); } Array SpineTimeline::get_frames() { Array result; - SPINE_CHECK(timeline, result) - auto &frames = timeline->getFrames(); + SPINE_CHECK(spine_object, result) + auto &frames = spine_object->getFrames(); result.resize((int)frames.size()); for (int i = 0; i < result.size(); ++i) { result[i] = frames[i]; @@ -81,14 +78,14 @@ Array SpineTimeline::get_frames() { } float SpineTimeline::get_duration() { - SPINE_CHECK(timeline, 0) - return timeline->getDuration(); + SPINE_CHECK(spine_object, 0) + return spine_object->getDuration(); } Array SpineTimeline::get_property_ids() { Array result; - SPINE_CHECK(timeline, result) - auto &ids = timeline->getPropertyIds(); + SPINE_CHECK(spine_object, result) + auto &ids = spine_object->getPropertyIds(); result.resize((int)ids.size()); for (int i = 0; i < result.size(); ++i) { result[i] = (spine::PropertyId) ids[i]; @@ -97,6 +94,6 @@ Array SpineTimeline::get_property_ids() { } String SpineTimeline::get_type() { - SPINE_CHECK(timeline, "") - return timeline->getRTTI().getClassName(); + SPINE_CHECK(spine_object, "") + return spine_object->getRTTI().getClassName(); } diff --git a/spine-godot/spine_godot/SpineTimeline.h b/spine-godot/spine_godot/SpineTimeline.h index 9e7125d61..20559ad8d 100644 --- a/spine-godot/spine_godot/SpineTimeline.h +++ b/spine-godot/spine_godot/SpineTimeline.h @@ -34,24 +34,18 @@ #include "SpineConstant.h" #include +#include "SpineSkeletonDataResource.h" + class SpineSkeleton; class SpineEvent; -class SpineTimeline : public REFCOUNTED { - GDCLASS(SpineTimeline, REFCOUNTED); +class SpineTimeline : public SpineObjectWrapper { + GDCLASS(SpineTimeline, SpineObjectWrapper) protected: static void _bind_methods(); -private: - spine::Timeline *timeline; - public: - SpineTimeline(); - - void set_spine_object(spine::Timeline *_timeline) { this->timeline = _timeline; } - spine::Timeline *get_spine_object() { return timeline; } - void apply(Ref skeleton, float last_time, float time, Array events, float alpha, SpineConstant::MixBlend blend, SpineConstant::MixDirection direction); int get_frame_entries(); diff --git a/spine-godot/spine_godot/SpineTransformConstraint.cpp b/spine-godot/spine_godot/SpineTransformConstraint.cpp index dde6b1c7e..aa571d8c9 100644 --- a/spine-godot/spine_godot/SpineTransformConstraint.cpp +++ b/spine-godot/spine_godot/SpineTransformConstraint.cpp @@ -96,7 +96,7 @@ Ref SpineTransformConstraint::get_target() { void SpineTransformConstraint::set_target(Ref v) { SPINE_CHECK(spine_object,) - spine_object->setTarget(v.is_valid() ? v->get_spine_object() : nullptr); + spine_object->setTarget(v.is_valid() && v->get_spine_object() ? v->get_spine_object() : nullptr); } float SpineTransformConstraint::get_mix_rotate() {