summaryrefslogtreecommitdiff
path: root/scene
diff options
context:
space:
mode:
authorbruvzg <7645683+bruvzg@users.noreply.github.com>2023-02-16 17:49:18 +0200
committerbruvzg <7645683+bruvzg@users.noreply.github.com>2023-02-16 17:49:18 +0200
commit4dfa161120308425877b350d6f8552b0d3d11c51 (patch)
tree53d8564acc95df0cc42e3333139fbf3428fc29b7 /scene
parent953383328af17e8c9fd6359285c12617cb22f636 (diff)
Add dash and step size checks to draw_dashed_line.
Diffstat (limited to 'scene')
-rw-r--r--scene/main/canvas_item.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/scene/main/canvas_item.cpp b/scene/main/canvas_item.cpp
index e5dcdd2afd..1c7d42ad36 100644
--- a/scene/main/canvas_item.cpp
+++ b/scene/main/canvas_item.cpp
@@ -515,12 +515,13 @@ void CanvasItem::draw_dashed_line(const Point2 &p_from, const Point2 &p_to, cons
ERR_FAIL_COND_MSG(!drawing, "Drawing is only allowed inside NOTIFICATION_DRAW, _draw() function or 'draw' signal.");
float length = (p_to - p_from).length();
- if (length < p_dash) {
+ Vector2 step = p_dash * (p_to - p_from).normalized();
+
+ if (length < p_dash || step == Vector2() || p_dash <= 0.0) {
RenderingServer::get_singleton()->canvas_item_add_line(canvas_item, p_from, p_to, p_color, p_width);
return;
}
- Vector2 step = p_dash * (p_to - p_from).normalized();
int steps = (p_aligned) ? Math::ceil(length / p_dash) : Math::floor(length / p_dash);
if (steps % 2 == 0) {
steps--;