mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-02-06 07:14:55 +08:00
[godot] Fix owners not being set correctly, more sanity checks.
This commit is contained in:
parent
6ad83c94a8
commit
7866fff884
@ -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"))
|
||||
|
||||
@ -68,7 +68,7 @@ void SpineAnimation::apply(Ref<SpineSkeleton> 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<SpineTimeline>(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;
|
||||
|
||||
@ -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<SpineEventData> SpineEvent::get_data() {
|
||||
SPINE_CHECK(event, nullptr)
|
||||
SPINE_CHECK(spine_object, nullptr)
|
||||
Ref<SpineEventData> 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);
|
||||
}
|
||||
|
||||
@ -34,22 +34,15 @@
|
||||
#include "SpineEventData.h"
|
||||
#include <spine/Event.h>
|
||||
|
||||
class SpineEvent : public REFCOUNTED {
|
||||
GDCLASS(SpineEvent, REFCOUNTED)
|
||||
class SpineSprite;
|
||||
|
||||
class SpineEvent : public SpineObjectWrapper<SpineSprite, spine::Event> {
|
||||
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<SpineEventData> get_data();
|
||||
|
||||
float get_time();
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -33,22 +33,15 @@
|
||||
#include "SpineCommon.h"
|
||||
#include <spine/EventData.h>
|
||||
|
||||
class SpineEventData : public REFCOUNTED {
|
||||
class SpineSkeletonDataResource;
|
||||
|
||||
class SpineEventData : public SpineObjectWrapper<SpineSkeletonDataResource, spine::EventData> {
|
||||
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();
|
||||
|
||||
@ -96,7 +96,7 @@ Ref<SpineBone> SpineIkConstraint::get_target() {
|
||||
|
||||
void SpineIkConstraint::set_target(Ref<SpineBone> 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() {
|
||||
|
||||
@ -72,7 +72,7 @@ Ref<SpineBoneData> SpineIkConstraintData::get_target() {
|
||||
|
||||
void SpineIkConstraintData::set_target(Ref<SpineBoneData> 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() {
|
||||
|
||||
@ -138,7 +138,7 @@ Ref<SpineSlot> SpinePathConstraint::get_target() {
|
||||
|
||||
void SpinePathConstraint::set_target(Ref<SpineSlot> 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<SpinePathConstraintData> SpinePathConstraint::get_data() {
|
||||
|
||||
@ -79,7 +79,7 @@ Ref<SpineSlotData> SpinePathConstraintData::get_target() {
|
||||
|
||||
void SpinePathConstraintData::set_target(Ref<SpineSlotData> 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() {
|
||||
|
||||
@ -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<SpineSkeletonDataResource> 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<SpineSkin> 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<SpineAttachment> SpineSkeleton::get_attachment_by_slot_name(const String &slot_name, const String &attachment_name) {
|
||||
|
||||
@ -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<SpineSkeletonDataResource> get_skeleton_data_res() const;
|
||||
|
||||
private:
|
||||
|
||||
@ -325,7 +325,7 @@ Ref<SpineEventData> SpineSkeletonDataResource::find_event(const String &event_da
|
||||
auto event = skeleton_data->findEvent(SPINE_STRING(event_data_name));
|
||||
if (!event) return nullptr;
|
||||
Ref<SpineEventData> 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<SpineSkin> SpineSkeletonDataResource::get_default_skin() const {
|
||||
|
||||
void SpineSkeletonDataResource::set_default_skin(Ref<SpineSkin> 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<SpineEventData> 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;
|
||||
|
||||
@ -65,6 +65,7 @@ Ref<SpineSkin> 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> SpineSkin::init(const String &name, SpineSprite *sprite) {
|
||||
|
||||
void SpineSkin::set_attachment(int slot_index, const String &name, Ref<SpineAttachment> 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<SpineAttachment> SpineSkin::get_attachment(int slot_index, const String &name) {
|
||||
|
||||
@ -113,7 +113,7 @@ Ref<SpineAttachment> SpineSlot::get_attachment() {
|
||||
|
||||
void SpineSlot::set_attachment(Ref<SpineAttachment> 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() {
|
||||
|
||||
@ -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<SpineEvent> event_ref(nullptr);
|
||||
if (event) {
|
||||
event_ref = Ref<SpineEvent>(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<SpineSkin> SpineSprite::new_skin(const String& name) {
|
||||
auto skin = memnew(SpineSkin);
|
||||
Ref<SpineSkin> skin = memnew(SpineSkin);
|
||||
skin->init(name, this);
|
||||
return skin;
|
||||
}
|
||||
|
||||
@ -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<SpineSkeleton> 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::Event *> spine_events;
|
||||
spine_events.setSize((int)events.size(), nullptr);
|
||||
for (int i = 0; i < events.size(); ++i) {
|
||||
events[i] = ((Ref<SpineEvent>) 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();
|
||||
}
|
||||
|
||||
@ -34,24 +34,18 @@
|
||||
#include "SpineConstant.h"
|
||||
#include <spine/Timeline.h>
|
||||
|
||||
#include "SpineSkeletonDataResource.h"
|
||||
|
||||
class SpineSkeleton;
|
||||
class SpineEvent;
|
||||
|
||||
class SpineTimeline : public REFCOUNTED {
|
||||
GDCLASS(SpineTimeline, REFCOUNTED);
|
||||
class SpineTimeline : public SpineObjectWrapper<SpineSkeletonDataResource, spine::Timeline> {
|
||||
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<SpineSkeleton> skeleton, float last_time, float time, Array events, float alpha, SpineConstant::MixBlend blend, SpineConstant::MixDirection direction);
|
||||
|
||||
int get_frame_entries();
|
||||
|
||||
@ -96,7 +96,7 @@ Ref<SpineBone> SpineTransformConstraint::get_target() {
|
||||
|
||||
void SpineTransformConstraint::set_target(Ref<SpineBone> 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() {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user