瀏覽代碼

Merge pull request #95258 from kleonc/polygon2d_uv_editor_fix_leaf_bone_drawing

Fix drawing leaf `Bone2D` in `Polygon2D` UV editor
Rémi Verschelde 1 年之前
父節點
當前提交
c430c775ca
共有 1 個文件被更改,包括 29 次插入30 次删除
  1. 29 30
      editor/plugins/polygon_2d_editor_plugin.cpp

+ 29 - 30
editor/plugins/polygon_2d_editor_plugin.cpp

@@ -1255,44 +1255,43 @@ void Polygon2DEditor::_uv_draw() {
 
 		//draw skeleton
 		NodePath skeleton_path = node->get_skeleton();
-		if (node->has_node(skeleton_path)) {
-			Skeleton2D *skeleton = Object::cast_to<Skeleton2D>(node->get_node(skeleton_path));
-			if (skeleton) {
-				for (int i = 0; i < skeleton->get_bone_count(); i++) {
-					Bone2D *bone = skeleton->get_bone(i);
-					if (bone->get_rest() == Transform2D(0, 0, 0, 0, 0, 0)) {
-						continue; //not set
-					}
+		Skeleton2D *skeleton = Object::cast_to<Skeleton2D>(node->get_node_or_null(skeleton_path));
+		if (skeleton) {
+			Transform2D skeleton_xform = node->get_global_transform().affine_inverse().translated(-node->get_offset()) * skeleton->get_global_transform();
+			for (int i = 0; i < skeleton->get_bone_count(); i++) {
+				Bone2D *bone = skeleton->get_bone(i);
+				if (bone->get_rest() == Transform2D(0, 0, 0, 0, 0, 0)) {
+					continue; //not set
+				}
 
-					bool current = bone_path == skeleton->get_path_to(bone);
+				bool current = bone_path == skeleton->get_path_to(bone);
 
-					bool found_child = false;
+				bool found_child = false;
 
-					for (int j = 0; j < bone->get_child_count(); j++) {
-						Bone2D *n = Object::cast_to<Bone2D>(bone->get_child(j));
-						if (!n) {
-							continue;
-						}
+				for (int j = 0; j < bone->get_child_count(); j++) {
+					Bone2D *n = Object::cast_to<Bone2D>(bone->get_child(j));
+					if (!n) {
+						continue;
+					}
 
-						found_child = true;
+					found_child = true;
 
-						Transform2D bone_xform = node->get_global_transform().affine_inverse().translated(-node->get_offset()) * (skeleton->get_global_transform() * bone->get_skeleton_rest());
-						Transform2D endpoint_xform = bone_xform * n->get_transform();
+					Transform2D bone_xform = skeleton_xform * 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), Math::round((current ? 5 : 4) * EDSCALE));
-						uv_edit_draw->draw_line(mtx.xform(bone_xform.get_origin()), mtx.xform(endpoint_xform.get_origin()), color, Math::round((current ? 3 : 2) * EDSCALE));
-					}
+					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), Math::round((current ? 5 : 4) * EDSCALE));
+					uv_edit_draw->draw_line(mtx.xform(bone_xform.get_origin()), mtx.xform(endpoint_xform.get_origin()), color, Math::round((current ? 3 : 2) * EDSCALE));
+				}
 
-					if (!found_child) {
-						//draw normally
-						Transform2D bone_xform = node->get_global_transform().affine_inverse().translated(-node->get_offset()) * (skeleton->get_global_transform() * bone->get_skeleton_rest());
-						Transform2D endpoint_xform = bone_xform * Transform2D(0, Vector2(bone->get_length(), 0));
+				if (!found_child) {
+					//draw normally
+					Transform2D bone_xform = skeleton_xform * bone->get_skeleton_rest();
+					Transform2D endpoint_xform = bone_xform * Transform2D(0, Vector2(bone->get_length(), 0)).rotated(bone->get_bone_angle());
 
-						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), Math::round((current ? 5 : 4) * EDSCALE));
-						uv_edit_draw->draw_line(mtx.xform(bone_xform.get_origin()), mtx.xform(endpoint_xform.get_origin()), color, Math::round((current ? 3 : 2) * EDSCALE));
-					}
+					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), Math::round((current ? 5 : 4) * EDSCALE));
+					uv_edit_draw->draw_line(mtx.xform(bone_xform.get_origin()), mtx.xform(endpoint_xform.get_origin()), color, Math::round((current ? 3 : 2) * EDSCALE));
 				}
 			}
 		}