Refactor gameplay menus into owned scenes
This commit is contained in:
parent
46196a1adb
commit
a17fe88197
50 changed files with 3449 additions and 3619 deletions
70
ui/menus/SkillMenu.gd
Normal file
70
ui/menus/SkillMenu.gd
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
extends "res://ui/menus/ModalMenu.gd"
|
||||
|
||||
signal research_requested(id: String)
|
||||
|
||||
@onready var tree: Control = $Tree
|
||||
@onready var detail: Label = $DetailLabel
|
||||
@onready var cost: Control = $CostNumber
|
||||
@onready var status: Label = $StatusLabel
|
||||
@onready var resource_bar: Control = $Bar
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
super._ready()
|
||||
tree.node_picked.connect(refresh)
|
||||
tree.node_confirmed.connect(func(id: String): research_requested.emit(id))
|
||||
|
||||
|
||||
func open_for(building_id: int) -> void:
|
||||
resource_bar.building_id = building_id
|
||||
open_menu()
|
||||
tree.reset_scroll()
|
||||
refresh()
|
||||
|
||||
|
||||
func selected_id() -> String:
|
||||
return String(tree.selected_id)
|
||||
|
||||
|
||||
func research_completed(id: String) -> void:
|
||||
tree.queue_redraw()
|
||||
refresh(id)
|
||||
|
||||
|
||||
func refresh(id: String = "") -> void:
|
||||
if id == "":
|
||||
id = String(tree.selected_id)
|
||||
if id == "":
|
||||
detail.text = "Select a node to see what it unlocks."
|
||||
cost.show_price({})
|
||||
status.text = "Fleet capacity %d · Research points %d" \
|
||||
% [GameState.max_fleet_size(), GameState.research_points]
|
||||
return
|
||||
|
||||
var node: Dictionary = GameState.skill_node(id)
|
||||
if node.is_empty():
|
||||
return
|
||||
detail.text = "%s\n%s" % [node.name, node.desc]
|
||||
cost.show_price(GameState.skill_costs(id), GameState.skill_research_point_cost(id))
|
||||
if GameState.is_unlocked(id):
|
||||
status.text = "Researched"
|
||||
elif not GameState.prerequisite_met(id):
|
||||
status.text = "Needs %s first" % GameState.skill_node(node.requires).name
|
||||
elif not cost.is_affordable():
|
||||
status.text = ""
|
||||
else:
|
||||
status.text = "Tap again to research"
|
||||
|
||||
|
||||
func handle_unhandled_input(event: InputEvent) -> bool:
|
||||
if not visible:
|
||||
return false
|
||||
if event is InputEventScreenTouch:
|
||||
tree.handle_touch(event)
|
||||
elif event is InputEventScreenDrag:
|
||||
tree.handle_drag(event)
|
||||
elif event is InputEventMouseButton:
|
||||
tree.handle_mouse_button(event)
|
||||
elif event is InputEventMouseMotion:
|
||||
tree.handle_mouse_motion(event)
|
||||
return true
|
||||
Loading…
Reference in a new issue