5 var object # The node to follow
6 var property # The property to draw
7 var scale # Scale factor
11 func _init(_object, _property, _scale, _width, _color) -> void:
18 func draw(node: Control, camera: Camera3D) -> void:
19 var start = camera.unproject_position(object.global_transform.origin)
20 var endv = object.global_transform.origin + object.get(property) * scale
21 var end = camera.unproject_position(endv)
23 node.draw_line(start, end, color, width)
24 if camera.is_position_in_frustum(endv):
25 node.draw_triangle(end, start.direction_to(end), width * 2, color)
28 var vectors = [] # Array to hold all registered values.
30 func draw_triangle(pos: Vector2, dir: Vector2, length: float, color: Color) -> void:
31 var a = pos + dir.rotated(-PI / 2) * length
32 var b = pos + dir * length
33 var c = pos + dir.rotated(PI / 2) * length
34 var points = PackedVector2Array([a, b, c])
35 draw_polygon(points, PackedColorArray([color]))
38 func _process(_delta: float) -> void:
43 var camera = get_viewport().get_camera_3d()
44 for vector in vectors:
45 vector.draw(self, camera)
48 func add_vector(object, property, vscale, width, color) -> void:
49 vectors.append(Vector.new(object, property, vscale, width, color))