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