Randoloot/scripts/game/space_level_background.gd
2026-10-09 13:23:02 +02:00

89 lines
4.2 KiB
GDScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

extends Node2D
const WORLD_SIZE := Vector2(5200.0, 3600.0)
const GRID_STEP := 320
func _draw() -> void:
var half_size := WORLD_SIZE * 0.5
draw_rect(Rect2(-half_size, WORLD_SIZE), Color("050b18"), true)
_draw_grid(half_size)
_draw_stars(half_size)
_draw_landmarks()
_draw_world_border(half_size)
func _draw_grid(half_size: Vector2) -> void:
for x in range(-2600, 2601, GRID_STEP):
var major := x % (GRID_STEP * 4) == 0
var color := Color(0.16, 0.28, 0.42, 0.2 if major else 0.075)
draw_line(Vector2(x, -half_size.y), Vector2(x, half_size.y), color, 1.0)
for y in range(-1800, 1801, GRID_STEP):
var major := y % (GRID_STEP * 4) == 0
var color := Color(0.16, 0.28, 0.42, 0.2 if major else 0.075)
draw_line(Vector2(-half_size.x, y), Vector2(half_size.x, y), color, 1.0)
func _draw_stars(half_size: Vector2) -> void:
var rng := RandomNumberGenerator.new()
rng.seed = 640_118
for index in 420:
var point := Vector2(
rng.randf_range(-half_size.x + 35.0, half_size.x - 35.0),
rng.randf_range(-half_size.y + 35.0, half_size.y - 35.0)
)
var radius := rng.randf_range(0.7, 2.0)
var alpha := rng.randf_range(0.2, 0.72)
var color := Color(0.58, 0.76, 1.0, alpha)
if index % 9 == 0:
color = Color(0.35, 0.88, 0.94, alpha)
draw_circle(point, radius, color)
func _draw_landmarks() -> void:
# Safe starting area around the spawn point.
draw_circle(Vector2.ZERO, 300.0, Color(0.08, 0.65, 0.72, 0.035))
draw_arc(Vector2.ZERO, 300.0, 0.0, TAU, 96, Color(0.16, 0.78, 0.84, 0.32), 2.0)
_draw_label(Vector2(28, -316), "STREFA STARTOWA", Color(0.38, 0.81, 0.87, 0.78))
_draw_planet(Vector2(-1420, -760), 150.0, Color("e9904e"), "HELION")
_draw_planet(Vector2(1420, -940), 112.0, Color("397fa9"), "NEREIDA")
_draw_planet(Vector2(1110, 1170), 86.0, Color("8d6cbb"), "VESPER")
_draw_planet(Vector2(-1580, 1120), 72.0, Color("72a58b"), "TUBYLCY")
_draw_asteroid_field(Vector2(420, 160), 400.0, 34, 9_183)
_draw_asteroid_field(Vector2(-930, 460), 270.0, 22, 3_277)
_draw_navigation_beacon(Vector2(520, -190))
func _draw_navigation_beacon(center: Vector2) -> void:
draw_circle(center, 58.0, Color(0.1, 0.72, 0.86, 0.07))
draw_arc(center, 44.0, 0.0, TAU, 64, Color(0.25, 0.82, 0.9, 0.75), 2.0)
draw_arc(center, 31.0, 0.0, TAU, 64, Color(0.25, 0.82, 0.9, 0.4), 1.0)
draw_line(center + Vector2(-54, 0), center + Vector2(54, 0), Color(0.25, 0.82, 0.9, 0.6), 1.0)
draw_line(center + Vector2(0, -54), center + Vector2(0, 54), Color(0.25, 0.82, 0.9, 0.6), 1.0)
draw_circle(center, 12.0, Color(0.35, 0.92, 1.0, 0.9))
_draw_label(center + Vector2(-88, 78), "BOJA NAWIGACYJNA", Color(0.45, 0.83, 0.9, 0.82))
func _draw_planet(center: Vector2, radius: float, color: Color, label: String) -> void:
draw_circle(center, radius * 1.55, Color(color.r, color.g, color.b, 0.055))
draw_arc(center, radius * 1.42, 0.0, TAU, 96, Color(color.r, color.g, color.b, 0.2), 2.0)
draw_circle(center, radius, color.darkened(0.48))
draw_circle(center + Vector2(-radius * 0.22, -radius * 0.24), radius * 0.68, color.darkened(0.15))
draw_arc(center, radius * 1.26, deg_to_rad(-18), deg_to_rad(205), 64, Color(0.64, 0.79, 0.91, 0.55), 5.0)
_draw_label(center + Vector2(-radius, radius + 34.0), label, Color(0.77, 0.85, 0.95, 0.76))
func _draw_asteroid_field(center: Vector2, spread: float, count: int, seed_value: int) -> void:
var rng := RandomNumberGenerator.new()
rng.seed = seed_value
for index in count:
var angle := rng.randf_range(0.0, TAU)
var distance := sqrt(rng.randf()) * spread
var point := center + Vector2.RIGHT.rotated(angle) * distance
var size := rng.randf_range(5.0, 15.0)
var color := Color(0.42, 0.53, 0.65, rng.randf_range(0.35, 0.75))
draw_circle(point, size, color)
draw_circle(point + Vector2(-size * 0.25, -size * 0.25), size * 0.55, color.lightened(0.18))
func _draw_world_border(half_size: Vector2) -> void:
var bounds := Rect2(-half_size, WORLD_SIZE)
draw_rect(bounds, Color(0.12, 0.52, 0.68, 0.48), false, 3.0)
_draw_label(Vector2(-half_size.x + 22.0, -half_size.y + 38.0), "SEKTOR TESTOWY 01 / 5200 × 3600", Color(0.4, 0.7, 0.8, 0.7))
func _draw_label(position: Vector2, text: String, color: Color) -> void:
draw_string(ThemeDB.fallback_font, position, text, HORIZONTAL_ALIGNMENT_LEFT, -1.0, 18, color)