From fa7cc66748bfd87635cfef9fe6ea0645e55bca4a Mon Sep 17 00:00:00 2001 From: kziolkowski Date: Mon, 19 May 2025 23:49:00 +0200 Subject: [PATCH] added farming animation mechanic --- prefabs/Player2D.tscn | 9 +++---- project.godot | 4 +++ .../Common/CharacterControls/Player2D.cs | 25 ++++++++++++++++--- .../CSharp/Common/Farming/PlantBehaviour2D.cs | 8 ++++-- 4 files changed, 36 insertions(+), 10 deletions(-) diff --git a/prefabs/Player2D.tscn b/prefabs/Player2D.tscn index 776b0cc..1783175 100644 --- a/prefabs/Player2D.tscn +++ b/prefabs/Player2D.tscn @@ -1581,7 +1581,7 @@ animations = [{ }], "loop": true, "name": &"diagonal farming", -"speed": 10.0 +"speed": 12.0 }, { "frames": [{ "duration": 1.0, @@ -3502,7 +3502,7 @@ y_sort_enabled = true script = ExtResource("1_yl84k") _farmingControls = NodePath("FarmingControls") -[node name="CharacterBody2D" type="CharacterBody2D" parent="." node_paths=PackedStringArray("_sprite")] +[node name="CharacterBody2D" type="CharacterBody2D" parent="." node_paths=PackedStringArray("_sprite") groups=["PlantGrowing"]] position = Vector2(0, 374) collision_layer = 4 collision_mask = 3 @@ -3523,9 +3523,8 @@ position = Vector2(0, -374) [node name="Animated Sprites" type="AnimatedSprite2D" parent="CharacterBody2D/visuals"] position = Vector2(0, 450) sprite_frames = SubResource("SpriteFrames_4yiyq") -animation = &"side pickup" -frame = 6 -frame_progress = 0.00476268 +animation = &"diagonal farming" +frame_progress = 0.503028 offset = Vector2(0, -450) [node name="Hoe" type="Sprite2D" parent="CharacterBody2D/visuals"] diff --git a/project.godot b/project.godot index 5e96817..c732bba 100644 --- a/project.godot +++ b/project.godot @@ -91,6 +91,10 @@ folder_colors={ "res://shader/": "pink" } +[global_group] + +PlantGrowing="" + [input] move_left={ diff --git a/scripts/CSharp/Common/CharacterControls/Player2D.cs b/scripts/CSharp/Common/CharacterControls/Player2D.cs index e773300..2da18b6 100644 --- a/scripts/CSharp/Common/CharacterControls/Player2D.cs +++ b/scripts/CSharp/Common/CharacterControls/Player2D.cs @@ -1,4 +1,4 @@ -using System.Threading; + using System.Threading.Tasks; using Godot; @@ -8,6 +8,7 @@ public partial class Player2D : CharacterBody2D { [Export] private float _speed = 100f; [Export] private AnimatedSprite2D _sprite; + [Export] private SceneTree.GroupCallFlags _fieldFlags; // -1 means no tool. private int _toolID = -1; @@ -15,13 +16,14 @@ public partial class Player2D : CharacterBody2D private bool anyActionPressed; private bool _wateringInProgress; private bool _pickupAnimationInProgress; + private bool _farmingAnimationInProgress; private Vector2 _lastDirection = Vector2.Zero; - + public override void _Process(double delta) { anyActionPressed = false; - if (_pickupAnimationInProgress || _wateringInProgress) + if (_pickupAnimationInProgress || _wateringInProgress || _farmingAnimationInProgress) return; if (Input.IsActionPressed("move_right")) @@ -115,6 +117,9 @@ public partial class Player2D : CharacterBody2D } } + /// + /// Called by FarmingControls Signal. + /// public void PlayWateringAnimation() { if (_toolID == 1 && !_wateringInProgress) @@ -146,4 +151,18 @@ public partial class Player2D : CharacterBody2D _pickupAnimationInProgress = false; } + public void PlayFarmingAnimation() + { + _sprite.Animation = "diagonal farming"; + _sprite.Play(); + _farmingAnimationInProgress = true; + Task.Run(DelayedFarmingReset); + } + + private async Task DelayedFarmingReset() + { + await Task.Delay(1000); + _farmingAnimationInProgress = false; + } + } diff --git a/scripts/CSharp/Common/Farming/PlantBehaviour2D.cs b/scripts/CSharp/Common/Farming/PlantBehaviour2D.cs index 82ec132..0e7e215 100644 --- a/scripts/CSharp/Common/Farming/PlantBehaviour2D.cs +++ b/scripts/CSharp/Common/Farming/PlantBehaviour2D.cs @@ -1,4 +1,5 @@ using System; +using Babushka.scripts.CSharp.Common.CharacterControls; using Godot; namespace Babushka.scripts.CSharp.Common.Farming; @@ -14,9 +15,10 @@ public partial class PlantBehaviour2D : Node2D [Export] private Sprite2D[] _readyPlants; [Export] private PlantState _state = PlantState.None; [Export] private FieldBehaviour2D _field; - + private Sprite2D _currentPlantSprite = null; + /// /// Transitions the plant to its next growth stage. /// @@ -25,6 +27,8 @@ public partial class PlantBehaviour2D : Node2D if (_field.FieldState != FieldState.Watered) return; + GetTree().CallGroup("PlantGrowing", Player2D.MethodName.PlayFarmingAnimation); + switch (_state) { case PlantState.None: @@ -58,7 +62,7 @@ public partial class PlantBehaviour2D : Node2D default: break; } - + _field.UpdateFieldState(FieldState.Tilled); }