Randoloot/scripts/planets/freighter_command.gd
2026-10-19 22:58:37 +02:00

74 lines
4.6 KiB
GDScript

extends RefCounted
const MENU := preload("res://scripts/planets/freighter_menu.gd")
const NETWORK := preload("res://scripts/planets/mining_network.gd")
static func build(screen: Control) -> void:
var progress: Resource = screen.captain.expedition
var navigation := MENU.card(screen._content)
MENU.label(navigation, "NAWIGACJA / ODKRYTE UKŁADY", 14, MENU.GOLD)
MENU.label(navigation, "Obecny: System %d · Najdalszy odkryty: %d" % [GameState.system_level, GameState.highest_system], 12)
var row := MENU.row(navigation)
var destination := OptionButton.new()
destination.name = "SystemDestination"
destination.size_flags_horizontal = Control.SIZE_EXPAND_FILL
destination.add_theme_font_size_override("font_size", 11)
destination.add_theme_font_override("font", ThemeDB.fallback_font)
for level in range(1, GameState.highest_system + 1):
destination.add_item("System %d%s" % [level, " · HARD" if level > 60 else ""], level)
destination.select(GameState.system_level - 1)
row.add_child(destination)
var travel := MENU.button(row, "LEĆ DO UKŁADU", func(): screen._travel_to_system(destination.get_selected_id()), true)
travel.name = "TravelToSystem"
travel.disabled = true
destination.item_selected.connect(func(_index): travel.disabled = destination.get_selected_id() == GameState.system_level)
MENU.label(navigation, "Nowe układy odblokujesz, przechodząc dalej przez tunel po pokonaniu przeciwników.", 11, MENU.MUTED)
var summary := MENU.card(screen._content)
MENU.label(summary, "SIEĆ WYDOBYWCZA", 14, MENU.GOLD)
var stock := MENU.label(summary, "", 13, Color("95dce8"))
screen._economy_labels["network"] = stock
MENU.label(summary, "Obsadzona placówka: 1 deuter/min + punkty zarządzania. Dostawy automatyczne do magazynu.", 11, MENU.MUTED)
MENU.label(summary, "Jeden załogant obsługuje jedną placówkę. Nowy przydział przenosi go z poprzedniej.", 11, MENU.MUTED)
if progress.mining_stations.is_empty():
MENU.label(summary, "Brak placówek. Szukaj głębokich złóż na planetach (szansa 60%). Budowa: 200 części.", 12)
for station_id in progress.mining_stations:
var station: Dictionary = progress.mining_stations[station_id]
var card := MENU.card(screen._content)
MENU.label(card, "%s · SYSTEM %d" % [station.planet_name, station.system], 13, MENU.GOLD)
var member: Dictionary = progress.crew.get(str(station.get("crew_id", "")), {})
MENU.label(card, "Czeka na załoganta" if member.is_empty() else "%s · zarządzanie %d/100 · %.0f deuteru/min" % [member.name, member.management, NETWORK.station_rate(progress, station)], 12)
var assign_row := MENU.row(card)
var option := OptionButton.new()
option.name = "StationCrew_" + str(station_id).md5_text().substr(0, 8)
option.size_flags_horizontal = Control.SIZE_EXPAND_FILL
option.fit_to_longest_item = false
option.add_theme_font_size_override("font_size", 11)
option.add_theme_font_override("font", ThemeDB.fallback_font)
option.add_item("Bez przydziału")
option.set_item_metadata(0, "")
for crew_id in progress.crew:
var person: Dictionary = progress.crew[crew_id]
option.add_item("%s · %d/100" % [person.name, person.management])
option.set_item_metadata(option.item_count - 1, crew_id)
if str(station.get("crew_id", "")) == str(crew_id): option.select(option.item_count - 1)
assign_row.add_child(option)
var apply := MENU.button(assign_row, "PRZYDZIEL", screen._assign_station.bind(str(station_id), option))
apply.disabled = progress.crew.is_empty() and member.is_empty()
if progress.crew.is_empty(): MENU.label(screen._content, "Brak załogantów. Przygotuj kajutę i zatrudnij specjalistę spotkanego na planecie.", 12, MENU.MUTED)
screen._refresh_live_labels()
static func cabin(screen: Control) -> void:
var progress: Resource = screen.captain.expedition
var member := NETWORK.cabin_crew(progress, screen._tab)
var card := MENU.card(screen._content)
if member.is_empty():
MENU.label(card, "WOLNA KAJUTA", 14, MENU.GOLD)
MENU.label(card, "Przygotowana dla jednego załoganta. Specjalistów możesz zatrudniać na planetach.", 12)
return
MENU.label(card, str(member.name), 15, MENU.GOLD)
MENU.label(card, "Zarządzanie: %d / 100\nPremia do wydobycia: +%d deuteru/min\nPochodzenie: %s" % [member.management, member.management, member.planet_name], 12)
var assignment := "Bez przydziału"
for station in progress.mining_stations.values():
if str(station.get("crew_id", "")) == str(member.id): assignment = "%s · System %d" % [station.planet_name, station.system]
MENU.label(card, "Placówka: " + assignment, 12, Color("95dce8"))
MENU.button(card, "ZWOLNIJ ZAŁOGANTA", screen._dismiss_crew.bind(str(member.id)))