mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2025-12-21 01:36:02 +08:00
[godot] SpineBoneNode debug rendering and enable flag.
This commit is contained in:
parent
2a4adc282e
commit
1a0b243b63
@ -6,9 +6,11 @@
|
|||||||
[node name="Node2D" type="Node2D"]
|
[node name="Node2D" type="Node2D"]
|
||||||
|
|
||||||
[node name="SpineSprite" type="SpineSprite" parent="."]
|
[node name="SpineSprite" type="SpineSprite" parent="."]
|
||||||
|
position = Vector2( 459.397, 501.236 )
|
||||||
|
scale = Vector2( 0.742335, 0.742335 )
|
||||||
skeleton_data_res = ExtResource( 1 )
|
skeleton_data_res = ExtResource( 1 )
|
||||||
preview_animation = ""
|
preview_animation = "aim"
|
||||||
preview_frame = false
|
preview_frame = true
|
||||||
preview_time = 0.0
|
preview_time = 0.0
|
||||||
|
|
||||||
[node name="SpineBoneNode" type="SpineBoneNode" parent="SpineSprite"]
|
[node name="SpineBoneNode" type="SpineBoneNode" parent="SpineSprite"]
|
||||||
@ -16,6 +18,9 @@ position = Vector2( 40.8752, -276.036 )
|
|||||||
rotation = 0.837234
|
rotation = 0.837234
|
||||||
bone_name = "gun"
|
bone_name = "gun"
|
||||||
bone_mode = 1
|
bone_mode = 1
|
||||||
|
enabled = false
|
||||||
|
color = Color( 0, 1, 0.0627451, 0.466667 )
|
||||||
|
|
||||||
[node name="Sprite" type="Sprite" parent="SpineSprite/SpineBoneNode"]
|
[node name="Sprite" type="Sprite" parent="SpineSprite/SpineBoneNode"]
|
||||||
|
visible = false
|
||||||
texture = ExtResource( 2 )
|
texture = ExtResource( 2 )
|
||||||
|
|||||||
@ -30,13 +30,24 @@
|
|||||||
#include "SpineBoneNode.h"
|
#include "SpineBoneNode.h"
|
||||||
|
|
||||||
#include "core/engine.h"
|
#include "core/engine.h"
|
||||||
|
#include "editor/editor_about.h"
|
||||||
|
|
||||||
void SpineBoneNode::_bind_methods() {
|
void SpineBoneNode::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("set_bone_mode"), &SpineBoneNode::set_bone_mode);
|
ClassDB::bind_method(D_METHOD("set_bone_mode"), &SpineBoneNode::set_bone_mode);
|
||||||
ClassDB::bind_method(D_METHOD("get_bone_mode"), &SpineBoneNode::get_bone_mode);
|
ClassDB::bind_method(D_METHOD("get_bone_mode"), &SpineBoneNode::get_bone_mode);
|
||||||
|
ClassDB::bind_method(D_METHOD("set_enabled"), &SpineBoneNode::set_enabled);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_enabled"), &SpineBoneNode::get_enabled);
|
||||||
|
ClassDB::bind_method(D_METHOD("set_debug_thickness"), &SpineBoneNode::set_debug_thickness);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_debug_thickness"), &SpineBoneNode::get_debug_thickness);
|
||||||
|
ClassDB::bind_method(D_METHOD("set_debug_color"), &SpineBoneNode::set_debug_color);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_debug_color"), &SpineBoneNode::get_debug_color);
|
||||||
ClassDB::bind_method(D_METHOD("_on_world_transforms_changed", "spine_sprite"), &SpineBoneNode::on_world_transforms_changed);
|
ClassDB::bind_method(D_METHOD("_on_world_transforms_changed", "spine_sprite"), &SpineBoneNode::on_world_transforms_changed);
|
||||||
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "bone_mode", PROPERTY_HINT_ENUM, "Follow,Drive"), "set_bone_mode", "get_bone_mode");
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "bone_mode", PROPERTY_HINT_ENUM, "Follow,Drive"), "set_bone_mode", "get_bone_mode");
|
||||||
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "enabled"), "set_enabled", "get_enabled");
|
||||||
|
ADD_GROUP("Debug", "");
|
||||||
|
ADD_PROPERTY(PropertyInfo(VARIANT_FLOAT, "thickness"), "set_debug_thickness", "get_debug_thickness");
|
||||||
|
ADD_PROPERTY(PropertyInfo(Variant::COLOR, "color"), "set_debug_color", "get_debug_color");
|
||||||
}
|
}
|
||||||
|
|
||||||
void SpineBoneNode::_notification(int what) {
|
void SpineBoneNode::_notification(int what) {
|
||||||
@ -130,6 +141,7 @@ void SpineBoneNode::on_world_transforms_changed(const Variant& _sprite) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void SpineBoneNode::update_transform(SpineSprite* sprite) {
|
void SpineBoneNode::update_transform(SpineSprite* sprite) {
|
||||||
|
if (!enabled) return;
|
||||||
Ref<SpineBone> bone = find_bone();
|
Ref<SpineBone> bone = find_bone();
|
||||||
if (!bone.is_valid()) return;
|
if (!bone.is_valid()) return;
|
||||||
|
|
||||||
@ -190,7 +202,19 @@ void SpineBoneNode::draw() {
|
|||||||
Ref<SpineBone> bone = find_bone();
|
Ref<SpineBone> bone = find_bone();
|
||||||
if (!bone.is_valid()) return;
|
if (!bone.is_valid()) return;
|
||||||
|
|
||||||
draw_circle(get_global_position(), 10, Color::hex(0xffff0000));
|
spine::Bone *spine_bone = bone->get_spine_object();
|
||||||
|
if (!spine_bone) return;
|
||||||
|
float bone_length = spine_bone->getData().getLength();
|
||||||
|
if (bone_length == 0) {
|
||||||
|
draw_circle(Vector2(0, 0), debug_thickness, debug_color);
|
||||||
|
} else {
|
||||||
|
Vector<Vector2> points;
|
||||||
|
points.push_back(Vector2(-debug_thickness, 0));
|
||||||
|
points.push_back(Vector2(0, debug_thickness));
|
||||||
|
points.push_back(Vector2(bone_length, 0));
|
||||||
|
points.push_back(Vector2(0, -debug_thickness));
|
||||||
|
draw_colored_polygon(points, debug_color);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SpineConstant::BoneMode SpineBoneNode::get_bone_mode() {
|
SpineConstant::BoneMode SpineBoneNode::get_bone_mode() {
|
||||||
@ -202,3 +226,33 @@ void SpineBoneNode::set_bone_mode(SpineConstant::BoneMode _bone_mode) {
|
|||||||
SpineSprite *sprite = find_parent_sprite();
|
SpineSprite *sprite = find_parent_sprite();
|
||||||
init_transform(sprite);
|
init_transform(sprite);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SpineBoneNode::set_debug_thickness(float _thickness) {
|
||||||
|
debug_thickness = _thickness;
|
||||||
|
}
|
||||||
|
|
||||||
|
float SpineBoneNode::get_debug_thickness() {
|
||||||
|
return debug_thickness;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SpineBoneNode::set_debug_color(Color _color) {
|
||||||
|
debug_color = _color;
|
||||||
|
}
|
||||||
|
|
||||||
|
Color SpineBoneNode::get_debug_color() {
|
||||||
|
return debug_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SpineBoneNode::set_enabled(bool _enabled) {
|
||||||
|
enabled = _enabled;
|
||||||
|
if (!enabled && Engine::get_singleton()->is_editor_hint()) {
|
||||||
|
auto sprite = find_parent_sprite();
|
||||||
|
if (!sprite) return;
|
||||||
|
sprite->get_skeleton()->set_to_setup_pose();
|
||||||
|
sprite->get_skeleton()->update_world_transform();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SpineBoneNode::get_enabled() {
|
||||||
|
return enabled;
|
||||||
|
}
|
||||||
|
|||||||
@ -39,6 +39,9 @@ class SpineBoneNode: public Node2D {
|
|||||||
protected:
|
protected:
|
||||||
String bone_name;
|
String bone_name;
|
||||||
SpineConstant::BoneMode bone_mode;
|
SpineConstant::BoneMode bone_mode;
|
||||||
|
bool enabled;
|
||||||
|
Color debug_color;
|
||||||
|
float debug_thickness;
|
||||||
|
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
void _notification(int what);
|
void _notification(int what);
|
||||||
@ -50,16 +53,24 @@ protected:
|
|||||||
void init_transform(SpineSprite *sprite);
|
void init_transform(SpineSprite *sprite);
|
||||||
SpineSprite *find_parent_sprite() const;
|
SpineSprite *find_parent_sprite() const;
|
||||||
Ref<SpineBone> find_bone() const;
|
Ref<SpineBone> find_bone() const;
|
||||||
void draw();;
|
void draw();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SpineBoneNode(): bone_mode(SpineConstant::BoneMode_Follow) {}
|
SpineBoneNode(): bone_mode(SpineConstant::BoneMode_Follow), enabled(true), debug_color(Color::hex(0xff000077)), debug_thickness(5) {}
|
||||||
|
|
||||||
String get_bone_name();
|
|
||||||
|
|
||||||
void set_bone_name(const String &_bone_name);
|
|
||||||
|
|
||||||
SpineConstant::BoneMode get_bone_mode();
|
SpineConstant::BoneMode get_bone_mode();
|
||||||
|
|
||||||
void set_bone_mode(SpineConstant::BoneMode bone_mode);
|
void set_bone_mode(SpineConstant::BoneMode bone_mode);
|
||||||
|
|
||||||
|
void set_enabled(bool _enabled);
|
||||||
|
|
||||||
|
bool get_enabled();
|
||||||
|
|
||||||
|
void set_debug_thickness(float _thickness);
|
||||||
|
|
||||||
|
float get_debug_thickness();
|
||||||
|
|
||||||
|
void set_debug_color(Color _color);
|
||||||
|
|
||||||
|
Color get_debug_color();
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user