Rozbudowa schematów danych

This commit is contained in:
Tomasz Boruc 2025-10-27 20:33:21 +01:00
parent 2454f80cf5
commit 05b77d6737
6 changed files with 111 additions and 66 deletions

View File

@ -1,66 +1,45 @@
extends Node
# Podstawowe dane gry
var player_data = null
var sectors = []
var fleets = []
var sectors: Array = []
# Funkcja inicjalizująca dane nowej gry
func new_game():
print("🔹 Tworzenie nowej gry...")
player_data = null
sectors.clear()
fleets.clear()
func generate_sectors(sector_count: int = 10):
sectors.clear()
for i in range(sector_count):
# Tworzymy sektor
var s = SectorData.new()
s.id = "sector_" + str(i)
s.name = ObjectNames.sector_names[randi() % ObjectNames.sector_names.size()]
s.position = Vector2(randi() % 1000, randi() % 600)
# Losowa liczba planet (1-5)
var planet_count = randi_range(Settings.min_planets_per_sector, Settings.max_planets_per_sector )
var planet_size = randi_range(Settings.min_planet_size, Settings.max_planet_size)
for j in range(planet_count):
var p = PlanetData.new()
p.name = ObjectNames.planet_names[randi() % ObjectNames.planet_names.size()]
p.size = planet_size # rozmiar 50-200
p.rotation_speed = randf() * 5 # prędkość obrotu 0-5
p.biosfere = randf() # 0.0 - 1.0
p.orbit_radius = randi() % 200 + 50 # 50-250
p.resource_rich = randf() # 0.0 - 1.0
# Generowanie surowców dla planety
p.resources.clear()
for res_name in ObjectNames.resources:
var r = ResourcesData.new()
r.name = res_name
r.exist = randi() % 2 == 0 # 50% szans, że surowiec wystąpi
#r.amount = (randi() % 200 + 50) if r.exist else 0 # jeśli istnieje, losowa ilość
p.resources.append(r)
s.planets.append(p)
# Dodajemy sektor do listy GameData
sectors.append(s)
func _ready():
generate_sectors(Settings.sector_count)
player_data.clear()
player_data = PlayerData.generate_players(Settings.number_of_players)
sectors = SectorData.generate_sectors(Settings.sector_count) #planety i reszta losuje sie wewnatrz kolejnych funkcji
# Przyznajmy pierwszą planetę pierwszego sektora graczowi
var first_planet = sectors[0].planets[0]
player_data[0].owned_planets.append(first_planet)
sectors[0].owner = player_data[0] # ustaw właściciela sektora, jeśli potrzebne
print_game_state()
func print_game_state():
for s in sectors:
print("Sektor:", s.name, "ID:", s.id, "Pozycja:", s.position, "Planety:", s.planets.size())
for p in s.planets:
print(" Planeta:", p.name,
" Rozmiar: ", p.size,
" Orbit: ", p.orbit_radius,
" Rotation: ", round(p.rotation_speed*100)/100,
" Biosfere: ", round(p.biosfere*100)/100,
" Resource Rich: ", round(p.resource_rich*100)/100)
for res in p.resources:
if res.exist:
print(" Surowiec:", res.name)
print(" Planeta:", p.name, "Rozmiar:", p.size, "Orbit:", p.orbit_radius, "Rotation:", round(p.rotation_speed*100)/100,
"Biosfere:", round(p.biosfere*100)/100, "Resource Rich:", round(p.resource_rich*100)/100)
for r in p.resources:
if r.exist:
print(" Surowiec:", r.name)
for p in player_data[0].owned_planets:
print("Gracz posiada planetę:", p.name, player_data[0].name)
for i in range(player_data.size()):
var p = player_data[i]
var player_type = "AI" if p.is_ai else "Human"
print("Gracz", i + 1, ":", p.name, "(", player_type, ")")
print(" Kredyty:", p.credits)
if p.owned_planets.size() > 0:
print(" Planety:")
for planet in p.owned_planets:
print(" -", planet.name)
else:
print(" Brak planet")
func _ready():
new_game()

View File

@ -4,8 +4,35 @@ class_name PlanetData
var name = ""
var size = 1
var rotation_speed = 1
var biosfere = 1.0 # 0.0 - 1.0
var owner = null # PlayerData lub AI
var orbit_radius = 1.0 # odległość od gwiazdy
var resource_rich = 1.0 #bogatość surowócw 0-1
var biosfere = 1.0
var orbit_radius = 1.0
var resource_rich = 1.0
var owner = null
var resources: Array = []
# Funkcja statyczna generująca listę planet
static func generate_planets() -> Array:
var planets_list: Array = []
var planet_count = randi_range(Settings.min_planets_per_sector, Settings.max_planets_per_sector)
for i in range(planet_count):
var p = PlanetData.new()
p.name = ObjectNames.planet_names[randi() % ObjectNames.planet_names.size()]
p.generate_properties()
planets_list.append(p)
return planets_list
# Generowanie właściwości jednej planety i surowców
func generate_properties():
size = randi_range(Settings.min_planet_size, Settings.max_planet_size)
rotation_speed = randf_range(Settings.min_rotation_speed, Settings.max_rotation_speed)
biosfere = randf_range(Settings.min_biosfere, Settings.max_biosfere)
orbit_radius = randi_range(Settings.min_orbit_radius, Settings.max_orbit_radius)
resource_rich = randf_range(Settings.min_resource_rich, Settings.max_resource_rich)
resources.clear()
for res_name in ObjectNames.resources:
var r = ResourcesData.new()
r.name = res_name
r.exist = randi() % 2 == 0
#r.amount = r.exist ? randi_range(50, 200) : 0
resources.append(r)

28
scripts/PlayerData.gd Normal file
View File

@ -0,0 +1,28 @@
extends Resource
class_name PlayerData
var name: String = "Gracz"
var is_ai: bool = false # czy gracz jest botem
var credits: int = 1000
var fleets: Array = [] # lista statków gracza
var technologies: Array = [] # lista odkrytych technologii
var owned_planets: Array = [] # planety należące do gracza
var owned_sectors: Array = [] # sektory należące do gracza
static func generate_players(player_count: int = 1) -> Array:
var players_list: Array = []
for i in range(player_count):
var player = PlayerData.new()
if i==0:
player.name = "Gracz Tirith"
player.credits = 1000
player.is_ai = false
players_list.append(player)
else:
player.name = "Gracz" + str(i+1)
player.credits = 1000
player.is_ai = true
players_list.append(player)
return players_list

View File

@ -0,0 +1 @@
uid://bvcecdv1r6plv

View File

@ -1,13 +1,23 @@
extends Resource
class_name SectorData
# Unikalne ID sektora
var id = ""
# Nazwa sektora
var name = ""
# Pozycja na mapie galaktyki (np. do wyświetlenia w UI)
var position = Vector2.ZERO
# Właściciel sektora (gracz lub AI), null jeśli nie zajęty
var owner = null
# Lista planet w sektorze
var planets = []
var planets: Array = []
# Funkcja statyczna tworząca listę sektorów
static func generate_sectors(sector_count: int) -> Array:
var sectors_list: Array = []
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.position = Vector2(randi() % 1000, randi() % 600)
# Generujemy planety dla tego sektora
s.planets = PlanetData.generate_planets()
sectors_list.append(s)
return sectors_list

View File

@ -1,6 +1,6 @@
extends Node
var number_of_players = 3
# Liczba sektorów w galaktyce
var sector_count: int = 3