From fa394f8cd2fcffc1ebf3e974759da347933d5de1 Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Fri, 26 Apr 2024 02:15:39 +0200 Subject: [PATCH] Spawn a sheep with right click --- behaviours/counter.gd | 2 +- scenes/game/cursor.gd | 11 +++++++++++ scenes/game/cursor.tscn | 23 ++++++++++++++++++++--- scenes/game/gold_display.gd | 16 +++++++++++++--- scenes/game/gold_display.tscn | 22 +++++++++++++++++++--- scenes/game/main_game.gd | 2 +- scenes/game/main_game.tscn | 4 +++- 7 files changed, 68 insertions(+), 12 deletions(-) diff --git a/behaviours/counter.gd b/behaviours/counter.gd index c4b07fa..5233976 100644 --- a/behaviours/counter.gd +++ b/behaviours/counter.gd @@ -16,7 +16,7 @@ var value: int = 0 func change(amount: int): var old = value value = amount - changed.emit(old, value) + changed.emit(value, old) func increase(amount: int = 1): if amount < 0: diff --git a/scenes/game/cursor.gd b/scenes/game/cursor.gd index 406f8dd..0866258 100644 --- a/scenes/game/cursor.gd +++ b/scenes/game/cursor.gd @@ -8,8 +8,12 @@ signal dragged(node: Draggable) signal dropped(node: Draggable) +@export var sheep_spawn_cost: int = 5 + + @onready var game: MainGame = MainGame.get_via_group(self) @onready var gold_display: GoldDisplay = %"GoldDisplay" +@onready var sheep_spawner: Spawner = %"SheepSpawner" var dragging: Draggable = null @@ -58,6 +62,13 @@ func _input(event: InputEvent) -> void: drag() else: drop() + elif event.button_index == MOUSE_BUTTON_RIGHT: + if event.pressed: + var counter: Counter = game.inventory.get_counter(&"Gold") + if counter.value >= sheep_spawn_cost: + counter.decrease(sheep_spawn_cost) + sheep_spawner.spawn() + func _physics_process(_delta: float) -> void: position += (game.camera.get_global_mouse_position() - global_position) diff --git a/scenes/game/cursor.tscn b/scenes/game/cursor.tscn index 7925ead..c29e65a 100644 --- a/scenes/game/cursor.tscn +++ b/scenes/game/cursor.tscn @@ -1,10 +1,16 @@ -[gd_scene load_steps=4 format=3 uid="uid://col1q3elvkfwk"] +[gd_scene load_steps=8 format=3 uid="uid://col1q3elvkfwk"] [ext_resource type="Script" path="res://scenes/game/cursor.gd" id="1_1og6v"] [ext_resource type="PackedScene" uid="uid://cu750c7yd57qa" path="res://scenes/game/gold_display.tscn" id="2_5c4iq"] +[ext_resource type="Script" path="res://behaviours/spawner.gd" id="3_tutfd"] +[ext_resource type="PackedScene" uid="uid://bc2bm8lbol18w" path="res://entities/sheep.tscn" id="4_7isfg"] +[ext_resource type="PackedScene" uid="uid://8jkesanu4hrn" path="res://behaviours/tracker.tscn" id="5_ewy4o"] [sub_resource type="CircleShape2D" id="CircleShape2D_j2mj5"] -radius = 4.0 +radius = 48.0 + +[sub_resource type="CircleShape2D" id="CircleShape2D_dc2ul"] +radius = 8.0 [node name="Cursor" type="Area2D" groups=["cursor"]] z_index = 100 @@ -14,7 +20,18 @@ script = ExtResource("1_1og6v") [node name="Shape" type="CollisionShape2D" parent="."] shape = SubResource("CircleShape2D_j2mj5") -debug_color = Color(1, 1, 1, 1) +debug_color = Color(0, 0.411765, 0, 0) [node name="GoldDisplay" parent="." instance=ExtResource("2_5c4iq")] unique_name_in_owner = true + +[node name="SheepSpawner" type="Node2D" parent="." node_paths=PackedStringArray("blocking_tracker")] +unique_name_in_owner = true +script = ExtResource("3_tutfd") +scene = ExtResource("4_7isfg") +blocking_tracker = NodePath("Tracker") + +[node name="Tracker" parent="SheepSpawner" instance=ExtResource("5_ewy4o")] + +[node name="Shape" type="CollisionShape2D" parent="SheepSpawner/Tracker"] +shape = SubResource("CircleShape2D_dc2ul") diff --git a/scenes/game/gold_display.gd b/scenes/game/gold_display.gd index 9f13463..3098cb7 100644 --- a/scenes/game/gold_display.gd +++ b/scenes/game/gold_display.gd @@ -9,8 +9,18 @@ class_name GoldDisplay func set_text(value: int) -> void: label.text = "%d €" % value - -func display(value: int): +func increase(value: int): set_text(value) animator.stop() - animator.play(&"collect") + animator.play(&"increase") + +func decrease(value: int): + set_text(value) + animator.stop() + animator.play(&"decrease") + +func change(new: int, old: int): + if new > old: + increase(new) + elif old > new: + decrease(new) diff --git a/scenes/game/gold_display.tscn b/scenes/game/gold_display.tscn index 7b2f2a7..2349c49 100644 --- a/scenes/game/gold_display.tscn +++ b/scenes/game/gold_display.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=6 format=3 uid="uid://cu750c7yd57qa"] +[gd_scene load_steps=7 format=3 uid="uid://cu750c7yd57qa"] [ext_resource type="Script" path="res://scenes/game/gold_display.gd" id="1_poqth"] @@ -18,7 +18,7 @@ tracks/0/keys = { } [sub_resource type="Animation" id="Animation_8n0bl"] -resource_name = "collect" +resource_name = "increase" tracks/0/type = "value" tracks/0/imported = false tracks/0/enabled = true @@ -32,10 +32,26 @@ tracks/0/keys = { "values": [Vector2(1.4, 1.4), Vector2(1, 1)] } +[sub_resource type="Animation" id="Animation_rd1cq"] +resource_name = "decrease" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:scale") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(0.6, 0.6), Vector2(1, 1)] +} + [sub_resource type="AnimationLibrary" id="AnimationLibrary_bj0k7"] _data = { "RESET": SubResource("Animation_3gb4u"), -"collect": SubResource("Animation_8n0bl") +"decrease": SubResource("Animation_rd1cq"), +"increase": SubResource("Animation_8n0bl") } [sub_resource type="LabelSettings" id="LabelSettings_1jb4h"] diff --git a/scenes/game/main_game.gd b/scenes/game/main_game.gd index 446acd5..004c948 100644 --- a/scenes/game/main_game.gd +++ b/scenes/game/main_game.gd @@ -18,5 +18,5 @@ static func get_via_group(node: Node) -> MainGame: func _ready(): # Set up the gold display var gold_counter = inventory.get_counter(&"Gold") - gold_counter.changed.connect(cursor.gold_display.display.unbind(1)) + gold_counter.changed.connect(cursor.gold_display.change) cursor.gold_display.set_text(gold_counter.value) diff --git a/scenes/game/main_game.tscn b/scenes/game/main_game.tscn index ca78166..98d82bc 100644 --- a/scenes/game/main_game.tscn +++ b/scenes/game/main_game.tscn @@ -1,9 +1,10 @@ -[gd_scene load_steps=18 format=3 uid="uid://cxj5aud02f40j"] +[gd_scene load_steps=19 format=3 uid="uid://cxj5aud02f40j"] [ext_resource type="Script" path="res://scenes/game/main_game.gd" id="1_wiglu"] [ext_resource type="PackedScene" uid="uid://dm068vaseh45n" path="res://scenes/game/game_camera.tscn" id="2_db5xs"] [ext_resource type="PackedScene" uid="uid://cu6mvnfa01nb6" path="res://scenes/game/inventory.tscn" id="2_jhbbf"] [ext_resource type="Texture2D" uid="uid://d13j4br4hxek6" path="res://scenes/game/tileset_grass.png" id="2_o7bg5"] +[ext_resource type="PackedScene" uid="uid://brvbtvt4em32" path="res://behaviours/counter.tscn" id="3_we8s5"] [ext_resource type="Texture2D" uid="uid://ki0xyx6gvkty" path="res://scenes/game/tileset_flowers.png" id="4_dlm0d"] [ext_resource type="PackedScene" uid="uid://col1q3elvkfwk" path="res://scenes/game/cursor.tscn" id="5_g504x"] [ext_resource type="PackedScene" uid="uid://b3gydtrenbw3n" path="res://entities/skull.tscn" id="6_5k7gy"] @@ -840,6 +841,7 @@ script = ExtResource("1_wiglu") [node name="Inventory" parent="." instance=ExtResource("2_jhbbf")] unique_name_in_owner = true +counter_scene = ExtResource("3_we8s5") [node name="FloorTileMap" type="TileMap" parent="."] scale = Vector2(2, 2)