]> Untitled Git - frog-ninja.git/blob - ux/debug_stats.gd
Added debug overlay to test scene
[frog-ninja.git] / ux / debug_stats.gd
1 extends MarginContainer
2 class_name DebugStats
3
4
5 var _vbox: VBoxContainer = null
6
7
8 class Property:
9         var num_format = "%4.2f"
10         var object  # The object being tracked.
11         var property  # The property to display (NodePath).
12         var label_ref  # A reference to the Label.
13         var display  # Display option (rounded, etc.)
14
15         func _init(_object, _property, _label, _display):
16                 object = _object
17                 property = _property
18                 label_ref = _label
19                 display = _display
20
21         func set_label():
22                 # Sets the label's text.
23                 var s = object.name + "/" + property + " : "
24                 var p = object.get_indexed(property)
25                 match display:
26                         "":
27                                 s += str(p)
28                         "length":
29                                 s += num_format % p.length()
30                         "round":
31                                 match typeof(p):
32                                         TYPE_INT, TYPE_FLOAT:
33                                                 s += num_format % p
34                                         TYPE_VECTOR2, TYPE_VECTOR3:
35                                                 s += str(p.round())
36                 label_ref.text = s
37
38 var props = []  # An array of the tracked properties.
39 var _labelSettings: LabelSettings = null
40
41
42 func _ready() -> void:
43         _labelSettings = LabelSettings.new()
44         _labelSettings.font_size = 15 * 2
45         
46         # add VBoxContainer as child
47         _vbox = VBoxContainer.new()
48         add_child(_vbox)
49
50
51 func _process(_delta):
52         if not visible:
53                 return
54         for prop in props:
55                 prop.set_label()
56
57
58 func add_property(object, property, display):
59         var label = Label.new()
60         label.label_settings = _labelSettings
61         _vbox.add_child(label)
62         props.append(Property.new(object, property, label, display))
63
64
65 func remove_property(object, property):
66         for prop in props:
67                 if prop.object == object and prop.property == property:
68                         props.erase(prop)