[godot] Clean-up SpineSlotData

This commit is contained in:
Mario Zechner 2022-04-20 12:03:53 +02:00
parent 3de051380a
commit 44cecb6b2d
5 changed files with 66 additions and 55 deletions

View File

@ -189,6 +189,6 @@ void SpineCollisionShapeProxy::get_slot_names(Vector<String> &slot_names) const
for (size_t i = 0; i < slots.size(); ++i) { for (size_t i = 0; i < slots.size(); ++i) {
auto slot = (Ref<SpineSlot>) slots[i]; auto slot = (Ref<SpineSlot>) slots[i];
if (slot.is_valid()) if (slot.is_valid())
slot_names.set(i, slot->get_data()->get_slot_name()); slot_names.set(i, slot->get_data()->get_name());
} }
} }

View File

@ -75,4 +75,9 @@ void SpineConstant::_bind_methods() {
BIND_ENUM_CONSTANT(RotateMode_Tangent) BIND_ENUM_CONSTANT(RotateMode_Tangent)
BIND_ENUM_CONSTANT(RotateMode_Chain) BIND_ENUM_CONSTANT(RotateMode_Chain)
BIND_ENUM_CONSTANT(RotateMode_ChainScale) BIND_ENUM_CONSTANT(RotateMode_ChainScale)
BIND_ENUM_CONSTANT(BLENDMODE_NORMAL)
BIND_ENUM_CONSTANT(BLENDMODE_ADDITIVE)
BIND_ENUM_CONSTANT(BLENDMODE_MULTIPLY)
BIND_ENUM_CONSTANT(BLENDMODE_SCREEN)
} }

View File

@ -98,6 +98,13 @@ public:
RotateMode_Chain, RotateMode_Chain,
RotateMode_ChainScale RotateMode_ChainScale
}; };
enum BlendMode {
BLENDMODE_NORMAL = 0,
BLENDMODE_ADDITIVE,
BLENDMODE_MULTIPLY,
BLENDMODE_SCREEN
};
}; };
VARIANT_ENUM_CAST(SpineConstant::MixBlend); VARIANT_ENUM_CAST(SpineConstant::MixBlend);
@ -107,5 +114,6 @@ VARIANT_ENUM_CAST(SpineConstant::TransformMode);
VARIANT_ENUM_CAST(SpineConstant::PositionMode); VARIANT_ENUM_CAST(SpineConstant::PositionMode);
VARIANT_ENUM_CAST(SpineConstant::SpacingMode); VARIANT_ENUM_CAST(SpineConstant::SpacingMode);
VARIANT_ENUM_CAST(SpineConstant::RotateMode); VARIANT_ENUM_CAST(SpineConstant::RotateMode);
VARIANT_ENUM_CAST(SpineConstant::BlendMode);
#endif//GODOT_SPINECONSTANT_H #endif//GODOT_SPINECONSTANT_H

View File

@ -28,13 +28,16 @@
*****************************************************************************/ *****************************************************************************/
#include "SpineSlotData.h" #include "SpineSlotData.h"
#include "SpineCommon.h"
void SpineSlotData::_bind_methods() { void SpineSlotData::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_index"), &SpineSlotData::get_index); ClassDB::bind_method(D_METHOD("get_index"), &SpineSlotData::get_index);
ClassDB::bind_method(D_METHOD("get_slot_name"), &SpineSlotData::get_slot_name); ClassDB::bind_method(D_METHOD("get_name"), &SpineSlotData::get_name);
ClassDB::bind_method(D_METHOD("get_bone_data"), &SpineSlotData::get_bone_data); ClassDB::bind_method(D_METHOD("get_bone_data"), &SpineSlotData::get_bone_data);
ClassDB::bind_method(D_METHOD("get_color"), &SpineSlotData::get_color); ClassDB::bind_method(D_METHOD("get_color"), &SpineSlotData::get_color);
ClassDB::bind_method(D_METHOD("set_color", "v"), &SpineSlotData::set_color);
ClassDB::bind_method(D_METHOD("get_dark_color"), &SpineSlotData::get_dark_color); ClassDB::bind_method(D_METHOD("get_dark_color"), &SpineSlotData::get_dark_color);
ClassDB::bind_method(D_METHOD("set_dark_color", "v"), &SpineSlotData::set_dark_color);
ClassDB::bind_method(D_METHOD("has_dark_color"), &SpineSlotData::has_dark_color); ClassDB::bind_method(D_METHOD("has_dark_color"), &SpineSlotData::has_dark_color);
ClassDB::bind_method(D_METHOD("set_has_dark_color", "v"), &SpineSlotData::set_has_dark_color); ClassDB::bind_method(D_METHOD("set_has_dark_color", "v"), &SpineSlotData::set_has_dark_color);
ClassDB::bind_method(D_METHOD("get_attachment_name"), &SpineSlotData::get_attachment_name); ClassDB::bind_method(D_METHOD("get_attachment_name"), &SpineSlotData::get_attachment_name);
@ -42,73 +45,77 @@ void SpineSlotData::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_blend_mode"), &SpineSlotData::get_blend_mode); ClassDB::bind_method(D_METHOD("get_blend_mode"), &SpineSlotData::get_blend_mode);
ClassDB::bind_method(D_METHOD("set_blend_mode", "v"), &SpineSlotData::set_blend_mode); ClassDB::bind_method(D_METHOD("set_blend_mode", "v"), &SpineSlotData::set_blend_mode);
ClassDB::bind_method(D_METHOD("set_color", "v"), &SpineSlotData::set_color);
ClassDB::bind_method(D_METHOD("set_dark_color", "v"), &SpineSlotData::set_dark_color);
BIND_ENUM_CONSTANT(BLENDMODE_NORMAL);
BIND_ENUM_CONSTANT(BLENDMODE_ADDITIVE);
BIND_ENUM_CONSTANT(BLENDMODE_MULTIPLY);
BIND_ENUM_CONSTANT(BLENDMODE_SCREEN);
} }
SpineSlotData::SpineSlotData() : slot_data(NULL) {} SpineSlotData::SpineSlotData() : slot_data(nullptr) {
SpineSlotData::~SpineSlotData() {} }
#define S_T(x) (spine::String(x.utf8()))
int SpineSlotData::get_index() { int SpineSlotData::get_index() {
SPINE_CHECK(slot_data, 0)
return slot_data->getIndex(); return slot_data->getIndex();
} }
String SpineSlotData::get_slot_name() { String SpineSlotData::get_name() {
SPINE_CHECK(slot_data, String(""))
return slot_data->getName().buffer(); return slot_data->getName().buffer();
} }
Ref<SpineBoneData> SpineSlotData::get_bone_data() { Ref<SpineBoneData> SpineSlotData::get_bone_data() {
auto &bd = slot_data->getBoneData(); SPINE_CHECK(slot_data, nullptr)
Ref<SpineBoneData> gd_bone_data(memnew(SpineBoneData)); auto &bone_data = slot_data->getBoneData();
gd_bone_data->set_spine_object(&bd); Ref<SpineBoneData> bone_data_ref(memnew(SpineBoneData));
return gd_bone_data; bone_data_ref->set_spine_object(&bone_data);
return bone_data_ref;
} }
Color SpineSlotData::get_color() { Color SpineSlotData::get_color() {
auto &c = slot_data->getColor(); SPINE_CHECK(slot_data, Color(0, 0, 0, 0))
return Color(c.r, c.g, c.b, c.a); auto &color = slot_data->getColor();
return Color(color.r, color.g, color.b, color.a);
} }
void SpineSlotData::set_color(Color v) { void SpineSlotData::set_color(Color v) {
auto &c = slot_data->getColor(); SPINE_CHECK(slot_data,)
c.set(v.r, v.g, v.b, v.a); auto &color = slot_data->getColor();
color.set(v.r, v.g, v.b, v.a);
} }
Color SpineSlotData::get_dark_color() { Color SpineSlotData::get_dark_color() {
auto &c = slot_data->getDarkColor(); SPINE_CHECK(slot_data, Color(0, 0, 0, 0))
return Color(c.r, c.g, c.b, c.a); auto &color = slot_data->getDarkColor();
return Color(color.r, color.g, color.b, color.a);
} }
void SpineSlotData::set_dark_color(Color v) { void SpineSlotData::set_dark_color(Color v) {
auto &c = slot_data->getDarkColor(); SPINE_CHECK(slot_data,)
c.set(v.r, v.g, v.b, v.a); auto &color = slot_data->getDarkColor();
color.set(v.r, v.g, v.b, v.a);
} }
bool SpineSlotData::has_dark_color() { bool SpineSlotData::has_dark_color() {
SPINE_CHECK(slot_data, false)
return slot_data->hasDarkColor(); return slot_data->hasDarkColor();
} }
void SpineSlotData::set_has_dark_color(bool v) { void SpineSlotData::set_has_dark_color(bool v) {
SPINE_CHECK(slot_data,)
slot_data->setHasDarkColor(v); slot_data->setHasDarkColor(v);
} }
String SpineSlotData::get_attachment_name() { String SpineSlotData::get_attachment_name() {
SPINE_CHECK(slot_data, "")
return slot_data->getAttachmentName().buffer(); return slot_data->getAttachmentName().buffer();
} }
void SpineSlotData::set_attachment_name(const String &v) { void SpineSlotData::set_attachment_name(const String &v) {
slot_data->setAttachmentName(S_T(v)); SPINE_CHECK(slot_data,)
slot_data->setAttachmentName(SPINE_STRING(v));
} }
SpineSlotData::BlendMode SpineSlotData::get_blend_mode() { SpineConstant::BlendMode SpineSlotData::get_blend_mode() {
auto bm = (int) slot_data->getBlendMode(); SPINE_CHECK(slot_data, SpineConstant::BLENDMODE_NORMAL)
return (BlendMode) bm; return (SpineConstant::BlendMode)slot_data->getBlendMode();
} }
void SpineSlotData::set_blend_mode(BlendMode v) { void SpineSlotData::set_blend_mode(SpineConstant::BlendMode v) {
auto bm = (int) v; SPINE_CHECK(slot_data,)
slot_data->setBlendMode((spine::BlendMode) bm); slot_data->setBlendMode((spine::BlendMode) v);
} }
#undef S_T

View File

@ -29,11 +29,10 @@
#ifndef GODOT_SPINESLOTDATA_H #ifndef GODOT_SPINESLOTDATA_H
#define GODOT_SPINESLOTDATA_H #define GODOT_SPINESLOTDATA_H
#include "core/variant_parser.h"
#include <spine/spine.h>
#include "core/object.h"
#include "SpineBoneData.h" #include "SpineBoneData.h"
#include <spine/SlotData.h>
class SpineSlotData : public Reference { class SpineSlotData : public Reference {
GDCLASS(SpineSlotData, Reference); GDCLASS(SpineSlotData, Reference);
@ -46,43 +45,35 @@ private:
public: public:
SpineSlotData(); SpineSlotData();
~SpineSlotData();
inline void set_spine_object(spine::SlotData *s) { void set_spine_object(spine::SlotData *s) { slot_data = s; }
slot_data = s; spine::SlotData *get_spine_object() { return slot_data; }
}
inline spine::SlotData *get_spine_object() {
return slot_data;
}
enum BlendMode {
BLENDMODE_NORMAL = 0,
BLENDMODE_ADDITIVE,
BLENDMODE_MULTIPLY,
BLENDMODE_SCREEN
};
int get_index(); int get_index();
String get_slot_name(); String get_name();
Ref<SpineBoneData> get_bone_data(); Ref<SpineBoneData> get_bone_data();
Color get_color(); Color get_color();
void set_color(Color c); void set_color(Color c);
Color get_dark_color(); Color get_dark_color();
void set_dark_color(Color c); void set_dark_color(Color c);
bool has_dark_color(); bool has_dark_color();
void set_has_dark_color(bool v); void set_has_dark_color(bool v);
String get_attachment_name(); String get_attachment_name();
void set_attachment_name(const String &v); void set_attachment_name(const String &v);
BlendMode get_blend_mode(); SpineConstant::BlendMode get_blend_mode();
void set_blend_mode(BlendMode v);
void set_blend_mode(SpineConstant::BlendMode v);
}; };
VARIANT_ENUM_CAST(SpineSlotData::BlendMode);
#endif//GODOT_SPINESLOTDATA_H #endif//GODOT_SPINESLOTDATA_H