space_empire/scripts/sector.gd
Tomasz Boruc 456ae98e0f Kolonizacja, populacja, surowce
System kolonizacji
Przyrost populacji
Wydobycie surowców
2025-10-14 22:07:01 +02:00

104 lines
3.2 KiB
GDScript

extends Node2D
var StarScene = preload("res://scenes/Star.tscn")
var PlanetScene = preload("res://scenes/Planet.tscn")
@onready var PlanetStatPanel = $PlanetStatPanel
var PLANET_COUNT = randi_range(1,6)
const ORBIT_STEP = 120
var planet_names = [
"Arcturus","Betelgeuse","Canopus","Deneb","Elnath",
"Fomalhaut","Gacrux","Hadar","Izar","Jabbah",
"Kaus","Lesath","Menkent","Nunki","Okul",
"Pollux","Rigel","Sargas","Toliman","Unukalhai",
"Vega","Wezen","Xamidimura","Yildun","Zosma",
"Alkaid","Baten","Caph","Diphda","Electra"
]
# Planeta, której statystyki są aktualnie pokazywane
var tracked_planet: Node = null
func _ready():
randomize()
spawn_star()
spawn_planets(PLANET_COUNT)
_init_background()
func _process(delta):
if tracked_planet != null:
_update_panel()
func spawn_star():
var star = StarScene.instantiate()
add_child(star)
star.position = get_viewport_rect().size / 2
star.set_texture(random_star_texture())
func spawn_planets(count: int):
var center = get_viewport_rect().size / 2
for i in range(count):
var planet = PlanetScene.instantiate()
add_child(planet)
var orbit_radius = (i + 1) * ORBIT_STEP
planet.orbit_radius = orbit_radius
planet.orbit_center = center
planet.rotation_speed = randf_range(0.01, 0.04)
planet.planet_size = randi_range(1, 3)
planet.set_size(planet.planet_size)
planet.resources = 0
planet.mining_rate = randf_range(0.1, 1.0)
planet.planet_name = planet_names[randi() % planet_names.size()]
planet.set_texture(random_planet_texture())
planet.connect("show_stats", Callable(self, "_on_show_stats"))
planet.connect("hide_stats", Callable(self, "_on_hide_stats"))
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
func random_star_texture() -> Texture2D:
var id = randi_range(1, 16)
return load("res://assets/stars/s%d.png" % id)
func random_planet_texture() -> Texture2D:
var id = randi_range(1, 18)
return load("res://assets/planets/p%d.png" % id)
# --- GUI ---
func _on_show_stats(planet):
tracked_planet = planet
PlanetStatPanel.visible = true
_update_panel()
func _on_hide_stats():
PlanetStatPanel.visible = false
tracked_planet = null
func _update_panel():
var colonized_text = ""
if tracked_planet.is_colonized:
colonized_text = " (Skolonizowana)"
PlanetStatPanel.get_node("PlanetName").text = "Name: " + tracked_planet.planet_name + colonized_text
PlanetStatPanel.get_node("PopulationPanel").text = ("Populacja: %d / %d" % [tracked_planet.population, tracked_planet.max_population])
PlanetStatPanel.get_node("MiningRate").text = ("Współczynnik wydobycia: %.2f" % tracked_planet.mining_rate)
var mined_per_cycle = tracked_planet.get_mined_per_cycle()
PlanetStatPanel.get_node("ResourcePlanet").text = (
"Surowce: %.2f (+%.2f / cykl)" % [tracked_planet.resources, mined_per_cycle]
)