From 01246b92db8f5f759f8c1b0cdd3cb1e846e82214 Mon Sep 17 00:00:00 2001 From: Dendy Faist Date: Thu, 5 Mar 2026 23:44:32 +0100 Subject: [PATCH] feat: Basic xenia shop implementation --- chunk.tscn | 3 -- player.gd | 3 ++ player.tscn | 5 +++- shop.gd | 63 +++++++++++++++++++++++++---------------- shop.tscn | 18 ++++++++++++ special_upgrades.gd | 21 ++++++++++++++ special_upgrades.gd.uid | 1 + special_upgrades.tscn | 24 ++++++++++++++++ station.tscn | 2 ++ upgrades.gd | 6 ---- 10 files changed, 112 insertions(+), 34 deletions(-) create mode 100644 special_upgrades.gd create mode 100644 special_upgrades.gd.uid create mode 100644 special_upgrades.tscn diff --git a/chunk.tscn b/chunk.tscn index 6679a0f..f8378d3 100644 --- a/chunk.tscn +++ b/chunk.tscn @@ -95,7 +95,6 @@ transform = Transform3D(0.9133367, 0, 0, 0, 0.9133367, 0, 0, 0, 0.9133367, -4.90 mesh = SubResource("BoxMesh_381vs") [node name="B_area_E" type="StaticBody3D" parent="BuildingAreas" unique_id=164651542] -visible = false [node name="Collision" type="CollisionShape3D" parent="BuildingAreas/B_area_E" unique_id=2080946797] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 47.5, 0, 0) @@ -131,7 +130,6 @@ shape = SubResource("BoxShape3D_a0kup") [node name="Building" parent="BuildingAreas/B_area_S" unique_id=819634987 instance=ExtResource("2_eat54")] transform = Transform3D(1.1296118, 0, 0, 0, 1.0989345, 0, 0, 0, 0.8093087, 47.032215, 2.198969, 0) -visible = false [node name="MeshInstance3D" type="MeshInstance3D" parent="BuildingAreas/B_area_S/Building" unique_id=1325249889] transform = Transform3D(0.7908016, 0, 0, 0, 0.9999995, 0, 0, 0, 2.8399127, -7.5103607, -2.0044072, 0) @@ -146,7 +144,6 @@ shape = SubResource("BoxShape3D_a0kup") [node name="Building" parent="BuildingAreas/B_area_N" unique_id=737365486 instance=ExtResource("2_eat54")] transform = Transform3D(1.1296118, 0, 0, 0, 1.0989345, 0, 0, 0, 0.8093087, 47.032215, 2.198969, 0) -visible = false [node name="MeshInstance3D" type="MeshInstance3D" parent="BuildingAreas/B_area_N/Building" unique_id=1889416504] transform = Transform3D(0.7908016, 0, 0, 0, 0.9999995, 0, 0, 0, 2.8399127, -7.5103607, -2.0044072, 0) diff --git a/player.gd b/player.gd index 15a264d..178cdca 100644 --- a/player.gd +++ b/player.gd @@ -33,7 +33,9 @@ var is_active: bool = true func _ready() -> void: $Upgrades.update() + $SpecialUpgrades.update() $Shop.upgrade_node = $Upgrades + $Shop.special_upgrade_node = $SpecialUpgrades $Shop.populate() $Shop.visible = false @@ -126,6 +128,7 @@ func _on_retry_button_pressed(): is_active = true $TimeLimit.start() $Upgrades.reset() + $SpecialUpgrades.reset() stamina = max_stamina diff --git a/player.tscn b/player.tscn index b6070a8..e69ec84 100644 --- a/player.tscn +++ b/player.tscn @@ -1,6 +1,7 @@ [gd_scene format=3 uid="uid://cmb3b7xrlboy3"] [ext_resource type="Script" uid="uid://bobw4cfg1v6gj" path="res://player.gd" id="1_4flbx"] +[ext_resource type="PackedScene" uid="uid://byv518wlck1t4" path="res://special_upgrades.tscn" id="2_hqtel"] [ext_resource type="PackedScene" uid="uid://52hoyqjot1cs" path="res://shop.tscn" id="2_i3pqv"] [ext_resource type="PackedScene" uid="uid://ct7cc7qg3hpu1" path="res://upgrades.tscn" id="2_onrkg"] @@ -31,7 +32,9 @@ collision_layer = 4 collision_mask = 3 script = ExtResource("1_4flbx") -[node name="Upgrades" parent="." unique_id=1238785974 instance=ExtResource("2_onrkg")] +[node name="SpecialUpgrades" parent="." unique_id=1238785974 instance=ExtResource("2_hqtel")] + +[node name="Upgrades" parent="." unique_id=1484491196 instance=ExtResource("2_onrkg")] [node name="Mesh" type="MeshInstance3D" parent="." unique_id=1740724392] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, 0) diff --git a/shop.gd b/shop.gd index fba6b25..db0af0d 100644 --- a/shop.gd +++ b/shop.gd @@ -1,16 +1,16 @@ extends Control var upgrade_node: Node +var special_upgrade_node: Node var available_money: int = 0 var special_currency: int = 0 - signal shop_exit func _process(delta: float) -> void: - $Money.text = str(available_money) + $Money.text = str(available_money) $SpecialMoney.text = str(special_currency) - + # Called when the node enters the scene tree for the first time. func populate() -> void: @@ -20,16 +20,24 @@ func populate() -> void: $TuxUpgrades.set_item_metadata(index, upgrade) if upgrade.enabled: $TuxUpgrades.set_item_disabled(index, true) - - - + + $XeniaUpgrades.clear() + for upgrade in special_upgrade_node.get_children(): + var index = $XeniaUpgrades.add_item(upgrade.upgrade_description + " Cost: " + str(upgrade.cost), upgrade.icon) + $XeniaUpgrades.set_item_metadata(index, upgrade) + if upgrade.enabled: + $XeniaUpgrades.set_item_disabled(index, true) + func _on_tux_mouse_entered() -> void: - $Tux.modulate = Color(0.5, 0.5, 0.6) - + $Tux.modulate = Color(0.5, 0.5, 0.6) +func _on_xenia_mouse_entered() -> void: + $Xenia.modulate = Color(0.5, 0.5, 0.6) func _on_tux_mouse_exited() -> void: - $Tux.modulate = Color(1, 1, 1) + $Tux.modulate = Color(1.0, 1.0, 1.0) +func _on_xenia_mouse_exited() -> void: + $Xenia.modulate = Color(1.0, 1.0, 1.0) func _on_tux_upgrades_item_clicked(index: int, at_position: Vector2, mouse_button_index: int) -> void: @@ -41,23 +49,30 @@ func _on_tux_upgrades_item_clicked(index: int, at_position: Vector2, mouse_butto else: $Error.text = "No tens prou Diners!!!!" - -func _on_continue_pressed() -> void: - $Tux.visible = true - $Xenia.visible = true - $TuxUpgrades.visible = false - shop_exit.emit() - - -func _on_xenia_mouse_entered() -> void: - $Xenia.modulate = Color(0.5, 0.5, 0.6) - - -func _on_xenia_mouse_exited() -> void: - $Xenia.modulate = Color(1, 1, 1) +func _on_xenia_upgrades_item_clicked(index: int, at_position: Vector2, mouse_button_index: int) -> void: + var upgrade = $XeniaUpgrades.get_item_metadata(index) + if upgrade.cost <= special_currency: + upgrade.enabled = true; + special_currency -= upgrade.cost + populate() + else: + $Error.text = "No tens prou 🥘!!!!" func _on_tux_pressed() -> void: - $Tux.visible = false + $Tux.visible = false $Xenia.visible = false $TuxUpgrades.visible = true + +func _on_xenia_pressed(): + $Tux.visible = false + $Xenia.visible = false + $XeniaUpgrades.visible = true + + +func _on_continue_pressed() -> void: + $Tux.visible = true + $Xenia.visible = true + $TuxUpgrades.visible = false + $XeniaUpgrades.visible = false + shop_exit.emit() diff --git a/shop.tscn b/shop.tscn index a42979a..9c153c3 100644 --- a/shop.tscn +++ b/shop.tscn @@ -114,6 +114,22 @@ grow_horizontal = 2 grow_vertical = 2 fixed_icon_size = Vector2i(100, 100) +[node name="XeniaUpgrades" type="ItemList" parent="." unique_id=1728782891] +visible = false +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -415.0 +offset_top = -295.0 +offset_right = -32.0 +offset_bottom = 288.0 +grow_horizontal = 2 +grow_vertical = 2 +fixed_icon_size = Vector2i(100, 100) + [node name="Pessetes" type="Label" parent="." unique_id=1267923551] layout_mode = 0 offset_left = 205.0 @@ -195,5 +211,7 @@ text = "Continuar" [connection signal="pressed" from="Tux" to="." method="_on_tux_pressed"] [connection signal="mouse_entered" from="Xenia" to="." method="_on_xenia_mouse_entered"] [connection signal="mouse_exited" from="Xenia" to="." method="_on_xenia_mouse_exited"] +[connection signal="pressed" from="Xenia" to="." method="_on_xenia_pressed"] [connection signal="item_clicked" from="TuxUpgrades" to="." method="_on_tux_upgrades_item_clicked"] +[connection signal="item_clicked" from="XeniaUpgrades" to="." method="_on_xenia_upgrades_item_clicked"] [connection signal="pressed" from="Continue" to="." method="_on_continue_pressed"] diff --git a/special_upgrades.gd b/special_upgrades.gd new file mode 100644 index 0000000..9f15011 --- /dev/null +++ b/special_upgrades.gd @@ -0,0 +1,21 @@ +extends Node + +var parent: CharacterBody3D + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + assert(get_parent().name == "Player", "Upgrade must have player as parent") + parent = get_parent() + + +func update() -> void: + var upgrades: Array = get_children() + print("Updating all upgrades...") + for upgrade in upgrades: + upgrade.update() + +func reset(): + var upgrades: Array = get_children() + print("Updating all upgrades...") + for upgrade in upgrades: + upgrade.enabled = false diff --git a/special_upgrades.gd.uid b/special_upgrades.gd.uid new file mode 100644 index 0000000..f54c0af --- /dev/null +++ b/special_upgrades.gd.uid @@ -0,0 +1 @@ +uid://bxvhar7bgeyau diff --git a/special_upgrades.tscn b/special_upgrades.tscn new file mode 100644 index 0000000..4481543 --- /dev/null +++ b/special_upgrades.tscn @@ -0,0 +1,24 @@ +[gd_scene format=3 uid="uid://byv518wlck1t4"] + +[ext_resource type="Script" uid="uid://bxvhar7bgeyau" path="res://special_upgrades.gd" id="1_76f4f"] + +[sub_resource type="GDScript" id="GDScript_8j6ry"] +script/source = "extends Node + +var enabled: bool = false +var cost: int = 3 +var upgrade_name: String = \"Tamany bloc\" +var upgrade_description: String = \"Fa mes xicotet cada bloc\" +var icon: Texture2D = preload(\"res://assets/Images/tren.jpg\") + +func update() -> void: + if enabled: + print(\"Updating chunk size\") + Global.chunk_size = 120 +" + +[node name="SpecialUpgrades" type="Node" unique_id=1238785974] +script = ExtResource("1_76f4f") + +[node name="ChunkSize" type="Node" parent="." unique_id=1030985851] +script = SubResource("GDScript_8j6ry") diff --git a/station.tscn b/station.tscn index 44e5ade..29931e9 100644 --- a/station.tscn +++ b/station.tscn @@ -1,6 +1,7 @@ [gd_scene format=3 uid="uid://cf50vwp60vxxf"] [ext_resource type="Script" uid="uid://e3kpo73hvthu" path="res://station.gd" id="1_lu35c"] +[ext_resource type="Material" uid="uid://pi37nbc20kiw" path="res://assets/Images/pavement/PavingStones074_1K-JPG2.tres" id="2_oblqs"] [ext_resource type="PackedScene" uid="uid://8227la7x8kn1" path="res://assets/3d/Rails.glb" id="2_xmj61"] [ext_resource type="Texture2D" uid="uid://dwp08vjv8v6h6" path="res://icon.svg" id="3_sum1q"] @@ -77,6 +78,7 @@ size = Vector3(16.840843, 19.235413, 1) script = ExtResource("1_lu35c") [node name="Mesh" type="MeshInstance3D" parent="." unique_id=651037282] +material_override = ExtResource("2_oblqs") mesh = SubResource("PlaneMesh_kdh3y") surface_material_override/0 = SubResource("StandardMaterial3D_eoxb4") diff --git a/upgrades.gd b/upgrades.gd index 16aa5d1..9f15011 100644 --- a/upgrades.gd +++ b/upgrades.gd @@ -2,23 +2,17 @@ extends Node var parent: CharacterBody3D - - # Called when the node enters the scene tree for the first time. func _ready() -> void: assert(get_parent().name == "Player", "Upgrade must have player as parent") parent = get_parent() -## Called every frame. 'delta' is the elapsed time since the previous frame. -#func _process(delta: float) -> void: - #pass func update() -> void: var upgrades: Array = get_children() print("Updating all upgrades...") for upgrade in upgrades: upgrade.update() - func reset(): var upgrades: Array = get_children()