Improve visualisation of worldboundary2d editor

This commit is contained in:
Marcus Elg 2023-12-15 18:39:32 +01:00
parent a586e860e5
commit 8bed36e4bb

View file

@ -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 {