From d1bc2ca8a2e8a225f55cbbc0e7460b26f2c566c9 Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Mon, 2 Oct 2023 01:36:23 +0200 Subject: [PATCH] Score and tweaks --- entity/coin_copper.tscn | 6 +++- game/game.gd | 6 ++++ game/game.tscn | 14 +++++++++- interface/game_ui.gd | 5 ++++ interface/game_ui.tscn | 23 +++++++-------- interface/{SafeUI.gd => safe_ui.gd} | 0 interface/score_button.gd | 6 ++++ interface/score_button.tscn | 12 ++++++++ main.tscn | 13 +++++---- value/evaluator.gd | 43 ++++++++++++----------------- value/valuable.gd | 9 ------ 11 files changed, 81 insertions(+), 56 deletions(-) rename interface/{SafeUI.gd => safe_ui.gd} (100%) create mode 100644 interface/score_button.gd create mode 100644 interface/score_button.tscn diff --git a/entity/coin_copper.tscn b/entity/coin_copper.tscn index 409b956..29ee8dd 100644 --- a/entity/coin_copper.tscn +++ b/entity/coin_copper.tscn @@ -1,9 +1,10 @@ -[gd_scene load_steps=6 format=3 uid="uid://c3kitncwpi42j"] +[gd_scene load_steps=7 format=3 uid="uid://c3kitncwpi42j"] [ext_resource type="PhysicsMaterial" uid="uid://c6kn1an85lccr" path="res://entity/coin_physics_material.tres" id="1_8k46m"] [ext_resource type="Texture2D" uid="uid://dbdkb4vt7dh85" path="res://entity/coin_copper_4.png" id="1_wedw1"] [ext_resource type="Texture2D" uid="uid://2vtvoj6ua3cb" path="res://entity/coin_copper_outline_2.png" id="2_2ifq3"] [ext_resource type="PackedScene" uid="uid://bk1vvq5rug01m" path="res://collector/collectible.tscn" id="4_yefrx"] +[ext_resource type="PackedScene" uid="uid://ujpra0s1kpqi" path="res://value/valuable.tscn" id="5_t8enr"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_c6byl"] size = Vector2(14, 3) @@ -32,3 +33,6 @@ texture = ExtResource("2_2ifq3") [node name="Collectible" parent="." instance=ExtResource("4_yefrx")] type = &"Copper" + +[node name="Valuable" parent="." instance=ExtResource("5_t8enr")] +value = 1 diff --git a/game/game.gd b/game/game.gd index e2e8253..b55d1f2 100644 --- a/game/game.gd +++ b/game/game.gd @@ -7,3 +7,9 @@ class_name Game func trigger_spawn(): button_spawner.spawn() + + +signal score_changed(total: int) + +func _on_score_changed(total: int): + score_changed.emit(total) diff --git a/game/game.tscn b/game/game.tscn index b916eec..4123670 100644 --- a/game/game.tscn +++ b/game/game.tscn @@ -1,14 +1,18 @@ -[gd_scene load_steps=7 format=3 uid="uid://c3rxmcwa5nqng"] +[gd_scene load_steps=9 format=3 uid="uid://c3rxmcwa5nqng"] [ext_resource type="Script" path="res://game/game.gd" id="1_i3ly0"] [ext_resource type="PackedScene" uid="uid://bllsprv8orpn4" path="res://bottle/bottle.tscn" id="1_y7o2l"] [ext_resource type="PackedScene" uid="uid://d05b8jy3xmpcb" path="res://bottle/gravity_from_gyro.tscn" id="2_h2pfr"] [ext_resource type="PackedScene" uid="uid://c67lfbk4gf1ga" path="res://spawner/spawner.tscn" id="3_qwsty"] [ext_resource type="PackedScene" uid="uid://c3kitncwpi42j" path="res://entity/coin_copper.tscn" id="4_e5nwi"] +[ext_resource type="PackedScene" uid="uid://beg758fa6o0cs" path="res://value/evaluator.tscn" id="6_my6nv"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_4uksi"] size = Vector2(80, 80) +[sub_resource type="RectangleShape2D" id="RectangleShape2D_rh35r"] +size = Vector2(240, 384) + [node name="Game" type="Node2D"] texture_filter = 1 script = ExtResource("1_i3ly0") @@ -44,4 +48,12 @@ shape = SubResource("RectangleShape2D_4uksi") [node name="GravityFromGyro" parent="." instance=ExtResource("2_h2pfr")] +[node name="Evaluator" parent="." instance=ExtResource("6_my6nv")] +position = Vector2(128, 256) + +[node name="BottleShape" type="CollisionShape2D" parent="Evaluator"] +position = Vector2(8, 16) +shape = SubResource("RectangleShape2D_rh35r") + [connection signal="timeout" from="TimeSpawner/Timer" to="TimeSpawner" method="spawn"] +[connection signal="changed" from="Evaluator" to="." method="_on_score_changed"] diff --git a/interface/game_ui.gd b/interface/game_ui.gd index 1bafa22..b794ecf 100644 --- a/interface/game_ui.gd +++ b/interface/game_ui.gd @@ -1,6 +1,8 @@ extends Control class_name GameUI +@export var score_button: ScoreButton + ## Emitted when the Score button is pressed. signal score_button_pressed @@ -19,3 +21,6 @@ func _on_spawn_button_pressed(): func _on_shop_button_pressed(): shop_button_pressed.emit() + +func _on_game_score_changed(total: int): + score_button.set_score(total) diff --git a/interface/game_ui.tscn b/interface/game_ui.tscn index 939a206..c8ee779 100644 --- a/interface/game_ui.tscn +++ b/interface/game_ui.tscn @@ -1,9 +1,10 @@ -[gd_scene load_steps=3 format=3 uid="uid://bo5unrhqpoyim"] +[gd_scene load_steps=4 format=3 uid="uid://bo5unrhqpoyim"] [ext_resource type="Theme" uid="uid://ba5utvfhnxa5i" path="res://interface/interface_theme.tres" id="1_ppf8y"] [ext_resource type="Script" path="res://interface/game_ui.gd" id="2_33nqa"] +[ext_resource type="PackedScene" uid="uid://bey5lilvteg32" path="res://interface/score_button.tscn" id="3_vobar"] -[node name="GameUI" type="Control"] +[node name="GameUI" type="Control" node_paths=PackedStringArray("score_button")] layout_mode = 3 anchors_preset = 15 anchor_right = 1.0 @@ -12,18 +13,15 @@ grow_horizontal = 2 grow_vertical = 2 theme = ExtResource("1_ppf8y") script = ExtResource("2_33nqa") +score_button = NodePath("ScoreButton") -[node name="ScoreButton" type="Button" parent="."] -custom_minimum_size = Vector2(72, 0) -layout_mode = 1 -offset_right = 72.0 -offset_bottom = 54.0 -size_flags_horizontal = 0 -text = "$0" -alignment = 0 +[node name="ScoreButton" parent="." instance=ExtResource("3_vobar")] +custom_minimum_size = Vector2(88, 0) +layout_mode = 0 +text = "$0.00" [node name="SpawnButton" type="Button" parent="."] -custom_minimum_size = Vector2(72, 0) +custom_minimum_size = Vector2(88, 0) layout_mode = 1 anchors_preset = 5 anchor_left = 0.5 @@ -36,7 +34,7 @@ size_flags_horizontal = 4 text = "Drop" [node name="ShopButton" type="Button" parent="."] -custom_minimum_size = Vector2(72, 0) +custom_minimum_size = Vector2(88, 0) layout_mode = 1 anchors_preset = 1 anchor_left = 1.0 @@ -48,6 +46,5 @@ size_flags_horizontal = 8 text = "Shop" alignment = 2 -[connection signal="pressed" from="ScoreButton" to="." method="_on_score_button_pressed"] [connection signal="pressed" from="SpawnButton" to="." method="_on_spawn_button_pressed"] [connection signal="pressed" from="ShopButton" to="." method="_on_shop_button_pressed"] diff --git a/interface/SafeUI.gd b/interface/safe_ui.gd similarity index 100% rename from interface/SafeUI.gd rename to interface/safe_ui.gd diff --git a/interface/score_button.gd b/interface/score_button.gd new file mode 100644 index 0000000..2331bf2 --- /dev/null +++ b/interface/score_button.gd @@ -0,0 +1,6 @@ +extends Button +class_name ScoreButton + + +func set_score(total: int): + text = "$%0.2f" % (float(total) / 100) diff --git a/interface/score_button.tscn b/interface/score_button.tscn new file mode 100644 index 0000000..113fd36 --- /dev/null +++ b/interface/score_button.tscn @@ -0,0 +1,12 @@ +[gd_scene load_steps=2 format=3 uid="uid://bey5lilvteg32"] + +[ext_resource type="Script" path="res://interface/score_button.gd" id="1_ol56t"] + +[node name="ScoreButton" type="Button"] +custom_minimum_size = Vector2(72, 0) +offset_right = 72.0 +offset_bottom = 54.0 +size_flags_horizontal = 0 +text = "$0" +alignment = 0 +script = ExtResource("1_ol56t") diff --git a/main.tscn b/main.tscn index 23af676..fe75dc8 100644 --- a/main.tscn +++ b/main.tscn @@ -22,7 +22,7 @@ grow_vertical = 2 size_flags_vertical = 8 theme = ExtResource("1_je7w1") -[node name="CenterContainer" type="CenterContainer" parent="UI"] +[node name="GameWorld" type="CenterContainer" parent="UI"] custom_minimum_size = Vector2(270, 480) layout_mode = 1 anchors_preset = 15 @@ -31,18 +31,18 @@ anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -[node name="SubViewportContainer" type="SubViewportContainer" parent="UI/CenterContainer"] +[node name="GameViewport" type="SubViewportContainer" parent="UI/GameWorld"] layout_mode = 2 -[node name="SubViewport" type="SubViewport" parent="UI/CenterContainer/SubViewportContainer"] +[node name="Viewport" type="SubViewport" parent="UI/GameWorld/GameViewport"] disable_3d = true handle_input_locally = false size = Vector2i(270, 480) render_target_update_mode = 4 -[node name="Game" parent="UI/CenterContainer/SubViewportContainer/SubViewport" instance=ExtResource("2_32lou")] +[node name="Game" parent="UI/GameWorld/GameViewport/Viewport" instance=ExtResource("2_32lou")] -[node name="Camera2D" type="Camera2D" parent="UI/CenterContainer/SubViewportContainer/SubViewport"] +[node name="Camera" type="Camera2D" parent="UI/GameWorld/GameViewport/Viewport"] anchor_mode = 0 [node name="GameUI" parent="UI" instance=ExtResource("4_siim3")] @@ -53,9 +53,10 @@ process_mode = 3 visible = false layout_mode = 1 +[connection signal="score_changed" from="UI/GameWorld/GameViewport/Viewport/Game" to="UI/GameUI" method="_on_game_score_changed"] [connection signal="score_button_pressed" from="UI/GameUI" to="." method="_on_game_ui_score_button_pressed"] [connection signal="shop_button_pressed" from="UI/GameUI" to="." method="_on_game_ui_shop_button_pressed"] -[connection signal="spawn_button_pressed" from="UI/GameUI" to="UI/CenterContainer/SubViewportContainer/SubViewport/Game" method="trigger_spawn"] +[connection signal="spawn_button_pressed" from="UI/GameUI" to="UI/GameWorld/GameViewport/Viewport/Game" method="trigger_spawn"] [connection signal="back_button_pressed" from="UI/ShopUI" to="." method="_on_shop_ui_back_button_pressed"] [connection signal="delete_button_pressed" from="UI/ShopUI" to="." method="_on_shop_ui_delete_button_pressed"] [connection signal="purchase_begin" from="UI/ShopUI" to="." method="_on_shop_ui_purchase_begin"] diff --git a/value/evaluator.gd b/value/evaluator.gd index 62040fb..54d62da 100644 --- a/value/evaluator.gd +++ b/value/evaluator.gd @@ -4,36 +4,27 @@ class_name Evaluator ## The current amount of value evaluated. -var total_value: int = 0 - -## The types of [Collectible]s to value. -## -## The strings will match only if exactly the same. -#@export var collecting_types: Array[StringName] - -## The collision mask to check colliding body against. -@export_flags_2d_physics var collecting_collision_mask: int +var total: int = 0 ## The evaluator has added the value of an object to the total. -signal added(what: PhysicsBody2D, total_value: int) +signal added(what: Valuable, total: int) + ## The evaluator has removed the value of an object to the total. -signal removed(what: PhysicsBody2D) +signal removed(what: Valuable, total: int) -signal score_changed(total_value: int) +## The total value of the evaluated items has changed. +signal changed(total: int) -func _on_body_entered(body): - if body is PhysicsBody2D: - if body.collision_layer & collecting_collision_mask: - var evaluable: Valuable = body.get_node("Valuable") - total_value += evaluable.value - evaluable.evaluate() - score_changed.emit(total_value) + +func _on_body_entered(body: PhysicsBody2D): + var valuable: Valuable = body.get_node("Valuable") + total += valuable.value + added.emit(valuable, total) + changed.emit(total) -func _on_body_exited(body): - if body is PhysicsBody2D: - if body.collision_layer & collecting_collision_mask: - var evaluable: Valuable = body.get_node("Valuable") - total_value -= evaluable.value - evaluable.evaluate() - score_changed.emit(total_value) +func _on_body_exited(body: PhysicsBody2D): + var valuable: Valuable = body.get_node("Valuable") + total -= valuable.value + removed.emit(valuable, total) + changed.emit(total) diff --git a/value/valuable.gd b/value/valuable.gd index ef50710..5bd89cc 100644 --- a/value/valuable.gd +++ b/value/valuable.gd @@ -2,12 +2,3 @@ extends Node class_name Valuable @export var value: int - -## Emitted when this entity has been counted. -signal evaluated - -## Mark this entity as evaluated. -## -func evaluate(): - emit_signal("evaluated") -