extends Node2D class_name Planet @onready var label = $Label @onready var info_label = $CanvasLayer/Info @onready var area = $Area2D # --- Timery --- var pop_timer: float = 0.0 var res_timer: float = 0.0 var cons_timer: float = 0.0 var pname: String = "" var orbit_radius: float = 30.0 var orbit_speed: float = 0.01 var biosfere: float = 0.1 var is_colonized = false var size = 1 var max_pop = 1 var population: int = 0 var res_rich: float = 0.0 var resources := {} var buildings := [] # słownik z ID -> stan budynku var texture: Texture2D var angle = randf() * TAU func _ready(): add_to_group("planets") # Podłącz sygnały area.mouse_entered.connect(_on_mouse_entered) area.mouse_exited.connect(_on_mouse_exited) area.connect("input_event", Callable(self, "_on_area_input")) #str(round(biosfere * 100) / 100.0) _update_position() # Testowanie funkcji add_building("iron_mine") add_building("water_purifier") add_building("copper_mine") # próba dodania ponownie print("Lista budynków na planecie:", buildings) var data = BuildingsList.BUILDINGS["iron_mine"] print(data.name, data.cost) func _process(delta): angle += orbit_speed * delta # obrót w czasie angle = fmod(angle, TAU) # utrzymanie kąta w 0..2π _update_position() if is_colonized: _pop_growth(delta) _res_growth(delta) _res_consumption(delta) print_data() label.text = str(pname) update_buildings(delta) func _update_position(): # pozycja lokalna względem gwiazdy position = Vector2(cos(angle), sin(angle)) * orbit_radius func _on_mouse_entered(): info_label.visible = true print_data() func _on_area_input(viewport, event, shape_idx): if event is InputEventMouseButton and event.pressed and event.button_index == MOUSE_BUTTON_LEFT: _on_mouse_click() func _on_mouse_exited(): info_label.visible = false func _on_mouse_click(): colonize() func colonize(): if is_colonized == false: is_colonized = true label.add_theme_color_override("font_color", Color(0.0, 0.454, 0.0, 1.0)) population = 100 print_data() func print_data(): var text = "🌍 %s\n" % pname text += "Biosfera: %.2f\n" % biosfere text += "Zasobność surowców: %.2f\n" % res_rich text += "Limit populacji: " + str(int(max_pop)).pad_decimals(0) + "\n" text += "Populacja: " + str(int(population)).pad_decimals(0) + "\n" text += "Status: " + ("Skolonizowana" if is_colonized else "Nieskolonizowana") + "\n" var has_any_resource = false for key in resources.keys(): var res = resources[key] if res.has("exist") and res["exist"]: if not has_any_resource: text += "Zasoby:\n" has_any_resource = true var display_name = tr(key) text += "%s: %.2f +(%s)\n" % [display_name, round(res.get("amount", 0) * 100) / 100.0, check_growth()] # --- Budynki --- if buildings.size() > 0: text += "Budynki na planecie:\n" for b in buildings: var data = BuildingsList.BUILDINGS[b.id] var status = "W budowie" if b.is_building else "Gotowy" text += "- %s [%s]\n" % [data.name, status] info_label.text = text func _pop_growth(delta): pop_timer += delta if pop_timer >= Settings.UPDATE_INTERVAL: if resources["water"]["amount"] > 0: var growth = int(max(1, population * 0.05 * biosfere)) population = min(population + growth, max_pop) pop_timer = 0.0 else: population = max(population - 10, 100) pop_timer = 0.0 func _res_growth(delta): res_timer += delta if res_timer < Settings.UPDATE_INTERVAL: return res_timer = 0.0 for res_name in resources.keys(): var res = resources[res_name] if res.exist: # Sprawdź, czy planeta ma budynek wydobywający ten surowiec var can_produce = false for b in buildings: if not b.is_building: # tylko ukończone budynki var building_data = BuildingsList.BUILDINGS[b.id] if building_data.resource == res_name: can_produce = true break if can_produce: var growth = check_growth() # np. funkcja zwraca ile przyrasta res.amount += growth resources[res_name] = res func check_growth() -> float: # Zwraca przyrost zaokrąglony do 2 miejsc po przecinku var growth = res_rich * (population / 1000.0) return round(growth * 100) / 100.0 func _res_consumption(delta): var water_usage = population * 0.0002 # np. 0.002 jednostki wody na osobę cons_timer += delta if cons_timer >= Settings.UPDATE_INTERVAL: if "water" in resources: resources["water"].amount -= water_usage if resources["water"].amount < 0: resources["water"].amount = 0 cons_timer = 0.0 func add_building(building_id: String): # Sprawdzenie czy istnieje w definicjach if not BuildingsList.BUILDINGS.has(building_id): print("Nie ma takiego budynku:", building_id) return # Sprawdzenie czy planeta już ma ten budynek for b in buildings: if b.id == building_id: print("Planeta już ma budynek:", building_id) return # Dodajemy budynek w budowie buildings.append({ "id": building_id, "level": 1, "is_building": true, "built_time": 0.0 }) print("Rozpoczęto budowę budynku:", BuildingsList.BUILDINGS[building_id].name) func update_buildings(delta: float): for b in buildings: if b.is_building: var build_time = BuildingsList.BUILDINGS[b.id].build_time b.built_time += delta if b.built_time >= build_time: b.is_building = false print("Budowa ukończona:", BuildingsList.BUILDINGS[b.id].name)