extends Node2D var StarScene = preload("res://scenes/Star.tscn") var PlanetScene = preload("res://scenes/Planet.tscn") @onready var PlanetStatPanel = $PlanetStatPanel @onready var BackButton = $BackButton var ORBIT_STEP = 150 const FIRST_ORBIT_STEP = 200 var tracked_planet: Node = null func _ready(): randomize() _init_background() spawn_star() spawn_planets() BackButton.pressed.connect(_on_back_pressed) func _process(delta): if tracked_planet and PlanetStatPanel.visible: _update_panel() func _on_back_pressed(): get_tree().change_scene_to_file("res://scenes/Galaxy.tscn") # --- Planet spawning --- func spawn_planets(): var center = get_viewport_rect().size / 2 var sector_index = Manager.current_sector if sector_index < 0: push_error("Current sector is not set!") return # przygotuj sektor jeśli jeszcze nie istnieje if Manager.sectors_data.size() <= sector_index: Manager.sectors_data.resize(sector_index + 1) if Manager.sectors_data[sector_index] == null: Manager.sectors_data[sector_index] = {"planets": [], "star": {}} elif not Manager.sectors_data[sector_index].has("planets"): Manager.sectors_data[sector_index]["planets"] = [] var sector_planets = Manager.sectors_data[sector_index]["planets"] for i in range(sector_planets.size()): var planet_data = sector_planets[i] var planet_node = PlanetScene.instantiate() add_child(planet_node) planet_node.data = planet_data planet_node.orbit_center = center if i == 0: planet_node.orbit_radius = planet_data.get("orbit_radius", FIRST_ORBIT_STEP * (i + 1)) else: planet_node.orbit_radius = planet_data.get("orbit_radius", ORBIT_STEP * (i + 1)) planet_node.angle = planet_data.get("angle", randf() * TAU) planet_node.rotation_speed = planet_data.get("rotation_speed", randf_range(0.00001, 1)) # Tekstura if planet_data.has("texture_path"): planet_node.set_texture(load(planet_data["texture_path"])) else: var tex_path = "res://assets/planets/p%d.png" % randi_range(1,18) planet_node.set_texture(load(tex_path)) planet_data["texture_path"] = tex_path planet_node.connect("show_stats", Callable(self, "_on_show_stats")) planet_node.connect("hide_stats", Callable(self, "_on_hide_stats")) # Zapis aktualnych parametrów do Managera planet_data["orbit_radius"] = planet_node.orbit_radius planet_data["angle"] = planet_node.angle planet_data["rotation_speed"] = planet_node.rotation_speed # --- Star --- func spawn_star(): var sector_index = Manager.current_sector if sector_index < 0: push_error("Current sector is not set!") return if not Manager.sectors_data[sector_index].has("star"): Manager.sectors_data[sector_index]["star"] = {} var star_data = Manager.sectors_data[sector_index]["star"] var star = StarScene.instantiate() add_child(star) star.position = get_viewport_rect().size / 2 # jeśli gwiazda ma zapisaną teksturę – użyj jej if star_data.has("texture_path"): star.set_texture(load(star_data["texture_path"])) else: var tex_path = random_star_texture_path() star.set_texture(load(tex_path)) star_data["texture_path"] = tex_path Manager.sectors_data[sector_index]["star"] = star_data func random_star_texture_path() -> String: var id = randi_range(1,8) return "res://assets/stars/s%d.png" % id # --- Background --- func _init_background(): var background = Sprite2D.new() background.texture = load("res://assets/background/space1.jpg") background.centered = true background.position = get_viewport_rect().size / 2 var screen_size = get_viewport_rect().size var tex_size = background.texture.get_size() var scale_factor = max(screen_size.x / tex_size.x, screen_size.y / tex_size.y) background.scale = Vector2(scale_factor, scale_factor) add_child(background) background.z_index = -10 # --- GUI --- func _on_show_stats(planet): tracked_planet = planet PlanetStatPanel.visible = true _update_panel() func _on_hide_stats(): tracked_planet = null PlanetStatPanel.visible = false func _update_panel(): if tracked_planet == null or tracked_planet.data == null: return var colonized_text = " (Skolonizowana)" if tracked_planet.data["is_colonized"] else "" PlanetStatPanel.get_node("PlanetName").text = "Name: " + tracked_planet.data["name"] + colonized_text PlanetStatPanel.get_node("PopulationPanel").text = "Populacja: %d / %d" % [tracked_planet.data["population"], tracked_planet.data["max_population"]] PlanetStatPanel.get_node("MiningRate").text = "Potencjał surowcowy: %.2f" % tracked_planet.data["mining_rate"] var mined_per_cycle = Manager.get_mined_per_cycle(tracked_planet.data) PlanetStatPanel.get_node("ResourcePlanet").text = "Surowce: %.2f (+%.2f)" % [tracked_planet.data["resources"], mined_per_cycle] PlanetStatPanel.get_node("GrowthRate").text = "Biosfera: %.2f" % tracked_planet.data["growth_rate"]