Turn dev mode into sandbox menu
This commit is contained in:
parent
68985316e5
commit
c325501999
19 changed files with 651 additions and 54 deletions
75
ui/DevMenuButton.gd
Normal file
75
ui/DevMenuButton.gd
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
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.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_wave_requested() -> void:
|
||||
GameState.force_wave_now()
|
||||
menu.close_menu()
|
||||
Loading…
Reference in a new issue