Skip to content

Commit

Permalink
Merge pull request #47226 from fabriceci/improve-rayshape-2D
Browse files Browse the repository at this point in the history
Bring the Raycast2D improvements to Rayshape2D
  • Loading branch information
akien-mga authored Mar 22, 2021
2 parents bb83403 + f810ff3 commit e0f1928
Showing 1 changed file with 22 additions and 6 deletions.
28 changes: 22 additions & 6 deletions scene/resources/ray_shape_2d.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,17 +42,33 @@ void RayShape2D::_update_shape() {
}

void RayShape2D::draw(const RID &p_to_rid, const Color &p_color) {
Vector2 tip = Vector2(0, get_length());
RS::get_singleton()->canvas_item_add_line(p_to_rid, Vector2(), tip, p_color, 3);
const Vector2 target_position = Vector2(0, get_length());

const float max_arrow_size = 6;
const float line_width = 1.4;
bool no_line = target_position.length() < line_width;
float arrow_size = CLAMP(target_position.length() * 2 / 3, line_width, max_arrow_size);

if (no_line) {
arrow_size = target_position.length();
} else {
RS::get_singleton()->canvas_item_add_line(p_to_rid, Vector2(), target_position - target_position.normalized() * arrow_size, p_color, line_width);
}

Transform2D xf;
xf.rotate(target_position.angle());
xf.translate(Vector2(no_line ? 0 : target_position.length() - arrow_size, 0));

Vector<Vector2> pts;
float tsize = 4.0;
pts.push_back(tip + Vector2(0, tsize));
pts.push_back(tip + Vector2(Math_SQRT12 * tsize, 0));
pts.push_back(tip + Vector2(-Math_SQRT12 * tsize, 0));
pts.push_back(xf.xform(Vector2(arrow_size, 0)));
pts.push_back(xf.xform(Vector2(0, 0.5 * arrow_size)));
pts.push_back(xf.xform(Vector2(0, -0.5 * arrow_size)));

Vector<Color> cols;
for (int i = 0; i < 3; i++) {
cols.push_back(p_color);
}

RS::get_singleton()->canvas_item_add_primitive(p_to_rid, pts, cols, Vector<Point2>(), RID());
}

Expand Down

0 comments on commit e0f1928

Please sign in to comment.