From edd30ea0f4ccccfa5694c956ceaa719cb5ab9e24 Mon Sep 17 00:00:00 2001 From: Tirith Date: Wed, 29 Oct 2025 16:20:40 +0100 Subject: [PATCH] Generowanie pozycji gwiazd --- scripts/SectorData.gd | 48 ++++++++++++++++++++++++++++++++----------- scripts/galaxy.gd | 2 +- scripts/settings.gd | 5 ++++- 3 files changed, 41 insertions(+), 14 deletions(-) diff --git a/scripts/SectorData.gd b/scripts/SectorData.gd index 5df144d..a260f49 100644 --- a/scripts/SectorData.gd +++ b/scripts/SectorData.gd @@ -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 diff --git a/scripts/galaxy.gd b/scripts/galaxy.gd index 7a64a61..650c9c2 100644 --- a/scripts/galaxy.gd +++ b/scripts/galaxy.gd @@ -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) diff --git a/scripts/settings.gd b/scripts/settings.gd index bd3bdce..8029c3b 100644 --- a/scripts/settings.gd +++ b/scripts/settings.gd @@ -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