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