]> Untitled Git - baabarian.git/blob - ux/debug_draw_3d.gd
Added test scene, debug UI, and player
[baabarian.git] / ux / debug_draw_3d.gd
1 extends Control
2
3
4 class Vector:
5         var object  # The node to follow
6         var property  # The property to draw
7         var scale  # Scale factor
8         var width  # Line width
9         var color  # Draw color
10
11         func _init(_object, _property, _scale, _width, _color) -> void:
12                 object = _object
13                 property = _property
14                 scale = _scale
15                 width = _width
16                 color = _color
17
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)
22                 if start != end:
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)
26
27
28 var vectors = []  # Array to hold all registered values.
29
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]))
36
37
38 func _process(_delta: float) -> void:
39         queue_redraw()
40
41
42 func _draw() -> void:
43         var camera = get_viewport().get_camera_3d()
44         for vector in vectors:
45                 vector.draw(self, camera)
46
47
48 func add_vector(object, property, vscale, width, color) -> void:
49         vectors.append(Vector.new(object, property, vscale, width, color))