Generowanie pozycji gwiazd
This commit is contained in:
parent
af3becec0b
commit
edd30ea0f4
@ -8,31 +8,55 @@ var owner = null
|
|||||||
var texture = ""
|
var texture = ""
|
||||||
var planets: Array = []
|
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:
|
static func generate_sectors(sector_count: int) -> Array:
|
||||||
var sectors_list: 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):
|
for i in range(sector_count):
|
||||||
var s = SectorData.new()
|
var s = SectorData.new()
|
||||||
s.id = "sector_" + str(i)
|
s.id = "sector_" + str(i)
|
||||||
s.name = ObjectNames.sector_names[randi() % ObjectNames.sector_names.size()]
|
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 pos_ok = false
|
||||||
var new_pos = Vector2.ZERO # <- deklaracja zmiennej przed while
|
var attempts = 0
|
||||||
while not pos_ok:
|
var new_pos = Vector2.ZERO
|
||||||
new_pos = Vector2(randi() % 1000, randi() % 600)
|
|
||||||
|
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
|
pos_ok = true
|
||||||
for existing in sectors_list:
|
for existing in sectors_list:
|
||||||
if existing.position.distance_to(new_pos) < min_distance:
|
if existing.position.distance_to(new_pos) < min_distance:
|
||||||
pos_ok = false
|
pos_ok = false
|
||||||
break
|
break
|
||||||
|
attempts += 1 # Zwiększamy licznik prób
|
||||||
|
if pos_ok:
|
||||||
s.position = new_pos
|
s.position = new_pos
|
||||||
|
|
||||||
s.texture = random_star_texture()
|
|
||||||
s.planets = PlanetData.generate_planets()
|
s.planets = PlanetData.generate_planets()
|
||||||
|
|
||||||
sectors_list.append(s)
|
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
|
return sectors_list
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -20,7 +20,7 @@ func _spawn_sectors(sectors: Array):
|
|||||||
|
|
||||||
# dodaj nazwę pod gwiazdą
|
# dodaj nazwę pod gwiazdą
|
||||||
var name_label2 = Label.new()
|
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)
|
name_label2.position = star.position + Vector2(-20, 40)
|
||||||
add_child(name_label2)
|
add_child(name_label2)
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@ extends Node
|
|||||||
var language = 'pl'
|
var language = 'pl'
|
||||||
var number_of_players = 3
|
var number_of_players = 3
|
||||||
# Liczba sektorów w galaktyce
|
# Liczba sektorów w galaktyce
|
||||||
var sector_count: int = 10
|
var sector_count: int = 4
|
||||||
|
|
||||||
# Minimalna i maksymalna liczba planet w sektorze
|
# Minimalna i maksymalna liczba planet w sektorze
|
||||||
var min_planets_per_sector: int = 1
|
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
|
var max_resource_rich: float = 1.0
|
||||||
|
|
||||||
# Inne parametry świata możesz dodawać tutaj w miarę potrzeb
|
# 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