space_empire/scripts/planet.gd

88 lines
2.2 KiB
GDScript

extends Node2D
@onready var area = $Area2D
var sprite: Sprite2D
var colonized_icon: Sprite2D
var orbit_center: Vector2
var orbit_radius: float
var rotation_speed: float = 0.02
var angle: float = 0.0
# Połączenie z globalnymi danymi
var data: Dictionary
signal show_stats(planet)
signal hide_stats()
func _ready():
_ensure_sprite()
angle = randf() * TAU
colonized_icon = Sprite2D.new()
colonized_icon.texture = load("res://assets/icons/col_icon.png")
colonized_icon.centered = true
colonized_icon.visible = false
colonized_icon.scale = Vector2(0.02, 0.02)
add_child(colonized_icon)
if area:
area.mouse_entered.connect(_on_mouse_entered)
area.mouse_exited.connect(_on_mouse_exited)
area.input_event.connect(_on_area_input)
func _ensure_sprite():
if sprite == null:
sprite = Sprite2D.new()
add_child(sprite)
sprite.centered = true
func _process(delta):
# Ruch orbitalny
angle += rotation_speed * delta
if orbit_center and orbit_radius:
position = orbit_center + Vector2(cos(angle), sin(angle)) * orbit_radius
# Aktualizacja ikonki kolonizacji
if colonized_icon:
colonized_icon.visible = data["is_colonized"]
var y_offset = 0
if sprite and sprite.texture:
y_offset = -sprite.texture.get_size().y * 0.13
colonized_icon.position = Vector2(0, y_offset)
func set_texture(tex: Texture2D):
_ensure_sprite()
sprite.texture = tex
sprite.scale = get_scale_for_size(data["size"])
func get_scale_for_size(size: int) -> Vector2:
match size:
1: return Vector2(0.20, 0.20)
2: return Vector2(0.30, 0.30)
3: return Vector2(0.42, 0.42)
4: return Vector2(0.60, 0.60)
return Vector2(0.3, 0.3)
func _on_area_input(viewport, event, shape_idx):
if event is InputEventMouseButton and event.pressed and event.button_index == MOUSE_BUTTON_LEFT:
colonize()
func colonize():
if not data["is_colonized"]:
data["is_colonized"] = true
data["population"] = 10
print(data["name"] + " has been colonized!")
emit_signal("show_stats", self)
func _on_mouse_entered():
if sprite:
sprite.scale = get_scale_for_size(data["size"]) * 1.15
emit_signal("show_stats", self)
func _on_mouse_exited():
if sprite:
sprite.scale = get_scale_for_size(data["size"])
emit_signal("hide_stats")