From 74b0b412bdc03c598e6ad86a16a42615028d30dd Mon Sep 17 00:00:00 2001 From: Tomasz Boruc Date: Wed, 22 Oct 2025 22:00:13 +0200 Subject: [PATCH] 001-00009 Skalowanie Czcionka w galaxy Dodanie pliku z Settings Losowanie gwiazd nie ma kolizji --- Manager.gd | 65 ++++++++++++++++++++-------------- assets/fonts/font3.ttf | Bin 0 -> 93848 bytes assets/fonts/font3.ttf.import | 36 +++++++++++++++++++ project.godot | 1 + scenes/menu.tscn | 10 +++--- scripts/galaxy.gd | 62 ++++++++++++++++++-------------- scripts/sector.gd | 7 ++-- scripts/settings.gd | 4 +++ scripts/settings.gd.uid | 1 + 9 files changed, 125 insertions(+), 61 deletions(-) create mode 100644 assets/fonts/font3.ttf create mode 100644 assets/fonts/font3.ttf.import create mode 100644 scripts/settings.gd create mode 100644 scripts/settings.gd.uid diff --git a/Manager.gd b/Manager.gd index 4e6ddde..b1916f9 100644 --- a/Manager.gd +++ b/Manager.gd @@ -2,12 +2,15 @@ extends Node # Autoload: Manager # --- KONFIGURACJA --- -@export var SECTOR_COUNT: int = 15 +@export var SECTOR_COUNT: int = 17 @export var PLANETS_PER_SECTOR_RANGE: Vector2 = Vector2(5, 5) -const UPDATE_INTERVAL := 2.0 + +const MIN_DISTANCE = 80.0 # Minimalna odległość (promień) między środkami gwiazd +const MAX_ATTEMPTS = 50 # Maksymalna liczba prób znalezienia miejsca # --- DANE --- var sectors_data: Array = [] # Każdy element: {"name", "position", "planets", "star"} +var placed_star_positions: Array[Vector2] = [] var current_sector: int = -1 # Timer aktualizacji @@ -55,7 +58,7 @@ func _ready(): func _process(delta): update_timer += delta - if update_timer >= UPDATE_INTERVAL: + if update_timer >= Settings.UPDATE_INTERVAL: update_timer = 0.0 _update_planets() @@ -70,24 +73,26 @@ func get_unique_sector_name() -> String: # --- INICJALIZACJA SEKTORÓW --- func _initialize_sectors(): - var screen_size = get_viewport().get_visible_rect().size + for i in range(SECTOR_COUNT): if sectors_data.size() <= i: sectors_data.resize(i + 1) if sectors_data[i] == null: # Pozycja sektora - var pos = Vector2( - randf_range(100, screen_size.x - 200), - randf_range(100, screen_size.y - 200) - ) + var pos = find_safe_position() + if pos != Vector2.ZERO: + print("Udało się znaleźć miejsca dla gwiazdy.") + placed_star_positions.append(pos) + else: + print("Nie udało się znaleźć miejsca dla wszystkich gwiazd.") # Nazwa sektora var name = get_unique_sector_name() # Losowa gwiazda var star_texture = _random_star_texture() - var star_scale = randf_range(0.03, 0.03) + var star_scale = randf_range(0.02, 0.04) # Utworzenie sektora sectors_data[i] = { @@ -189,21 +194,29 @@ func register_planet(sector_index: int, planet_name: String, size: int, mining_r func _random_star_texture() -> String: var id = randi_range(1, 8) return "res://assets/stars/s%d.png" % id + + +func find_safe_position() -> Vector2: + var screen_size = get_viewport().get_visible_rect().size + for attempt in range(MAX_ATTEMPTS): + # 1. Losowanie potencjalnej pozycji w obszarze (zgodnie z Twoimi marginesami) + var potential_pos = Vector2( + randf_range(50, screen_size.x - 50), + randf_range(50, screen_size.y - 50) + ) + + # 2. Sprawdzenie, czy pozycja jest bezpieczna + if is_position_safe(potential_pos): + return potential_pos # Znaleziono bezpieczną pozycję! + + # 3. Jeśli po MAX_ATTEMPTS nie znaleziono miejsca + print("Osiągnięto limit prób, nie można znaleźć bezpiecznego miejsca.") + return Vector2.ZERO # Zwróć zero, aby zasygnalizować błąd + +func is_position_safe(potential_pos: Vector2) -> bool: + for existing_pos in placed_star_positions: + var distance = potential_pos.distance_to(existing_pos) + if distance < MIN_DISTANCE: + return false # Kolizja znaleziona + return true # Brak kolizji z żadną istniejącą gwiazdą -func generate_non_overlapping_position(existing_positions: Array, min_distance: float, screen_size: Vector2) -> Vector2: - var pos: Vector2 - var attempts = 0 - while true: - pos = Vector2( - randf_range(100, screen_size.x - 200), - randf_range(100, screen_size.y - 200) - ) - var overlap = false - for other in existing_positions: - if pos.distance_to(other) < min_distance: - overlap = true - break - attempts += 1 - if not overlap or attempts > 100: - break - return pos diff --git a/assets/fonts/font3.ttf b/assets/fonts/font3.ttf new file mode 100644 index 0000000000000000000000000000000000000000..3aeaae84a66dd4a184b277c857c241d9a8f863c5 GIT binary patch literal 93848 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 S&U7r(pxBB(wLOIP^!f!*GI3%6 literal 0 HcmV?d00001 diff --git a/assets/fonts/font3.ttf.import b/assets/fonts/font3.ttf.import new file mode 100644 index 0000000..3dffc10 --- /dev/null +++ b/assets/fonts/font3.ttf.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://choploj3iec0a" +path="res://.godot/imported/font3.ttf-2cd23d8fac261e9271189c108512bad4.fontdata" + +[deps] + +source_file="res://assets/fonts/font3.ttf" +dest_files=["res://.godot/imported/font3.ttf-2cd23d8fac261e9271189c108512bad4.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +disable_embedded_bitmaps=true +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +allow_system_fallback=true +force_autohinter=false +modulate_color_glyphs=false +hinting=1 +subpixel_positioning=4 +keep_rounding_remainders=true +oversampling=0.0 +Fallbacks=null +fallbacks=[] +Compress=null +compress=true +preload=[] +language_support={} +script_support={} +opentype_features={} diff --git a/project.godot b/project.godot index c0e1a9f..165aa96 100644 --- a/project.godot +++ b/project.godot @@ -19,6 +19,7 @@ config/icon="res://icon.svg" Manager="*res://Manager.gd" MusicManager="*res://music_manager.gd" +Settings="*res://scripts/settings.gd" [display] diff --git a/scenes/menu.tscn b/scenes/menu.tscn index cacfa99..3431c79 100644 --- a/scenes/menu.tscn +++ b/scenes/menu.tscn @@ -39,12 +39,12 @@ layout_mode = 1 anchors_preset = 2 anchor_top = 1.0 anchor_bottom = 1.0 -offset_left = 23.999998 -offset_top = -238.00006 -offset_right = 474.0 -offset_bottom = 388.0 +offset_left = 14.0 +offset_top = -186.0 +offset_right = 464.0 +offset_bottom = 420.66687 grow_vertical = 0 -scale = Vector2(0.4, 0.4) +scale = Vector2(0.3, 0.3) [node name="start" type="TextureButton" parent="VBoxContainer"] layout_mode = 2 diff --git a/scripts/galaxy.gd b/scripts/galaxy.gd index 9fe5d72..32b66a5 100644 --- a/scripts/galaxy.gd +++ b/scripts/galaxy.gd @@ -9,47 +9,57 @@ func _ready(): # --- TWORZENIE GWIAZD SEKTORÓW --- const GLOBAL_STAR_REDUCTION = 0.45 # Zmniejsza gwiazdy do 65% oryginalnego rozmiaru +const FONT_PATH := "res://assets/fonts/font3.ttf" func _create_sector_buttons(): for child in container.get_children(): child.queue_free() + var font = load(FONT_PATH) + for i in range(Manager.SECTOR_COUNT): var sector_info = Manager.get_sector(i) - + var button = TextureButton.new() button.texture_normal = load(sector_info["star"]["texture_path"]) button.stretch_mode = TextureButton.STRETCH_KEEP_ASPECT_CENTERED - - # Skala zapisanej gwiazdy - var star_scale = sector_info["star"]["scale"] - var final_scale = star_scale * GLOBAL_STAR_REDUCTION - button.scale = Vector2(final_scale, final_scale) - - # Pozycja z Managera + + # Skala gwiazdy + var star_scale = sector_info["star"]["scale"] * GLOBAL_STAR_REDUCTION + button.scale = Vector2(star_scale, star_scale) button.position = sector_info["position"] + print(button.scale) + # --- Podpis sektora --- + var label = Label.new() + label.text = sector_info["name"] + label.add_theme_font_override("font", font) + label.scale = Vector2(1 / star_scale, 1 / star_scale) + # Ustawienie grubości konturu + label.add_theme_constant_override("outline_size", 2) # Grubość konturu 2px - # Podpis sektora - var sector_label = Label.new() - sector_label.text = sector_info["name"] - sector_label.modulate = Color(0.979, 0.808, 0.764, 1.0) # czerwony - #sector_label.scale = Vector2(0.5, 0.5) # ignoruje skalę gwiazdy +# Ustawienie koloru konturu + label.add_theme_color_override("font_outline_color", Color.BLACK) - sector_label.add_theme_font_size_override("font_size", 600) # malutki podpis - sector_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER - sector_label.position = Vector2(-1002, -650) + label.add_theme_font_size_override("font_size", 9) + label.modulate = Color(0.887, 0.867, 0.836, 1.0) + label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER + label.vertical_alignment = VERTICAL_ALIGNMENT_CENTER - # 🔹 Ustawienie czcionki: - # ✅ Poprawne ładowanie czcionki - var font = load("res://assets/fonts/font2.ttf") - sector_label.add_theme_font_override("font", font) - - button.add_child(sector_label) + # umieszczamy labelkę POD gwiazdą (np. 60 px niżej) + var button_width = button.size.x + var button_height = button.size.y - var index = i - button.pressed.connect(func() -> void: - _on_sector_selected(index) +# ... reszta kodu do centrowania i pozycjonowania + + label.position = Vector2( + button_width / 2 - label.get_rect().size.x / 2, # Centrujemy względem X + button_height + 60 # 60 jednostek poniżej dolnej krawędzi przycisku ) - + + button.add_child(label) + + var index = i + button.pressed.connect(func(): _on_sector_selected(index)) + container.add_child(button) # --- WYBRANIE SEKTORA --- diff --git a/scripts/sector.gd b/scripts/sector.gd index dac835e..4133899 100644 --- a/scripts/sector.gd +++ b/scripts/sector.gd @@ -5,8 +5,7 @@ var PlanetScene = preload("res://scenes/planet.tscn") @onready var PlanetStatPanel = $PlanetStatPanel @onready var BackButton: TextureButton = $BackButton -var ORBIT_STEP = 60 -const FIRST_ORBIT_STEP = 80 + var tracked_planet: Node = null func _ready(): @@ -61,9 +60,9 @@ func spawn_planets(): planet_node.data = planet_data planet_node.orbit_center = center if i == 0: - planet_node.orbit_radius = planet_data.get("orbit_radius", FIRST_ORBIT_STEP * (i + 1)) + planet_node.orbit_radius = planet_data.get("orbit_radius", Settings.FIRST_ORBIT_STEP * (i + 1)) else: - planet_node.orbit_radius = planet_data.get("orbit_radius", ORBIT_STEP * (i + 1)) + planet_node.orbit_radius = planet_data.get("orbit_radius", Settings.ORBIT_STEP * (i + 1)) planet_node.angle = planet_data.get("angle", randf() * TAU) planet_node.rotation_speed = planet_data.get("rotation_speed", randf_range(0.00001, 1)) diff --git a/scripts/settings.gd b/scripts/settings.gd new file mode 100644 index 0000000..52a6684 --- /dev/null +++ b/scripts/settings.gd @@ -0,0 +1,4 @@ +extends Node +const UPDATE_INTERVAL := 30.0 #Cykl w sekundach +var ORBIT_STEP = 60 #odległośc miedzy orbitami +const FIRST_ORBIT_STEP = 80 #pierwsza planeta od gwiazdy diff --git a/scripts/settings.gd.uid b/scripts/settings.gd.uid new file mode 100644 index 0000000..d5ce245 --- /dev/null +++ b/scripts/settings.gd.uid @@ -0,0 +1 @@ +uid://drqjlcgywn2db