94 lines
2.8 KiB
GDScript
94 lines
2.8 KiB
GDScript
extends Node2D
|
|
|
|
var StarScene = preload("res://scenes/Star.tscn")
|
|
var PlanetScene = preload("res://scenes/Planet.tscn")
|
|
@onready var PlanetStatPanel = $PlanetStatPanel
|
|
|
|
const ORBIT_STEP = 120
|
|
var tracked_planet: Node = null
|
|
|
|
func _ready():
|
|
randomize()
|
|
_init_background()
|
|
spawn_star()
|
|
spawn_planets()
|
|
|
|
func _process(delta):
|
|
if tracked_planet:
|
|
_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():
|
|
var center = get_viewport_rect().size / 2
|
|
|
|
# jeśli Manager nie ma jeszcze planet — utwórz kilka losowych
|
|
if Manager.planets_data.size() == 0:
|
|
var names = ["Arcturus","Betelgeuse","Canopus","Deneb","Elnath"]
|
|
for name in names:
|
|
var planet = Manager.register_planet(
|
|
name,
|
|
randi_range(1, 3),
|
|
randf_range(0.1, 1.0)
|
|
)
|
|
|
|
# stwórz instancje wizualne
|
|
for i in range(Manager.planets_data.size()):
|
|
var planet_data = Manager.planets_data[i]
|
|
var planet = PlanetScene.instantiate()
|
|
add_child(planet)
|
|
|
|
planet.orbit_center = center
|
|
planet.orbit_radius = (i + 1) * ORBIT_STEP
|
|
planet.rotation_speed = randf_range(0.01, 0.04)
|
|
planet.data = planet_data
|
|
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:
|
|
return load("res://assets/stars/s%d.png" % randi_range(1, 16))
|
|
|
|
func random_planet_texture() -> Texture2D:
|
|
return load("res://assets/planets/p%d.png" % randi_range(1, 18))
|
|
|
|
# --- 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():
|
|
if tracked_planet == null:
|
|
return
|
|
var d = tracked_planet.data
|
|
var colonized_text = ""
|
|
if d["is_colonized"]:
|
|
colonized_text = " (Skolonizowana)"
|
|
|
|
PlanetStatPanel.get_node("PlanetName").text = "Name: " + d["name"] + colonized_text
|
|
PlanetStatPanel.get_node("PopulationPanel").text = "Populacja: %d / %d" % [d["population"], d["max_population"]]
|
|
PlanetStatPanel.get_node("MiningRate").text = "Wydobycie: %.2f" % d["mining_rate"]
|
|
PlanetStatPanel.get_node("ResourcePlanet").text = "Surowce: %.2f" % d["resources"]
|