Randoloot/scripts/ui/protected_planet_marker.gd
2026-10-10 21:21:58 +02:00

27 lines
1.3 KiB
GDScript

extends Control
var game: Node2D
func _process(_delta: float) -> void:
queue_redraw()
func _draw() -> void:
if not is_instance_valid(game) or not is_instance_valid(game.get("protected_planet")):
return
var planet: Node2D = game.get("protected_planet")
var screen_position := get_viewport().get_canvas_transform() * planet.global_position
# Leave the bottom strip free for active extension buttons.
var bounds := Rect2(Vector2(32, 56), Vector2(maxf(100.0, size.x - 320.0), maxf(100.0, size.y - 160.0)))
if bounds.has_point(screen_position):
return
var center := bounds.get_center()
var direction := (screen_position - center).normalized()
var half_size := bounds.size * 0.5
var distance := minf(half_size.x / maxf(absf(direction.x), 0.001), half_size.y / maxf(absf(direction.y), 0.001))
var point := center + direction * distance
var side := Vector2(-direction.y, direction.x)
var color := Color("77e8bc") if bool(game.get("system_cleared")) else Color("ffbd83")
draw_colored_polygon(PackedVector2Array([point + direction * 10, point - direction * 7 + side * 7, point - direction * 7 - side * 7]), color)
var label_position := Vector2(clampf(point.x - 45, 8, size.x - 120), clampf(point.y + 25, 20, size.y - 12))
draw_string(ThemeDB.fallback_font, label_position, "Planeta rasy", HORIZONTAL_ALIGNMENT_LEFT, -1, 12, color)