Generowanie pozycji gwiazd
This commit is contained in:
parent
af3becec0b
commit
edd30ea0f4
@ -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
|
||||
attempts += 1 # Zwiększamy licznik prób
|
||||
if pos_ok:
|
||||
s.position = new_pos
|
||||
|
||||
s.texture = random_star_texture()
|
||||
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.")
|
||||
|
||||
|
||||
return sectors_list
|
||||
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user