mirror of
https://github.com/godotengine/godot.git
synced 2025-01-26 11:51:13 +00:00
Merge pull request #47226 from fabriceci/improve-rayshape-2D
Bring the Raycast2D improvements to Rayshape2D
This commit is contained in:
commit
e0f19287f7
@ -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());
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user