浏览代码

Merge pull request #86208 from MarcusElg/betterworldboundary

Improve visualisation of WorldBoundary2D editor
Rémi Verschelde 1 年之前
父节点
当前提交
f289ec90e3
共有 1 个文件被更改,包括 35 次插入4 次删除
  1. 35 4
      scene/resources/2d/world_boundary_shape_2d.cpp

+ 35 - 4
scene/resources/2d/world_boundary_shape_2d.cpp

@@ -86,10 +86,41 @@ void WorldBoundaryShape2D::draw(const RID &p_to_rid, const Color &p_color) {
 	Vector2 point = distance * normal;
 	real_t line_width = 3.0;
 
-	Vector2 l1[2] = { point - normal.orthogonal() * 100, point + normal.orthogonal() * 100 };
-	RS::get_singleton()->canvas_item_add_line(p_to_rid, l1[0], l1[1], p_color, line_width);
-	Vector2 l2[2] = { point + normal.normalized() * (0.5 * line_width), point + normal * 30 };
-	RS::get_singleton()->canvas_item_add_line(p_to_rid, l2[0], l2[1], p_color, line_width);
+	// Draw collision shape line.
+	PackedVector2Array line_points = {
+		point - normal.orthogonal() * 100,
+		point - normal.orthogonal() * 60,
+		point + normal.orthogonal() * 60,
+		point + normal.orthogonal() * 100
+	};
+
+	Color transparent_color = Color(p_color, 0);
+	PackedColorArray line_colors = {
+		transparent_color,
+		p_color,
+		p_color,
+		transparent_color
+	};
+
+	RS::get_singleton()->canvas_item_add_polyline(p_to_rid, line_points, line_colors, line_width);
+
+	// Draw arrow.
+	Color arrow_color = p_color.inverted();
+
+	Transform2D xf;
+	xf.rotate(normal.angle());
+
+	Vector<Vector2> arrow_points = {
+		xf.xform(Vector2(distance + line_width / 2, -2.5)),
+		xf.xform(Vector2(distance + 20, -2.5)),
+		xf.xform(Vector2(distance + 20, -10)),
+		xf.xform(Vector2(distance + 40, 0)),
+		xf.xform(Vector2(distance + 20, 10)),
+		xf.xform(Vector2(distance + 20, 2.5)),
+		xf.xform(Vector2(distance + line_width / 2, 2.5)),
+	};
+
+	RS::get_singleton()->canvas_item_add_polyline(p_to_rid, arrow_points, { arrow_color }, line_width / 2);
 }
 
 Rect2 WorldBoundaryShape2D::get_rect() const {