extends CanvasLayer # Autoload: toggleable network debug overlay (F4 by default — see # toggle_net_overlay in project.godot's [input]). Read-only against # NetworkManager's clock state (task 1.8). Mirrors perf_overlay.gd's pattern # — headless-guarded, hidden by default, no gameplay-state writes. var _label: Label func _ready() -> void: if DisplayServer.get_name() == "headless": set_process(false) return layer = 100 _label = Label.new() _label.add_theme_font_size_override("font_size", 14) _label.add_theme_color_override("font_color", Color(0.5, 0.8, 1.0)) _label.add_theme_color_override("font_shadow_color", Color(0, 0, 0, 0.85)) _label.add_theme_constant_override("shadow_offset_x", 1) _label.add_theme_constant_override("shadow_offset_y", 1) _label.position = Vector2(12, 90) _label.visible = false add_child(_label) func _unhandled_input(event: InputEvent) -> void: if event.is_action_pressed("toggle_net_overlay") and _label: _label.visible = not _label.visible func _process(_delta: float) -> void: if not _label or not _label.visible: return if NetworkManager.is_server: _label.text = "NET: server, %d peer(s)" % (MatchNet.roster.size()) elif NetworkManager.is_client: if NetworkManager.rtt_ms < 0.0: _label.text = "NET: client, connecting (no clock sample yet)" else: _label.text = "NET: client RTT %.1fms clock offset %.1fms" % [NetworkManager.rtt_ms, NetworkManager.clock_offset_ms] else: _label.text = "NET: offline"