Generowanie pozycji gwiazd

This commit is contained in:
Tirith 2025-10-29 16:20:40 +01:00
parent af3becec0b
commit edd30ea0f4
3 changed files with 41 additions and 14 deletions

View File

@ -8,31 +8,55 @@ var owner = null
var texture = ""
var planets: Array = []
# Funkcja statyczna tworząca listę sektorów
# Stałe definiujące ograniczenia generacji
const MAX_ATTEMPTS = 3 # Maksymalna liczba prób znalezienia pozycji dla pojedynczego sektora
const MARGIN = 50 # Margines od krawędzi powierzchni losowania
static func generate_sectors(sector_count: int) -> Array:
var sectors_list: Array = []
var min_distance = 100 # minimalna odległość między sektorami
var min_distance = 100
# Zakładam, że Settings.x i Settings.y przechowują szerokość i wysokość mapy
var map_width = Settings.x
var map_height = Settings.y
# Określenie zakresu losowania, uwzględniającego margines
var min_x = MARGIN
var max_x = map_width - MARGIN
var min_y = MARGIN
var max_y = map_height - MARGIN
# Sprawdzenie minimalne, czy obszar losowania jest wystarczająco duży
if max_x <= min_x or max_y <= min_y:
push_error("BŁĄD GENERACJI: Margines jest zbyt duży dla wymiarów mapy.")
return []
for i in range(sector_count):
var s = SectorData.new()
s.id = "sector_" + str(i)
s.name = ObjectNames.sector_names[randi() % ObjectNames.sector_names.size()]
s.texture = random_star_texture()
# --- LOGIKA ZAPOBIEGANIA ZAPĘTLENIU I MARGINESÓW ---
var pos_ok = false
var new_pos = Vector2.ZERO # <- deklaracja zmiennej przed while
while not pos_ok:
new_pos = Vector2(randi() % 1000, randi() % 600)
var attempts = 0
var new_pos = Vector2.ZERO
while not pos_ok and attempts < MAX_ATTEMPTS: # 1. Ograniczenie pętli
new_pos.x = randf_range(min_x, max_x)
new_pos.y = randf_range(min_y, max_y)
pos_ok = true
for existing in sectors_list:
if existing.position.distance_to(new_pos) < min_distance:
pos_ok = false
break
s.position = new_pos
attempts += 1 # Zwiększamy licznik prób
if pos_ok:
s.position = new_pos
s.planets = PlanetData.generate_planets()
sectors_list.append(s)
else:
push_warning("Nie udało się znaleźć unikalnej pozycji dla sektora " + str(i) + " po " + str(MAX_ATTEMPTS) + " próbach.")
s.texture = random_star_texture()
s.planets = PlanetData.generate_planets()
sectors_list.append(s)
return sectors_list

View File

@ -20,7 +20,7 @@ func _spawn_sectors(sectors: Array):
# dodaj nazwę pod gwiazdą
var name_label2 = Label.new()
name_label2.text = sector.id
name_label2.text = sector.planets[0].name
name_label2.position = star.position + Vector2(-20, 40)
add_child(name_label2)

View File

@ -2,7 +2,7 @@ extends Node
var language = 'pl'
var number_of_players = 3
# Liczba sektorów w galaktyce
var sector_count: int = 10
var sector_count: int = 4
# Minimalna i maksymalna liczba planet w sektorze
var min_planets_per_sector: int = 1
@ -29,3 +29,6 @@ var min_resource_rich: float = 0.1
var max_resource_rich: float = 1.0
# Inne parametry świata możesz dodawać tutaj w miarę potrzeb
#Granice galaktyki
var x = 500
var y = 500