67 lines
1.9 KiB
GDScript
67 lines
1.9 KiB
GDScript
extends VBoxContainer
|
|
|
|
class_name BuildMenu
|
|
|
|
@export var grid_input: GridInput
|
|
@export var grid: Grid
|
|
|
|
# at some point this the buildingdata stuff will need to be pulled somewhere else!
|
|
|
|
var building_datas: Array[BuildingData] = []
|
|
|
|
func load_building_datas():
|
|
var unexplored_dirs = [ "res://Tiles" ]
|
|
var discovered_data = []
|
|
|
|
while unexplored_dirs.size() != 0:
|
|
var root_path = unexplored_dirs.pop_front()
|
|
|
|
var files = DirAccess.get_files_at(root_path)
|
|
for file in files:
|
|
var new_path = root_path + "/" + file
|
|
discovered_data.append(new_path)
|
|
#print(new_path)
|
|
#print(discovered_data)
|
|
|
|
var dirs = DirAccess.get_directories_at(root_path)
|
|
for dir in dirs: unexplored_dirs.append(root_path + "/" + dir)
|
|
|
|
for child in get_children(): child.queue_free()
|
|
|
|
for res_path in discovered_data:
|
|
var resource: BuildingData = load(res_path)
|
|
if resource.availability != BuildingData.Availability.Starting:
|
|
continue
|
|
var new_button = BuildButton.new()
|
|
new_button.building = resource
|
|
add_child(new_button)
|
|
|
|
func _ready():
|
|
load_building_datas()
|
|
|
|
func build_button_pressed(button: BuildButton):
|
|
grid_input.request_area(
|
|
button.building,
|
|
request_confirmed,
|
|
request_cancelled,
|
|
GridInput.Style.Build,
|
|
button.building.area_type,
|
|
false
|
|
)
|
|
|
|
func tile_is_valid_at_location(building: BuildingData, tile_pos: Vector2i) -> bool:
|
|
for requirement in building.field_requirements:
|
|
if !requirement.is_satisfied_at_position(self.grid, tile_pos):
|
|
return false
|
|
return true
|
|
|
|
func request_confirmed(building: BuildingData, area: Rect2i) -> void:
|
|
for x in range(area.position.x, area.position.x + area.size.x):
|
|
for y in range(area.position.y, area.position.y + area.size.y):
|
|
if !tile_is_valid_at_location(building, Vector2i(x, y)): continue
|
|
var new_tile = Building.new(Vector2i(x, y), Vector2i.ONE, building)
|
|
grid.add_child(new_tile)
|
|
|
|
func request_cancelled(building: BuildingData) -> void:
|
|
pass
|