online multiplayer chess game (note server currently down)
Diffstat (limited to 'Debug.gd')
-rw-r--r--Debug.gd75
1 files changed, 75 insertions, 0 deletions
diff --git a/Debug.gd b/Debug.gd
new file mode 100644
index 0000000..79578f1
--- /dev/null
+++ b/Debug.gd
@@ -0,0 +1,75 @@
+extends Node2D
+
+var refs := [] # = [[ node : object, variable : string, (code : string) ]]
+var style: StyleBox = load("res://ui/theme/transblack.tres")
+var font: Font = load("res://ui/verdana.tres")
+var debug := false
+var timer := Timer.new()
+var expr := Expression.new()
+
+const offset := Vector2(10, 10)
+const vertical := 15
+
+
+static func is_debug() -> bool:
+ var args := Utils.get_args()
+ if "debug" in args:
+ return bool(args.debug)
+ return false or OS.is_debug_build()
+
+
+func _ready() -> void:
+ z_index = 5 # put on top
+ add_child(timer)
+ timer.connect("timeout", self, "update")
+ timer.start(.1) # only redraw every .1 seconds
+ font = font.duplicate()
+ font.size = vertical * 0.8
+ debug = is_debug()
+ visible = debug
+
+
+func monitor(node: Node, what: String, code := "") -> void: # code doesnt really work well with ternarys
+ refs.append([node, what, code] if code else [node, what])
+ calculate_size()
+
+
+func calculate_size() -> Rect2:
+ var xminsize := 0.0
+ for set in refs: # find the chonkiest text
+ var tmp := font.get_string_size(get_string(set)).x
+ xminsize = tmp if tmp > xminsize else xminsize
+ return Rect2(Vector2.ZERO, Vector2(xminsize + offset.x, (refs.size()) * vertical) + offset)
+
+
+func update() -> void:
+ timer.start(.1)
+ .update()
+
+
+func _draw() -> void:
+ if !debug:
+ return
+ draw_style_box(style, calculate_size())
+ var i = len(refs)
+ while i >= 0:
+ i -= 1
+ var pos := Vector2(offset.x, (i + 1) * vertical)
+ draw_string(font, pos, get_string(refs[i]))
+
+
+func get_string(set: Array) -> String:
+ var node: Node = set[0]
+ if !is_instance_valid(node):
+ refs.remove(refs.find(set))
+ return "invalid!"
+ var what: String = set[1]
+ var gotten = node.get(what)
+ var val: String = str(gotten) if typeof(gotten) != TYPE_DICTIONARY else to_json(gotten)
+ if len(set) == 3:
+ var err := expr.parse(set[2])
+ if err != OK:
+ Log.err(expr.get_error_text())
+ return ""
+ val = str(expr.execute([], node, true))
+ return "%s: %s" % [what, val]