add debug drawing class
This commit is contained in:
parent
cf1536f315
commit
e27d16a9f9
@ -23,6 +23,7 @@ config/icon="res://icon.svg"
|
||||
CursorManager="*res://scripts/globals/cursor_manager.gd"
|
||||
FullscreenManager="*res://scripts/globals/fullscreen_manager.gd"
|
||||
QuittingManager="*res://scripts/globals/quitting_manager.gd"
|
||||
DebugDraw="*res://scripts/globals/debug_draw.gd"
|
||||
|
||||
[debug]
|
||||
|
||||
@ -30,7 +31,6 @@ settings/crash_handler/message="Oh my, there's a BUG in the game! How queer and
|
||||
gdscript/warnings/untyped_declaration=2
|
||||
gdscript/warnings/unsafe_property_access=2
|
||||
gdscript/warnings/unsafe_method_access=2
|
||||
gdscript/warnings/unsafe_cast=2
|
||||
gdscript/warnings/unsafe_call_argument=2
|
||||
gdscript/warnings/integer_division=0
|
||||
|
||||
@ -60,3 +60,8 @@ toggle_fullscreen={
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194309,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
toggle_debug={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":96,"key_label":0,"unicode":96,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
|
||||
53
scripts/globals/debug_draw.gd
Normal file
53
scripts/globals/debug_draw.gd
Normal file
@ -0,0 +1,53 @@
|
||||
extends CanvasLayer
|
||||
|
||||
var camera: Camera3D
|
||||
var control: Control = Control.new()
|
||||
|
||||
var vectors_to_draw: Array[Dictionary] = []
|
||||
|
||||
func _ready() -> void:
|
||||
camera = get_viewport().get_camera_3d()
|
||||
layer = 999
|
||||
visible = false
|
||||
control.draw.connect(_on_control_draw)
|
||||
add_child(control)
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
if not visible:
|
||||
return
|
||||
control.queue_redraw()
|
||||
|
||||
func _input(event: InputEvent) -> void:
|
||||
if event.is_action_pressed("toggle_debug"):
|
||||
visible = not visible
|
||||
vectors_to_draw.clear()
|
||||
|
||||
func vector(from: Vector3, to: Vector3, color: Color = Color(1, 0, 0)) -> void:
|
||||
if not visible:
|
||||
return
|
||||
|
||||
vectors_to_draw.append({"from": from, "to": to, "color": color})
|
||||
|
||||
func _draw_vector(from: Vector3, to: Vector3, color: Color = Color.RED) -> void:
|
||||
if not visible:
|
||||
return
|
||||
|
||||
var start := camera.unproject_position(from)
|
||||
var end := camera.unproject_position(to)
|
||||
control.draw_line(start, end, color, 2)
|
||||
_draw_triangle(end, start.direction_to(end), 5, color)
|
||||
|
||||
func _draw_triangle(pos: Vector2, dir: Vector2, size: float, color: Color) -> void:
|
||||
var a := pos + dir * size
|
||||
var b := pos + dir.rotated(2 * PI / 3) * size
|
||||
var c := pos + dir.rotated(4 * PI / 3) * size
|
||||
var points := PackedVector2Array([a, b, c])
|
||||
control.draw_polygon(points, PackedColorArray([color]))
|
||||
|
||||
func _unproject(pos: Vector3) -> Vector2:
|
||||
return camera.unproject_position(pos)
|
||||
|
||||
func _on_control_draw() -> void:
|
||||
for v in vectors_to_draw:
|
||||
_draw_vector(v["from"] as Vector3, v["to"] as Vector3, v["color"] as Color)
|
||||
vectors_to_draw.clear()
|
||||
@ -34,6 +34,8 @@ func _process(delta: float) -> void:
|
||||
var offset_direction := Vector3.BACK.rotated(Vector3.RIGHT, rotation.x)
|
||||
var offset := offset_direction * distance
|
||||
position = target_position + offset
|
||||
DebugDraw.vector(target_position, target_position + Vector3.UP)
|
||||
DebugDraw.vector(Vector3.ZERO, Vector3.UP, Color.GREEN)
|
||||
|
||||
func _input(event: InputEvent) -> void:
|
||||
if event is InputEventMouseMotion:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user