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