diff --git a/interface/shop_ui.gd b/interface/shop_ui.gd index 1a5bf66..bb948ac 100644 --- a/interface/shop_ui.gd +++ b/interface/shop_ui.gd @@ -1,2 +1,62 @@ extends Panel class_name ShopUI + +## Emitted when the Score button is pressed. +signal score_button_pressed + +## Emitted when the Delete button is pressed. +signal delete_button_pressed + +## Emitted when the Back button is presesd. +signal back_button_pressed + +## Emitted when any purchase has started. +signal purchase_begin(what: PurchasableItem) + +## Emitted when any purchase is cancelled. +signal purchase_cancel(what: PurchasableItem) + +## Emitted when any purchase is completed. +## +## Emitted by complete_purchase(). +signal purchase_success(what: PurchasableItem) + +## Array of all PurchasableItems that this ShopUI should control. +@onready var purchasable_items: Array[PurchasableItem] = find_children("*", "PurchasableItem") as Array[PurchasableItem] + + +func _ready(): + for item in purchasable_items: + item.purchase_begin.connect(_on_any_purchase_begin.bind(item)) + item.purchase_cancel.connect(_on_any_purchase_cancel.bind(item)) + item.purchase_success.connect(_on_any_purchase_success.bind(item)) + +func _on_any_purchase_begin(what: PurchasableItem): + purchase_begin.emit(what) + for item in purchasable_items: + if item == what: + continue + item.can_buy = false + +func _on_any_purchase_cancel(what: PurchasableItem): + purchase_cancel.emit(what) + for item in purchasable_items: + if item == what: + continue + item.can_buy = true + +func _on_any_purchase_success(what: PurchasableItem): + purchase_success.emit(what) + for item in purchasable_items: + if item == what: + continue + item.can_buy = true + +func _on_score_button_pressed(): + score_button_pressed.emit() + +func _on_delete_button_pressed(): + delete_button_pressed.emit() + +func _on_back_button_pressed(): + back_button_pressed.emit() diff --git a/interface/shop_ui.tscn b/interface/shop_ui.tscn index 23f99ab..7d4078e 100644 --- a/interface/shop_ui.tscn +++ b/interface/shop_ui.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=4 format=3 uid="uid://cklkdygv61bny"] +[gd_scene load_steps=5 format=3 uid="uid://cklkdygv61bny"] [ext_resource type="Theme" uid="uid://ba5utvfhnxa5i" path="res://interface/interface_theme.tres" id="1_qdf0y"] [ext_resource type="PackedScene" uid="uid://dul1fpyh733t7" path="res://interface/purchasable_item.tscn" id="2_2dtc0"] +[ext_resource type="Script" path="res://interface/shop_ui.gd" id="2_iyr7m"] [ext_resource type="PackedScene" uid="uid://wodgj6rp2ewm" path="res://interface/purchasable_item_padding.tscn" id="3_4feaj"] [node name="ShopUI" type="Panel"] @@ -11,6 +12,7 @@ anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 theme = ExtResource("1_qdf0y") +script = ExtResource("2_iyr7m") [node name="Rows" type="VBoxContainer" parent="."] layout_mode = 1 @@ -24,19 +26,29 @@ grow_vertical = 2 custom_minimum_size = Vector2(0, 54) layout_mode = 2 -[node name="MoneyButton" type="Button" parent="Rows/UpperButtons"] -custom_minimum_size = Vector2(54, 0) +[node name="ScoreButton" type="Button" parent="Rows/UpperButtons"] +custom_minimum_size = Vector2(72, 0) layout_mode = 2 size_flags_horizontal = 0 text = "$0" alignment = 0 -[node name="UpperButtonsSpacer" type="PanelContainer" parent="Rows/UpperButtons"] +[node name="UpperButtonsSpacerLeft" type="PanelContainer" parent="Rows/UpperButtons"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="DeleteButton" type="Button" parent="Rows/UpperButtons"] +custom_minimum_size = Vector2(72, 0) +layout_mode = 2 +size_flags_horizontal = 4 +text = "Del" + +[node name="UpperButtonsSpacerRight" type="PanelContainer" parent="Rows/UpperButtons"] layout_mode = 2 size_flags_horizontal = 3 [node name="BackButton" type="Button" parent="Rows/UpperButtons"] -custom_minimum_size = Vector2(54, 0) +custom_minimum_size = Vector2(72, 0) layout_mode = 2 size_flags_horizontal = 8 text = "Back" @@ -61,3 +73,14 @@ layout_mode = 2 [node name="PurchasableItem2" parent="Rows/Scrollable/ScrollableItems" instance=ExtResource("2_2dtc0")] layout_mode = 2 + +[node name="PurchasableItemPadding2" parent="Rows/Scrollable/ScrollableItems" instance=ExtResource("3_4feaj")] +layout_mode = 2 + +[node name="PurchasableItem3" parent="Rows/Scrollable/ScrollableItems" instance=ExtResource("2_2dtc0")] +layout_mode = 2 +has_unlocked = false + +[connection signal="pressed" from="Rows/UpperButtons/ScoreButton" to="." method="_on_score_button_pressed"] +[connection signal="pressed" from="Rows/UpperButtons/DeleteButton" to="." method="_on_delete_button_pressed"] +[connection signal="pressed" from="Rows/UpperButtons/BackButton" to="." method="_on_back_button_pressed"]