technologia

This commit is contained in:
Tomasz Boruc 2025-11-10 18:49:50 +01:00
parent e1cb958a43
commit 135a096f06
11 changed files with 303 additions and 10 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dplqsugnrtulx"
path="res://.godot/imported/Mining_Drill.png-965e33f1799d1fcba2eed57398f01552.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/tech/Mining_Drill.png"
dest_files=["res://.godot/imported/Mining_Drill.png-965e33f1799d1fcba2eed57398f01552.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

View File

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b1oq5if3q10cl"
path="res://.godot/imported/hydro_engineering.png-e5e5223033b866912fa52717933d75b4.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/tech/hydro_engineering.png"
dest_files=["res://.godot/imported/hydro_engineering.png-e5e5223033b866912fa52717933d75b4.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=9 format=3 uid="uid://b1vxl6rs5odt1"] [gd_scene load_steps=10 format=3 uid="uid://b1vxl6rs5odt1"]
[ext_resource type="Script" uid="uid://cts6e8xmnqsax" path="res://scripts/galaxy.gd" id="1_jxn3g"] [ext_resource type="Script" uid="uid://cts6e8xmnqsax" path="res://scripts/galaxy.gd" id="1_jxn3g"]
[ext_resource type="PackedScene" uid="uid://bbgymc0drqpbx" path="res://scenes/ui/time_display.tscn" id="3_fmtwf"] [ext_resource type="PackedScene" uid="uid://bbgymc0drqpbx" path="res://scenes/ui/time_display.tscn" id="3_fmtwf"]
@ -8,6 +8,7 @@
[ext_resource type="Script" uid="uid://dpwk3ruw8mx6k" path="res://scripts/background.gd" id="6_xhm0b"] [ext_resource type="Script" uid="uid://dpwk3ruw8mx6k" path="res://scripts/background.gd" id="6_xhm0b"]
[ext_resource type="PackedScene" uid="uid://dgxm8txsiukwf" path="res://scenes/planet_panel.tscn" id="7_xhm0b"] [ext_resource type="PackedScene" uid="uid://dgxm8txsiukwf" path="res://scenes/planet_panel.tscn" id="7_xhm0b"]
[ext_resource type="PackedScene" uid="uid://c405r414rsut2" path="res://scenes/top_panel.tscn" id="8_0pfb5"] [ext_resource type="PackedScene" uid="uid://c405r414rsut2" path="res://scenes/top_panel.tscn" id="8_0pfb5"]
[ext_resource type="PackedScene" uid="uid://bitiuqh8lb0ga" path="res://scenes/tech_panel.tscn" id="9_lwv00"]
[node name="Galaxy" type="Node2D"] [node name="Galaxy" type="Node2D"]
script = ExtResource("1_jxn3g") script = ExtResource("1_jxn3g")
@ -79,3 +80,10 @@ offset_top = -26.0
offset_right = 2022.0 offset_right = 2022.0
offset_bottom = 78.0 offset_bottom = 78.0
size_flags_horizontal = 0 size_flags_horizontal = 0
[node name="TechPanel" parent="UI" instance=ExtResource("9_lwv00")]
visible = false
offset_left = -1023.44006
offset_top = -507.12006
offset_right = -367.44006
offset_bottom = -331.12006

67
scenes/tech_panel.tscn Normal file
View File

@ -0,0 +1,67 @@
[gd_scene load_steps=4 format=3 uid="uid://bitiuqh8lb0ga"]
[ext_resource type="Script" uid="uid://bsdypct22eu23" path="res://scripts/tech_panel.gd" id="1_qc7t1"]
[ext_resource type="FontFile" uid="uid://chk8jrn2ighpx" path="res://assets/fonts/main_font.ttf" id="2_5new4"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_sqypy"]
bg_color = Color(0.69411767, 0.32156864, 0.08235294, 0.37254903)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
border_color = Color(0.7988825, 0.55350196, 0.19976625, 1)
corner_radius_top_left = 2
corner_radius_top_right = 2
corner_radius_bottom_right = 2
corner_radius_bottom_left = 2
[node name="TechPanel" type="Panel"]
anchors_preset = -1
anchor_left = 0.499
anchor_top = 0.37300003
anchor_right = 0.499
anchor_bottom = 0.37300003
offset_left = -612.44006
offset_top = -241.70401
offset_right = 47.559937
offset_bottom = 259.88
grow_vertical = 2
size_flags_horizontal = 0
size_flags_vertical = 0
theme_override_styles/panel = SubResource("StyleBoxFlat_sqypy")
script = ExtResource("1_qc7t1")
[node name="Tech_Label" type="Label" parent="."]
layout_mode = 0
offset_left = 5.0
offset_top = 3.0
offset_right = 393.0
offset_bottom = 24.0
theme_override_fonts/font = ExtResource("2_5new4")
theme_override_font_sizes/font_size = 16
text = "Technologie"
horizontal_alignment = 1
[node name="Technologies" type="GridContainer" parent="."]
layout_mode = 1
anchors_preset = 12
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = 15.0
offset_top = -56.0
offset_right = -11.0
offset_bottom = -8.0
grow_horizontal = 2
grow_vertical = 0
columns = 4
[node name="Button" type="Button" parent="."]
layout_mode = 0
offset_left = 614.0
offset_top = 6.583954
offset_right = 653.0
offset_bottom = 39.167908
text = "X"
[connection signal="pressed" from="Button" to="." method="_on_button_pressed"]

View File

@ -8,7 +8,7 @@ var race: String = "Ludzie"
# Zasoby globalne # Zasoby globalne
var resources := { var resources := {
"iron": 0.0, "iron": 11.0,
"copper": 0.0, "copper": 0.0,
"water": 0.0, "water": 0.0,
"carbon": 0.0, "carbon": 0.0,
@ -27,10 +27,10 @@ var resources := {
"chronite": 0.0, "chronite": 0.0,
} }
var since_doc: float = 0.0 var since_doc: float = 2.0
# Technologie odkryte # Technologie odkryte
var unlocked_techs = ["advanced_mining"] var unlocked_techs = []
# Lista skolonizowanych planet # Lista skolonizowanych planet

View File

@ -5,6 +5,9 @@ extends Node2D
@onready var MenuScene = preload("res://scenes/menu.tscn") @onready var MenuScene = preload("res://scenes/menu.tscn")
@onready var camera = $Camera2D @onready var camera = $Camera2D
@onready var TimeDispaly = $CanvasLayer2 @onready var TimeDispaly = $CanvasLayer2
@onready var tech_button = $UI/TopPanel/HBoxContainer/Technologies
@onready var tech_panel = $UI/TechPanel # to Twoja scena z technologiami
var existing_star_positions: Array[Vector2] = [] var existing_star_positions: Array[Vector2] = []
@ -17,6 +20,16 @@ func _ready():
GameData.game_lunched = true GameData.game_lunched = true
tech_button.connect("pressed", Callable(self, "_on_technologies_button_pressed"))
tech_panel.hide() # domyślnie ukryty
func _on_technologies_button_pressed():
# Przełącz widoczność panelu
tech_panel.visible = not tech_panel.visible
# (Opcjonalnie) odśwież listę technologii za każdym razem, gdy panel się pokazuje
if tech_panel.visible and tech_panel.has_method("_create_technology_buttons"):
tech_panel._create_technology_buttons()
func _process(delta): func _process(delta):
var zoom_level = (camera.zoom.x + camera.zoom.y) / 2.0 var zoom_level = (camera.zoom.x + camera.zoom.y) / 2.0

122
scripts/tech_panel.gd Normal file
View File

@ -0,0 +1,122 @@
extends Panel
@onready var tech_container = $Technologies
# Ścieżka do tekstur technologii (tu możesz dać swoje grafiki)
const DEFAULT_ICON = preload("res://assets/tech/Mining_Drill.png")
func _ready():
_create_technology_buttons()
func _create_technology_buttons():
# Wyczyść stare przyciski
for c in tech_container.get_children():
c.queue_free()
for tech_id in Technologies.TECHNOLOGIES.keys():
var tech = Technologies.TECHNOLOGIES[tech_id]
var btn = TextureButton.new()
# 🔹 Ustaw ikonę technologii z pola "texture"
if tech.has("texture") and tech.texture != "":
btn.texture_normal = load(tech.texture)
else:
# Fallback na domyślną ikonę, jeśli brak tekstury w danych
btn.texture_normal = DEFAULT_ICON
btn.custom_minimum_size = Vector2(96, 96)
btn.stretch_mode = TextureButton.STRETCH_KEEP_ASPECT_CENTERED
# 🔹 Tooltip z opisem i kosztami
var cost_text = ""
for cost_name in tech.cost.keys():
cost_text += "%s: %d " % [tr(cost_name), tech.cost[cost_name]]
btn.tooltip_text = "%s\n%s\n%s %s" % [
tr(tech.name),
tr(tech.description),
tr("Koszt:"),
cost_text.strip_edges()
]
# 🔹 Jeśli gracz już ma tę technologię
if tech_id in PlayerData.unlocked_techs:
btn.modulate = Color(0.6, 0.6, 0.6) # wyszarz
btn.disabled = true
btn.tooltip_text += "\n[✓] " + tr("Odkryta")
# 🔹 Jeśli brakuje wymaganych technologii
elif not _check_requirements(tech.requires):
btn.modulate = Color(0.5, 0.5, 0.5)
btn.disabled = true
btn.tooltip_text += "\n[!] " + tr("Wymagania niespełnione")
else:
# 🔹 Po kliknięciu rozpocznij badanie technologii
btn.connect("pressed", Callable(self, "_on_technology_pressed").bind(tech_id))
tech_container.add_child(btn)
func _check_requirements(requirements: Array) -> bool:
if requirements.is_empty():
return true
for req in requirements:
if req not in PlayerData.unlocked_techs:
return false
return true
func _on_technology_pressed(tech_id):
var tech = Technologies.TECHNOLOGIES[tech_id]
# Jeśli gracz już ma tę technologię — nic nie rób
if tech_id in PlayerData.unlocked_techs:
print("Gracz już ma technologię:", tech_id)
return
# Sprawdź wymagania
for req in tech.requires:
if req not in PlayerData.unlocked_techs:
print("Brak wymaganej technologii:", req)
return
# Sprawdź, czy gracz ma wystarczające zasoby i naukę
for cost_name in tech.cost.keys():
var required_amount = tech.cost[cost_name]
var has_enough = false
if cost_name == "science":
has_enough = PlayerData.since_doc >= required_amount
else:
if PlayerData.resources.has(cost_name):
has_enough = PlayerData.resources[cost_name] >= required_amount
if not has_enough:
print("Brak zasobu:", cost_name)
return
# Odejmij koszty
for cost_name in tech.cost.keys():
if cost_name == "science":
PlayerData.since_doc -= tech.cost[cost_name]
else:
PlayerData.resources[cost_name] -= tech.cost[cost_name]
# Dodaj technologię do odblokowanych
PlayerData.unlocked_techs.append(tech_id)
print("Odblokowano technologię:", tech.name)
# Opcjonalnie: powiadom o zmianach
PlayerData.emit_signal("stats_changed")
_create_technology_buttons()
func _on_button_pressed() -> void:
hide()

View File

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

View File

@ -1,14 +1,15 @@
extends Node extends Node
const TECHNOLOGIES = { const TECHNOLOGIES = {
"advance_mining": { "advanced_mining": {
"name": "Advance Mining", "name": "Advanced Mining",
"description": "Allow mining resources", "description": "Allow mining resources",
"time": 10, "time": 10,
"cost": { "cost": {
"science": 100, "science": 1,
"iron": 50 "iron": 5
}, },
"texture": "res://assets/tech/Mining_Drill.png",
"unlock_effects": { "unlock_effects": {
}, },
@ -20,11 +21,12 @@ const TECHNOLOGIES = {
"description": "Zwiększa wydobycie wody o 15%.", "description": "Zwiększa wydobycie wody o 15%.",
"time": 10, "time": 10,
"cost": { "cost": {
"science": 200 "science": 1
}, },
"texture": "res://assets/tech/hydro_engineering.png",
"unlock_effects": { "unlock_effects": {
"water_efficiency": 1.15 "water_efficiency": 1.15
}, },
"requires": ["bio_dome"] "requires": ["advanced_mining"]
} }
} }