aboutsummaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-09-27 21:04:30 +0200
committermetamuffin <metamuffin@disroot.org>2025-09-27 21:04:35 +0200
commit721b2f4543c4bb656c053e0de162221ceb5d539f (patch)
tree72644b2d2b6bdef2d2b57ba5dc2385e964eaf46a /client
parent11ec213359c38a0a064467fbf7585c4d8f4d76e5 (diff)
downloadhurrycurry-721b2f4543c4bb656c053e0de162221ceb5d539f.tar
hurrycurry-721b2f4543c4bb656c053e0de162221ceb5d539f.tar.bz2
hurrycurry-721b2f4543c4bb656c053e0de162221ceb5d539f.tar.zst
Add debug pie for node counts
Diffstat (limited to 'client')
-rw-r--r--client/gui/overlays/debug/debug.gd (renamed from client/gui/overlays/debug.gd)0
-rw-r--r--client/gui/overlays/debug/debug.gd.uid (renamed from client/gui/overlays/debug.gd.uid)0
-rw-r--r--client/gui/overlays/debug/debug.tscn (renamed from client/gui/overlays/debug.tscn)21
-rw-r--r--client/gui/overlays/debug/debug_pie.gd108
-rw-r--r--client/gui/overlays/debug/debug_pie.gd.uid1
-rw-r--r--client/gui/overlays/debug/pie.tscn9
-rw-r--r--client/gui/overlays/overlays.tscn2
7 files changed, 138 insertions, 3 deletions
diff --git a/client/gui/overlays/debug.gd b/client/gui/overlays/debug/debug.gd
index 3a37a1b7..3a37a1b7 100644
--- a/client/gui/overlays/debug.gd
+++ b/client/gui/overlays/debug/debug.gd
diff --git a/client/gui/overlays/debug.gd.uid b/client/gui/overlays/debug/debug.gd.uid
index 318ab745..318ab745 100644
--- a/client/gui/overlays/debug.gd.uid
+++ b/client/gui/overlays/debug/debug.gd.uid
diff --git a/client/gui/overlays/debug.tscn b/client/gui/overlays/debug/debug.tscn
index 5a954189..c794c161 100644
--- a/client/gui/overlays/debug.tscn
+++ b/client/gui/overlays/debug/debug.tscn
@@ -1,7 +1,15 @@
-[gd_scene load_steps=3 format=3 uid="uid://3lytexnfrub6"]
+[gd_scene load_steps=6 format=3 uid="uid://3lytexnfrub6"]
-[ext_resource type="Script" uid="uid://bpmdfuqjtwf5v" path="res://gui/overlays/debug.gd" id="1_62otr"]
+[ext_resource type="Script" uid="uid://bpmdfuqjtwf5v" path="res://gui/overlays/debug/debug.gd" id="1_62otr"]
[ext_resource type="Script" uid="uid://byshs20og68tn" path="res://gui/components/smart_margin_container.gd" id="1_c21gy"]
+[ext_resource type="Script" uid="uid://c40pm2fx0t5t8" path="res://gui/overlays/debug/debug_pie.gd" id="3_weeal"]
+[ext_resource type="FontFile" uid="uid://bk704sc5gkrb3" path="res://gui/resources/fonts/font-azaret-mono.woff2" id="4_fa78f"]
+
+[sub_resource type="FontVariation" id="FontVariation_42mmf"]
+base_font = ExtResource("4_fa78f")
+variation_opentype = {
+2003265652: 700
+}
[node name="SmartMarginContainer" type="MarginContainer"]
anchors_preset = 15
@@ -24,3 +32,12 @@ mouse_filter = 2
theme_override_colors/font_outline_color = Color(0, 0, 0, 1)
theme_override_constants/outline_size = 10
script = ExtResource("1_62otr")
+
+[node name="DebugPie" type="Control" parent="."]
+visible = false
+layout_mode = 2
+size_flags_horizontal = 8
+size_flags_vertical = 8
+mouse_filter = 2
+script = ExtResource("3_weeal")
+font = SubResource("FontVariation_42mmf")
diff --git a/client/gui/overlays/debug/debug_pie.gd b/client/gui/overlays/debug/debug_pie.gd
new file mode 100644
index 00000000..c1140683
--- /dev/null
+++ b/client/gui/overlays/debug/debug_pie.gd
@@ -0,0 +1,108 @@
+extends Control
+
+@export var radius: float = 150
+@export var pie_squish: float = 0.6
+@export var font: Font
+const circle_res := 128.
+
+var current_class := "Node"
+var data = {}
+var class_lookup = {}
+
+var offset = 0.
+var font_size = radius / 10
+
+var sorted := []
+var total = 0
+
+func _ready():
+ custom_minimum_size = get_draw_size()
+
+func _process(_dt):
+ setup_counters()
+ traverse(get_tree().root)
+ sort_counters()
+ queue_redraw()
+
+func _input(event: InputEvent):
+ if event is InputEventKey and event.is_pressed():
+ if Input.is_action_pressed("toggle_debug"):
+ visible = event.as_text_key_label() == "1"
+ current_class = "Node"
+ return
+ if not visible: return
+ var text = event.as_text()
+ if not text.is_valid_int(): return
+ var num = int(text)
+ if num > sorted.size(): return
+ if num == 0:
+ if current_class == "Node": return
+ current_class = ClassDB.get_parent_class(current_class)
+ else: current_class = sorted[num - 1][0]
+
+func setup_counters():
+ class_lookup.clear()
+ data.clear()
+ for c in ClassDB.get_inheriters_from_class(current_class):
+ if ClassDB.get_parent_class(c) == current_class:
+ class_lookup[c] = c
+ data[c] = 0
+ for c2 in ClassDB.get_inheriters_from_class(c):
+ class_lookup[c2] = c
+
+func traverse(node: Node):
+ var cls = node.get_class()
+ if class_lookup.has(cls): data[class_lookup[cls]] += 1
+ for c in node.get_children(): traverse(c)
+
+func sort_counters():
+ total = 0
+ sorted.clear()
+ for key in data:
+ if data[key] == 0: continue
+ sorted.append([key, data[key]])
+ total += data[key]
+ sorted.sort_custom(func(a,b): return a[1] > b[1])
+
+func draw_slice(start: float, end: float, color: Color):
+ var a = PackedVector2Array()
+ a.append(Vector2.ZERO)
+ var res = ceil((end - start) * 128)
+ for i in range(res + 1):
+ var ang = lerpf(start, end, float(i) / res)
+ a.append(Vector2(sin(ang), -cos(ang) * pie_squish) * radius)
+ draw_colored_polygon(a, color)
+
+func get_draw_size():
+ return Vector2(1, 1.5) * radius * 2.
+
+func _draw():
+ draw_rect(Rect2(Vector2.ZERO, get_draw_size()), Color(.1,.1,.1,0.8))
+ offset = 0.
+ draw_row(0, current_class, total)
+ draw_pie()
+ for i in range(sorted.size()):
+ var label = sorted[i][0]; var value = sorted[i][1]
+ draw_row(i + 1, label, value)
+
+func draw_pie():
+ draw_set_transform(Vector2(radius, offset + radius * pie_squish))
+ var angle = 0.
+ for i in range(sorted.size()):
+ var label = sorted[i][0]; var value = sorted[i][1]
+ var inc = float(value) / float(total) * PI * 2.
+ draw_slice(angle, angle + inc, label_color(i+1, label))
+ angle += inc
+ offset += radius * 2 * pie_squish
+ draw_set_transform(Vector2.ZERO)
+
+func draw_row(index: int, label: String, value: int):
+ offset += font_size
+ var color = label_color(index, label)
+ var text_left = "[%d] %s" % [index, label]
+ var text_right = "%3d" % value
+ draw_string(font, Vector2(0., offset), text_left, HORIZONTAL_ALIGNMENT_LEFT, radius * 1.5, font_size, color)
+ draw_string(font, Vector2(radius * 1.5, offset), text_right, HORIZONTAL_ALIGNMENT_LEFT, radius * 0.5, font_size, color)
+
+func label_color(i: int, _label: String) -> Color:
+ return Color.from_hsv(fmod(float(i + current_class.hash() & 0xffff) / 3.5, 1.), 0.5, 1.)
diff --git a/client/gui/overlays/debug/debug_pie.gd.uid b/client/gui/overlays/debug/debug_pie.gd.uid
new file mode 100644
index 00000000..24590101
--- /dev/null
+++ b/client/gui/overlays/debug/debug_pie.gd.uid
@@ -0,0 +1 @@
+uid://c40pm2fx0t5t8
diff --git a/client/gui/overlays/debug/pie.tscn b/client/gui/overlays/debug/pie.tscn
new file mode 100644
index 00000000..69872d72
--- /dev/null
+++ b/client/gui/overlays/debug/pie.tscn
@@ -0,0 +1,9 @@
+[gd_scene format=3 uid="uid://27qwbrf7mh7i"]
+
+[node name="DebugPie" type="Control"]
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
diff --git a/client/gui/overlays/overlays.tscn b/client/gui/overlays/overlays.tscn
index f272fd6b..93717736 100644
--- a/client/gui/overlays/overlays.tscn
+++ b/client/gui/overlays/overlays.tscn
@@ -7,7 +7,7 @@
[ext_resource type="PackedScene" uid="uid://bc50la65ntifb" path="res://gui/overlays/lobby/lobby.tscn" id="4_jwd7s"]
[ext_resource type="PackedScene" uid="uid://c7pykhpdhgs64" path="res://gui/overlays/announce_title.tscn" id="5_whygm"]
[ext_resource type="PackedScene" uid="uid://b21nrnkygiyjt" path="res://gui/overlays/popup_message/popup_message.tscn" id="7_jwd7s"]
-[ext_resource type="PackedScene" uid="uid://3lytexnfrub6" path="res://gui/overlays/debug.tscn" id="8_8ouu3"]
+[ext_resource type="PackedScene" uid="uid://3lytexnfrub6" path="res://gui/overlays/debug/debug.tscn" id="8_8ouu3"]
[node name="Overlays" type="Control"]
layout_mode = 3