71 lines
2.7 KiB
GDScript
71 lines
2.7 KiB
GDScript
extends CanvasLayer
|
|
|
|
signal build(building: Building)
|
|
|
|
var groups_visible: Array[BuildingGroup] = []
|
|
var buildings_visible: Array[Building] = []
|
|
var selected_building: Building
|
|
|
|
const ADVANCED_BUILDING_GROUP = preload("res://data/buildings/advanced/advanced_building_group.tres")
|
|
const BASIC_BUILDING_GROUP = preload("res://data/buildings/basic/basic_building_group.tres")
|
|
|
|
@onready var building_groups: ItemList = $MarginContainer/PanelContainer/HBoxContainer/ScrollContainer/VBoxContainer/BuildingGroups
|
|
@onready var buildings: ItemList = $MarginContainer/PanelContainer/HBoxContainer/ScrollContainer2/VBoxContainer/Buildings
|
|
|
|
@onready var title: Label = $MarginContainer/PanelContainer/HBoxContainer/DetailsContainer/Title
|
|
@onready var description: Label = $MarginContainer/PanelContainer/HBoxContainer/DetailsContainer/Description
|
|
@onready var build_materials: GridContainer = $MarginContainer/PanelContainer/HBoxContainer/DetailsContainer/BuildMaterials
|
|
@onready var build_buttons_container: HBoxContainer = $MarginContainer/PanelContainer/HBoxContainer/DetailsContainer/BuildButtonsContainer
|
|
|
|
func _ready() -> void:
|
|
_add_building_group(BASIC_BUILDING_GROUP)
|
|
_add_building_group(ADVANCED_BUILDING_GROUP)
|
|
building_groups.grab_focus()
|
|
|
|
func _add_building_group(group: BuildingGroup) -> void:
|
|
building_groups.add_item(group.name, group.atlas_texture)
|
|
groups_visible.append(group)
|
|
|
|
func _on_building_groups_item_selected(index: int) -> void:
|
|
buildings.clear()
|
|
buildings_visible.clear()
|
|
for building in groups_visible[index].buildings:
|
|
buildings_visible.append(building)
|
|
buildings.add_item(building.name, building.atlas_texture)
|
|
|
|
description.hide()
|
|
build_materials.hide()
|
|
build_buttons_container.hide()
|
|
selected_building = null
|
|
|
|
|
|
func _on_buildings_item_selected(index: int) -> void:
|
|
selected_building = buildings_visible[index]
|
|
title.text = selected_building.name
|
|
description.text = selected_building.description
|
|
|
|
for child in build_materials.get_children():
|
|
child.queue_free()
|
|
for res: GameResource in selected_building.cost.keys():
|
|
var image = TextureRect.new()
|
|
var texture = AtlasTexture.new()
|
|
texture.atlas = preload("res://assets/scifi_tilesheet@2.png")
|
|
texture.region = Rect2(64 * res.atlas_location, Vector2(64, 64))
|
|
image.texture = texture
|
|
build_materials.add_child(image)
|
|
var label = Label.new()
|
|
label.text = str(selected_building.cost[res])
|
|
if not ResourceManager.has_amount(res, selected_building.cost[res]):
|
|
label.add_theme_color_override("font_color", Color.RED)
|
|
build_materials.add_child(label)
|
|
|
|
description.show()
|
|
build_materials.show()
|
|
build_buttons_container.show()
|
|
|
|
|
|
func _on_build_button_pressed() -> void:
|
|
if selected_building:
|
|
build.emit(selected_building)
|
|
queue_free()
|