Переглянути джерело

Properly show 2D bone previews in 2D skeleton UV editor, fixes #20950

Juan Linietsky 6 роки тому
батько
коміт
cdafb7bce2
1 змінених файлів з 19 додано та 9 видалено
  1. 19 9
      editor/plugins/polygon_2d_editor_plugin.cpp

+ 19 - 9
editor/plugins/polygon_2d_editor_plugin.cpp

@@ -963,22 +963,32 @@ void Polygon2DEditor::_uv_draw() {
 
 					bool current = bone_path == skeleton->get_path_to(bone);
 
+					bool found_child = false;
+
 					for (int j = 0; j < bone->get_child_count(); j++) {
 
-						Node2D *n = Object::cast_to<Node2D>(bone->get_child(j));
+						Bone2D *n = Object::cast_to<Bone2D>(bone->get_child(j));
 						if (!n)
 							continue;
 
-						bool edit_bone = n->has_meta("_edit_bone_") && n->get_meta("_edit_bone_");
-						if (edit_bone) {
+						found_child = true;
 
-							Transform2D bone_xform = node->get_global_transform().affine_inverse() * (skeleton->get_global_transform() * bone->get_skeleton_rest());
-							Transform2D endpoint_xform = bone_xform * n->get_transform();
+						Transform2D bone_xform = node->get_global_transform().affine_inverse() * (skeleton->get_global_transform() * bone->get_skeleton_rest());
+						Transform2D endpoint_xform = bone_xform * n->get_transform();
 
-							Color color = current ? Color(1, 1, 1) : Color(0.5, 0.5, 0.5);
-							uv_edit_draw->draw_line(mtx.xform(bone_xform.get_origin()), mtx.xform(endpoint_xform.get_origin()), Color(0, 0, 0), current ? 5 : 4);
-							uv_edit_draw->draw_line(mtx.xform(bone_xform.get_origin()), mtx.xform(endpoint_xform.get_origin()), color, current ? 3 : 2);
-						}
+						Color color = current ? Color(1, 1, 1) : Color(0.5, 0.5, 0.5);
+						uv_edit_draw->draw_line(mtx.xform(bone_xform.get_origin()), mtx.xform(endpoint_xform.get_origin()), Color(0, 0, 0), current ? 5 : 4);
+						uv_edit_draw->draw_line(mtx.xform(bone_xform.get_origin()), mtx.xform(endpoint_xform.get_origin()), color, current ? 3 : 2);
+					}
+
+					if (!found_child) {
+						//draw normally
+						Transform2D bone_xform = node->get_global_transform().affine_inverse() * (skeleton->get_global_transform() * bone->get_skeleton_rest());
+						Transform2D endpoint_xform = bone_xform * Transform2D(0, Vector2(bone->get_default_length(), 0));
+
+						Color color = current ? Color(1, 1, 1) : Color(0.5, 0.5, 0.5);
+						uv_edit_draw->draw_line(mtx.xform(bone_xform.get_origin()), mtx.xform(endpoint_xform.get_origin()), Color(0, 0, 0), current ? 5 : 4);
+						uv_edit_draw->draw_line(mtx.xform(bone_xform.get_origin()), mtx.xform(endpoint_xform.get_origin()), color, current ? 3 : 2);
 					}
 				}
 			}