[godot] Clean-up SpinePathConstraint.

This commit is contained in:
Mario Zechner 2022-04-19 17:16:06 +02:00
parent 56893add5e
commit f9fd3f54d4
2 changed files with 60 additions and 48 deletions

View File

@ -28,9 +28,10 @@
*****************************************************************************/ *****************************************************************************/
#include "SpinePathConstraint.h" #include "SpinePathConstraint.h"
#include "SpineBone.h"
#include "common.h"
void SpinePathConstraint::_bind_methods() { void SpinePathConstraint::_bind_methods() {
// ClassDB::bind_method(D_METHOD("apply"), &SpinePathConstraint::apply);
ClassDB::bind_method(D_METHOD("update"), &SpinePathConstraint::update); ClassDB::bind_method(D_METHOD("update"), &SpinePathConstraint::update);
ClassDB::bind_method(D_METHOD("get_order"), &SpinePathConstraint::get_order); ClassDB::bind_method(D_METHOD("get_order"), &SpinePathConstraint::get_order);
ClassDB::bind_method(D_METHOD("get_position"), &SpinePathConstraint::get_position); ClassDB::bind_method(D_METHOD("get_position"), &SpinePathConstraint::get_position);
@ -51,95 +52,110 @@ void SpinePathConstraint::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_active", "v"), &SpinePathConstraint::set_active); ClassDB::bind_method(D_METHOD("set_active", "v"), &SpinePathConstraint::set_active);
} }
SpinePathConstraint::SpinePathConstraint() : path_constraint(NULL) {} SpinePathConstraint::SpinePathConstraint() : path_constraint(nullptr) {}
SpinePathConstraint::~SpinePathConstraint() {}
// void SpinePathConstraint::apply(){
// path_constraint->apply();
// }
void SpinePathConstraint::update() { void SpinePathConstraint::update() {
SPINE_CHECK(path_constraint,)
path_constraint->update(); path_constraint->update();
} }
int SpinePathConstraint::get_order() { int SpinePathConstraint::get_order() {
SPINE_CHECK(path_constraint, 0)
return path_constraint->getOrder(); return path_constraint->getOrder();
} }
float SpinePathConstraint::get_position() { float SpinePathConstraint::get_position() {
SPINE_CHECK(path_constraint, 0)
return path_constraint->getPosition(); return path_constraint->getPosition();
} }
void SpinePathConstraint::set_position(float v) { void SpinePathConstraint::set_position(float v) {
SPINE_CHECK(path_constraint,)
path_constraint->setPosition(v); path_constraint->setPosition(v);
} }
float SpinePathConstraint::get_spacing() { float SpinePathConstraint::get_spacing() {
SPINE_CHECK(path_constraint, 0)
return path_constraint->getSpacing(); return path_constraint->getSpacing();
} }
void SpinePathConstraint::set_spacing(float v) { void SpinePathConstraint::set_spacing(float v) {
SPINE_CHECK(path_constraint,)
path_constraint->setSpacing(v); path_constraint->setSpacing(v);
} }
float SpinePathConstraint::get_mix_rotate() { float SpinePathConstraint::get_mix_rotate() {
SPINE_CHECK(path_constraint, 0)
return path_constraint->getMixRotate(); return path_constraint->getMixRotate();
} }
void SpinePathConstraint::set_mix_rotate(float v) { void SpinePathConstraint::set_mix_rotate(float v) {
SPINE_CHECK(path_constraint,)
path_constraint->setMixRotate(v); path_constraint->setMixRotate(v);
} }
float SpinePathConstraint::get_mix_x() { float SpinePathConstraint::get_mix_x() {
SPINE_CHECK(path_constraint, 0)
return path_constraint->getMixX(); return path_constraint->getMixX();
} }
void SpinePathConstraint::set_mix_x(float v) { void SpinePathConstraint::set_mix_x(float v) {
SPINE_CHECK(path_constraint,)
path_constraint->setMixX(v); path_constraint->setMixX(v);
} }
float SpinePathConstraint::get_mix_y() { float SpinePathConstraint::get_mix_y() {
SPINE_CHECK(path_constraint, 0)
return path_constraint->getMixY(); return path_constraint->getMixY();
} }
void SpinePathConstraint::set_mix_y(float v) { void SpinePathConstraint::set_mix_y(float v) {
SPINE_CHECK(path_constraint,)
path_constraint->setMixY(v); path_constraint->setMixY(v);
} }
Array SpinePathConstraint::get_bones() { Array SpinePathConstraint::get_bones() {
auto &bs = path_constraint->getBones(); Array result;
Array gd_bs; SPINE_CHECK(path_constraint, result)
gd_bs.resize(bs.size()); auto &bones = path_constraint->getBones();
for (size_t i = 0; i < bs.size(); ++i) { result.resize((int)bones.size());
auto b = bs[i]; for (int i = 0; i < bones.size(); ++i) {
if (b == NULL) gd_bs[i] = Ref<SpineBone>(NULL); auto bone = bones[i];
Ref<SpineBone> gd_b(memnew(SpineBone)); Ref<SpineBone> bone_ref(memnew(SpineBone));
gd_b->set_spine_object(b); bone_ref->set_spine_object(bone);
gd_bs[i] = gd_b; result[i] = bone_ref;
} }
return gd_bs; return result;
} }
Ref<SpineSlot> SpinePathConstraint::get_target() { Ref<SpineSlot> SpinePathConstraint::get_target() {
auto s = path_constraint->getTarget(); SPINE_CHECK(path_constraint, nullptr)
if (s == NULL) return NULL; auto target = path_constraint->getTarget();
Ref<SpineSlot> gd_s(memnew(SpineSlot)); if (target == nullptr) return nullptr;
gd_s->set_spine_object(s); Ref<SpineSlot> target_ref(memnew(SpineSlot));
return gd_s; target_ref->set_spine_object(target);
return target_ref;
} }
void SpinePathConstraint::set_target(Ref<SpineSlot> v) { void SpinePathConstraint::set_target(Ref<SpineSlot> v) {
if (v.is_valid()) { SPINE_CHECK(path_constraint,)
path_constraint->setTarget(v->get_spine_object()); path_constraint->setTarget(v.is_valid() ? v->get_spine_object() : nullptr);
} else {
path_constraint->setTarget(NULL);
}
} }
Ref<SpinePathConstraintData> SpinePathConstraint::get_data() { Ref<SpinePathConstraintData> SpinePathConstraint::get_data() {
auto &sd = path_constraint->getData(); SPINE_CHECK(path_constraint, nullptr)
Ref<SpinePathConstraintData> gd_sd(memnew(SpinePathConstraintData)); auto &data = path_constraint->getData();
gd_sd->set_spine_object(&sd); Ref<SpinePathConstraintData> data_ref(memnew(SpinePathConstraintData));
return gd_sd; data_ref->set_spine_object(&data);
return data_ref;
} }
bool SpinePathConstraint::is_active() { bool SpinePathConstraint::is_active() {
SPINE_CHECK(path_constraint, false)
return path_constraint->isActive(); return path_constraint->isActive();
} }
void SpinePathConstraint::set_active(bool v) { void SpinePathConstraint::set_active(bool v) {
SPINE_CHECK(path_constraint,)
path_constraint->setActive(v); path_constraint->setActive(v);
} }

View File

@ -30,13 +30,9 @@
#ifndef GODOT_SPINEPATHCONSTRAINT_H #ifndef GODOT_SPINEPATHCONSTRAINT_H
#define GODOT_SPINEPATHCONSTRAINT_H #define GODOT_SPINEPATHCONSTRAINT_H
#include "core/variant_parser.h"
#include <spine/spine.h>
#include "SpineBone.h"
#include "SpineSlot.h"
#include "SpinePathConstraintData.h" #include "SpinePathConstraintData.h"
#include "SpineSlot.h"
#include <spine/PathConstraint.h>
class SpinePathConstraint : public Reference { class SpinePathConstraint : public Reference {
GDCLASS(SpinePathConstraint, Reference); GDCLASS(SpinePathConstraint, Reference);
@ -49,45 +45,45 @@ private:
public: public:
SpinePathConstraint(); SpinePathConstraint();
~SpinePathConstraint(); ~SpinePathConstraint() = default;
inline void set_spine_object(spine::PathConstraint *pc) { void set_spine_object(spine::PathConstraint *_path_constraint) { path_constraint = _path_constraint; }
path_constraint = pc; spine::PathConstraint *get_spine_object() { return path_constraint; }
}
inline spine::PathConstraint *get_spine_object() {
return path_constraint;
}
// The spine-runtime-cpp 4.0 seems to not have a apply function implementation.
// void apply();
void update(); void update();
int get_order(); int get_order();
float get_position(); float get_position();
void set_position(float v); void set_position(float v);
float get_spacing(); float get_spacing();
void set_spacing(float v); void set_spacing(float v);
float get_mix_rotate(); float get_mix_rotate();
void set_mix_rotate(float v); void set_mix_rotate(float v);
float get_mix_x(); float get_mix_x();
void set_mix_x(float v); void set_mix_x(float v);
float get_mix_y(); float get_mix_y();
void set_mix_y(float v); void set_mix_y(float v);
Array get_bones(); Array get_bones();
Ref<SpineSlot> get_target(); Ref<SpineSlot> get_target();
void set_target(Ref<SpineSlot> v); void set_target(Ref<SpineSlot> v);
Ref<SpinePathConstraintData> get_data(); Ref<SpinePathConstraintData> get_data();
bool is_active(); bool is_active();
void set_active(bool v); void set_active(bool v);
}; };