Drag panel, occupy ssytem

This commit is contained in:
Tomasz Boruc 2025-11-10 20:45:40 +01:00
parent 135a096f06
commit eef7ce0677
17 changed files with 279 additions and 18 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

View File

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://w5towk2sfjfo"
path="res://.godot/imported/terraforming.png-1954eff5d8d95abd1e9b21927440fa2d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/tech/terraforming.png"
dest_files=["res://.godot/imported/terraforming.png-1954eff5d8d95abd1e9b21927440fa2d.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

@ -77,13 +77,12 @@ offset_bottom = -1384.0
[node name="TopPanel" parent="UI" instance=ExtResource("8_0pfb5")] [node name="TopPanel" parent="UI" instance=ExtResource("8_0pfb5")]
offset_left = -18.0 offset_left = -18.0
offset_top = -26.0 offset_top = -26.0
offset_right = 2022.0 offset_right = 1574.0
offset_bottom = 78.0 offset_bottom = 142.0
size_flags_horizontal = 0 size_flags_horizontal = 0
[node name="TechPanel" parent="UI" instance=ExtResource("9_lwv00")] [node name="TechPanel" parent="UI" instance=ExtResource("9_lwv00")]
visible = false offset_left = -1031.4401
offset_left = -1023.44006 offset_top = -379.12006
offset_top = -507.12006 offset_right = -375.44006
offset_right = -367.44006 offset_bottom = -203.12006
offset_bottom = -331.12006

View File

@ -1,10 +1,13 @@
[gd_scene load_steps=5 format=3 uid="uid://cvc0brcqh2rhu"] [gd_scene load_steps=6 format=3 uid="uid://cvc0brcqh2rhu"]
[ext_resource type="Script" uid="uid://c7l387xor12hx" path="res://scripts/star.gd" id="1_mcqwg"] [ext_resource type="Script" uid="uid://c7l387xor12hx" path="res://scripts/star.gd" id="1_mcqwg"]
[ext_resource type="Texture2D" uid="uid://dsfxgajg3jodv" path="res://assets/stars/s3.png" id="2_8d8bx"] [ext_resource type="Texture2D" uid="uid://dsfxgajg3jodv" path="res://assets/stars/s3.png" id="2_8d8bx"]
[ext_resource type="Script" uid="uid://bgghdcbxp6o0k" path="res://scripts/star_sprite.gd" id="3_ef0hr"] [ext_resource type="Script" uid="uid://bgghdcbxp6o0k" path="res://scripts/star_sprite.gd" id="3_ef0hr"]
[ext_resource type="FontFile" uid="uid://chk8jrn2ighpx" path="res://assets/fonts/main_font.ttf" id="4_8d8bx"] [ext_resource type="FontFile" uid="uid://chk8jrn2ighpx" path="res://assets/fonts/main_font.ttf" id="4_8d8bx"]
[sub_resource type="CircleShape2D" id="CircleShape2D_8d8bx"]
radius = 614.64
[node name="Star" type="Node2D"] [node name="Star" type="Node2D"]
script = ExtResource("1_mcqwg") script = ExtResource("1_mcqwg")
@ -13,6 +16,11 @@ scale = Vector2(0.0371471, 0.0371471)
texture = ExtResource("2_8d8bx") texture = ExtResource("2_8d8bx")
script = ExtResource("3_ef0hr") script = ExtResource("3_ef0hr")
[node name="Area2D" type="Area2D" parent="Sprite2D"]
[node name="CollisionShape2D" type="CollisionShape2D" parent="Sprite2D/Area2D"]
shape = SubResource("CircleShape2D_8d8bx")
[node name="Label" type="Label" parent="."] [node name="Label" type="Label" parent="."]
offset_left = -53.0 offset_left = -53.0
offset_top = 34.0 offset_top = 34.0

9
scenes/station.tscn Normal file
View File

@ -0,0 +1,9 @@
[gd_scene load_steps=2 format=3 uid="uid://bhuvrdvcm6exi"]
[ext_resource type="Texture2D" uid="uid://c1npf2gngyyxp" path="res://assets/buildings/starbase.png" id="1_rod8h"]
[node name="Station" type="Node2D"]
[node name="Sprite2D" type="Sprite2D" parent="."]
scale = Vector2(0.023437498, 0.023437498)
texture = ExtResource("1_rod8h")

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

@ -19,15 +19,17 @@ theme_override_constants/separation = 10
layout_mode = 2 layout_mode = 2
text = "Player name" text = "Player name"
[node name="IronLabel" type="Label" parent="HBoxContainer"] [node name="ResLabel" type="Label" parent="HBoxContainer"]
layout_mode = 2 layout_mode = 2
text = "ddfdf" text = "ddfdf"
[node name="WaterLabel" type="Label" parent="HBoxContainer"] [node name="WaterLabel" type="Label" parent="HBoxContainer"]
visible = false
layout_mode = 2 layout_mode = 2
text = "ddfdf" text = "ddfdf"
[node name="CopperLabel" type="Label" parent="HBoxContainer"] [node name="CopperLabel" type="Label" parent="HBoxContainer"]
visible = false
layout_mode = 2 layout_mode = 2
text = "ddfdf" text = "ddfdf"
@ -36,5 +38,6 @@ layout_mode = 2
text = "Technologies" text = "Technologies"
[node name="SinceLabel" type="Label" parent="HBoxContainer"] [node name="SinceLabel" type="Label" parent="HBoxContainer"]
visible = false
layout_mode = 2 layout_mode = 2
text = "ddfdf" text = "ddfdf"

View File

@ -0,0 +1,43 @@
[gd_scene load_steps=2 format=3 uid="uid://c405r414rsut2"]
[ext_resource type="Script" uid="uid://c5s1b0ctj8pvl" path="res://scripts/top_panel.gd" id="1_85l1y"]
[node name="TopPanel" type="Control"]
layout_mode = 3
anchors_preset = 0
offset_right = 40.0
offset_bottom = 40.0
script = ExtResource("1_85l1y")
[node name="HBoxContainer" type="HBoxContainer" parent="."]
layout_mode = 0
offset_right = 40.0
offset_bottom = 40.0
theme_override_constants/separation = 10
[node name="PlayerName" type="Label" parent="HBoxContainer"]
layout_mode = 2
text = "Player name"
[node name="ResLabel" type="Label" parent="HBoxContainer"]
layout_mode = 2
text = "ddfdf"
[node name="WaterLabel" type="Label" parent="HBoxContainer"]
visible = false
layout_mode = 2
text = "ddfdf"
[node name="CopperLabel" type="Label" parent="HBoxContainer"]
visible = false
layout_mode = 2
text = "ddfdf"
[node name="Technologies" type="Button" parent="HBoxContainer"]
layout_mode = 2
text = "Technologies"
[node name="SinceLabel" type="Label" parent="HBoxContainer"]
visible = false
layout_mode = 2
text = "ddfdf"

View File

@ -71,7 +71,7 @@ var BUILDINGS = {
"cost": {"iron": 10}, "cost": {"iron": 10},
"build_time": 5.0, "build_time": 5.0,
"texture": "res://assets/buildings/terraforming_center.png", "texture": "res://assets/buildings/terraforming_center.png",
"required_tech": null "required_tech": "terraforming"
}, },
"laboratory": { "laboratory": {
"name": "Laboratory", "name": "Laboratory",
@ -84,6 +84,17 @@ var BUILDINGS = {
"build_time": 5.0, "build_time": 5.0,
"texture": "res://assets/buildings/labolatory.png", "texture": "res://assets/buildings/labolatory.png",
"required_tech": null "required_tech": null
},
"aluminium_ore_mine": {
"name": "Aluminium ore mine",
"description": "Wydobywa boksyt.",
"resource": "aluminium",
"cost": {"iron": 100, "copper": 100},
"bonuses": {"biosfere": 0.1},
"build_time": 15.0,
"texture": "res://assets/buildings/aluminium_ore_mine.png",
"required_tech": "advanced_mining"
} }
} }

View File

@ -24,3 +24,4 @@ func format_number(num: int) -> String:
if count % 3 == 0 and i != 0: if count % 3 == 0 and i != 0:
result = "." + result result = "." + result
return result return result

View File

@ -60,7 +60,7 @@ func _generate_galaxy(count: int):
for j in range(star.planet_count): for j in range(star.planet_count):
var planet = PlanetScene.instantiate() var planet = PlanetScene.instantiate()
planet.pname = Names.planet_names[randi() % Names.planet_names.size()] planet.pname = Names.planet_names[randi() % Names.planet_names.size()]
planet.orbit_radius = 55 + j * 40 planet.orbit_radius = 65 + j * 40
planet.orbit_speed = randf_range(0.004, 0.01) planet.orbit_speed = randf_range(0.004, 0.01)
planet.since_potential = 0.1 + (2.0 - 0.1) * pow(randf(), 4.0) planet.since_potential = 0.1 + (2.0 - 0.1) * pow(randf(), 4.0)
planet.size = randi_range(1, 3) planet.size = randi_range(1, 3)

View File

@ -5,6 +5,22 @@ extends Panel
@onready var buildings_container = $Buildings @onready var buildings_container = $Buildings
@onready var send_button = $SendButton @onready var send_button = $SendButton
var dragging := false
var drag_offset := Vector2.ZERO
func _gui_input(event):
if event is InputEventMouseButton:
if event.button_index == MOUSE_BUTTON_LEFT:
if event.pressed:
# Kliknięto na panel → zaczynamy drag
dragging = true
drag_offset = get_local_mouse_position()
else:
# Zwolniono przycisk → kończymy drag
dragging = false
elif event is InputEventMouseMotion and dragging:
# Przesuwamy panel względem pozycji myszy
position += event.relative
func _ready(): func _ready():
send_button.connect("pressed", Callable(self, "_on_send_resources_pressed")) send_button.connect("pressed", Callable(self, "_on_send_resources_pressed"))

View File

@ -15,7 +15,7 @@ const MARGIN: float = 50.0
var NUMBER_OF_SYSTEMS: int = 100 var NUMBER_OF_SYSTEMS: int = 100
#Ilosc systemów #Ilosc systemów
var min_planet = 1 var min_planet = 1
var max_planet = 7 var max_planet = 5
#Zmiana upływu czasu #Zmiana upływu czasu
#var TIME_SCALE = 1 #var TIME_SCALE = 1

View File

@ -6,6 +6,11 @@ class_name Star
@export var thickness: float = 0.5 # Grubość linii konturu @export var thickness: float = 0.5 # Grubość linii konturu
@export var segments: int = 64 @export var segments: int = 64
@onready var label = $Label @onready var label = $Label
@onready var system_owner = ""
@onready var station_scene = preload("res://scenes/Station.tscn") # scena stacji kosmicznej
var has_station: bool = false
var station_sprite: Sprite2D = null
@export var star_name: String = "" @export var star_name: String = ""
@export var planet_count: int = 0 @export var planet_count: int = 0
var planets: Array = [] var planets: Array = []
@ -14,7 +19,8 @@ var texture: Texture2D
func _ready(): func _ready():
#print("Gwiazda %s z %d planetami" % [star_name, planet_count]) #print("Gwiazda %s z %d planetami" % [star_name, planet_count])
label.text = star_name label.text = star_name
var area = $Sprite2D/Area2D
area.connect("input_event", Callable(self, "_on_area_input"))
# Stała do rysowania pełnego okręgu # Stała do rysowania pełnego okręgu
const TAU = 6.2831853 # 2 * PI const TAU = 6.2831853 # 2 * PI
@ -31,3 +37,19 @@ func _draw():
color, color,
thickness thickness
) )
func _on_area_input(viewport, event, shape_idx):
if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT and event.pressed:
capture_system(PlayerData.PlayerName)
print("System przejęty przez:", system_owner)
func capture_system(player_name: String) -> void:
if system_owner != "":
return # już przejęty
system_owner = player_name
# Dodaj stację kosmiczną obok gwiazdy
var station = station_scene.instantiate()
station.position = position + Vector2(35, 0) # obok gwiazdy
label.add_theme_color_override("font_color", Color(0.788, 0.332, 0.196, 1.0))
get_parent().add_child(station)

View File

@ -7,6 +7,23 @@ extends Panel
# Ścieżka do tekstur technologii (tu możesz dać swoje grafiki) # Ścieżka do tekstur technologii (tu możesz dać swoje grafiki)
const DEFAULT_ICON = preload("res://assets/tech/Mining_Drill.png") const DEFAULT_ICON = preload("res://assets/tech/Mining_Drill.png")
var dragging := false
var drag_offset := Vector2.ZERO
func _gui_input(event):
if event is InputEventMouseButton:
if event.button_index == MOUSE_BUTTON_LEFT:
if event.pressed:
# Kliknięto na panel → zaczynamy drag
dragging = true
drag_offset = get_local_mouse_position()
else:
# Zwolniono przycisk → kończymy drag
dragging = false
elif event is InputEventMouseMotion and dragging:
# Przesuwamy panel względem pozycji myszy
position += event.relative
func _ready(): func _ready():
_create_technology_buttons() _create_technology_buttons()

View File

@ -28,5 +28,20 @@ const TECHNOLOGIES = {
"water_efficiency": 1.15 "water_efficiency": 1.15
}, },
"requires": ["advanced_mining"] "requires": ["advanced_mining"]
},
"terraforming": {
"name": "Terraforming",
"description": "Allow terreforming planet",
"time": 10,
"cost": {
"science": 10,
"iron": 5,
"aluminium":10
},
"texture": "res://assets/tech/terraforming.png",
"unlock_effects": {
"water_efficiency": 1.15
},
"requires": ["hydro_engineering"]
} }
} }

View File

@ -2,7 +2,7 @@ extends Control
@onready var label_player_name = $HBoxContainer/PlayerName @onready var label_player_name = $HBoxContainer/PlayerName
#@onready var label_science = $HBoxContainer/LabelScience #@onready var label_science = $HBoxContainer/LabelScience
@onready var label_iron = $HBoxContainer/IronLabel @onready var ResLabel = $HBoxContainer/ResLabel
@onready var label_water = $HBoxContainer/WaterLabel @onready var label_water = $HBoxContainer/WaterLabel
@onready var label_copper = $HBoxContainer/CopperLabel @onready var label_copper = $HBoxContainer/CopperLabel
@onready var label_since = $HBoxContainer/SinceLabel @onready var label_since = $HBoxContainer/SinceLabel
@ -13,10 +13,20 @@ func update_info():
label_player_name.text = "Gracz: %s" % PlayerData.PlayerName label_player_name.text = "Gracz: %s" % PlayerData.PlayerName
#label_science.text = "🔬 Nauka: %s" % player.science #label_science.text = "🔬 Nauka: %s" % player.science
label_iron.text = "%s: %.2f" % [tr("iron"), PlayerData.resources.iron] var text = ""
label_water.text = "%s: %.2f" % [tr("water"), PlayerData.resources.water]
label_copper.text = "%s: %.2f" % [tr("copper"), PlayerData.resources.copper] for res_name in PlayerData.resources.keys():
label_since.text = "%s: %.2f" % [tr("since"), PlayerData.since_doc] var amount = PlayerData.resources[res_name]
# Pomiń surowce zerowe jeśli chcesz
if amount == 0:
continue
text += "%s: %.2f " % [tr(res_name.capitalize()), amount]
# Dodaj też since_doc
text += "\n%s: %.2f" % [tr("since"), PlayerData.since_doc]
# Przypisz do jednego labelka
ResLabel.text = text
#label_population.text = "👥 Populacja: %s" % GameData.format_number(player.total_population) #label_population.text = "👥 Populacja: %s" % GameData.format_number(player.total_population)