extends Control # Editor-only entry into the live sandbox. The modal scene owns presentation; # this small controller owns the boundary to the world nodes it manipulates. @onready var button: IconButton = $Button @onready var menu: Control = get_node("../DevMenu") @onready var fleet: Node = get_node("../../Fleet") func _ready() -> void: button.pressed.connect(_on_pressed) menu.fleet_add_requested.connect(_on_fleet_add_requested) menu.fleet_remove_requested.connect(_on_fleet_remove_requested) menu.unlock_skills_requested.connect(_on_unlock_skills_requested) menu.unlimited_resources_requested.connect(_on_unlimited_resources_requested) menu.free_costs_requested.connect(_on_free_costs_requested) menu.wave_requested.connect(_on_wave_requested) visible = false func _process(_delta: float) -> void: var show_it: bool = GameState.dev_mode and not GameState.intro_active if show_it != visible: visible = show_it if not show_it and menu.visible: menu.close_menu() func _on_pressed() -> void: if not GameState.dev_mode: return menu.open_for(fleet) func _on_fleet_add_requested(vessel_type: String) -> void: if fleet.add_ship(vessel_type): menu.set_status("Added %s" % GameState.vessel_name(vessel_type)) else: menu.set_status("Fleet is full — unlock all skills for up to %d slots" \ % GameState.DEFAULT_FORMATION.size()) func _on_fleet_remove_requested(vessel_type: String) -> void: var index: int = -1 for i in range(fleet.ships.size()): if is_instance_valid(fleet.ships[i]) \ and String(fleet.ships[i].vessel_type) == vessel_type: index = i break if index < 0: menu.set_status("No %s is currently deployed" % GameState.vessel_name(vessel_type)) return if fleet.store_ship(index) == "": menu.set_status("Keep at least one vessel in the fleet") return menu.set_status("Removed %s" % GameState.vessel_name(vessel_type)) func _on_unlock_skills_requested() -> void: var unlocked_count: int = GameState.dev_unlock_all_skills() if unlocked_count > 0: menu.set_status("Unlocked all skills (%d new)" % unlocked_count) else: menu.set_status("All skills are already unlocked") func _on_unlimited_resources_requested(enabled: bool) -> void: if not GameState.set_dev_unlimited_resources(enabled): return menu.set_status("Unlimited resources %s" % ("enabled" if enabled else "disabled")) func _on_free_costs_requested(enabled: bool) -> void: if not GameState.set_dev_free_costs(enabled): return menu.set_status("Research and production costs %s" \ % ("are now free" if enabled else "are charged again")) func _on_wave_requested() -> void: GameState.force_wave_now() menu.close_menu()