From 6ba26c360dc62800ec3be41b112677fa5513e20a Mon Sep 17 00:00:00 2001 From: kziolkowski Date: Fri, 31 Oct 2025 14:08:55 +0100 Subject: [PATCH] :construction: reworking Fieldservice --- Babushka.sln.DotSettings.user | 1 + prefabs/farm/plants/beet_plant.tscn | 5 +- .../Common/Farming/FarmingControls2D.cs | 5 ++ .../CSharp/Common/Farming/FieldBehaviour2D.cs | 2 + scripts/CSharp/Common/Farming/FieldService.cs | 77 +++++++++++++++++++ 5 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 scripts/CSharp/Common/Farming/FieldService.cs diff --git a/Babushka.sln.DotSettings.user b/Babushka.sln.DotSettings.user index 225a89d..146655c 100644 --- a/Babushka.sln.DotSettings.user +++ b/Babushka.sln.DotSettings.user @@ -10,6 +10,7 @@ ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded diff --git a/prefabs/farm/plants/beet_plant.tscn b/prefabs/farm/plants/beet_plant.tscn index 8f6dedc..8bdd8ed 100644 --- a/prefabs/farm/plants/beet_plant.tscn +++ b/prefabs/farm/plants/beet_plant.tscn @@ -12,7 +12,7 @@ radius = 300.0 resource_local_to_scene = true radius = 300.0 -[node name="Beet2" instance=ExtResource("1_2u3jr")] +[node name="Beet" instance=ExtResource("1_2u3jr")] [node name="Seed1" parent="Seeds" index="0"] texture = ExtResource("2_agmuy") @@ -47,6 +47,9 @@ shape = SubResource("CircleShape2D_hiixr") [node name="SpawnWithItem" parent="ReadyPlantInventoryItem" index="0"] _blueprint = ExtResource("3_agmuy") +[node name="PickupInteractionArea" parent="ReadyPlantInventoryItem" index="3"] +_active = false + [node name="CollisionShape3D" parent="ReadyPlantInventoryItem/PickupInteractionArea/Area2D" index="0"] shape = SubResource("CircleShape2D_ae08q") diff --git a/scripts/CSharp/Common/Farming/FarmingControls2D.cs b/scripts/CSharp/Common/Farming/FarmingControls2D.cs index c9e259c..f737bb1 100644 --- a/scripts/CSharp/Common/Farming/FarmingControls2D.cs +++ b/scripts/CSharp/Common/Farming/FarmingControls2D.cs @@ -56,6 +56,7 @@ public partial class FarmingControls2D : Node2D && _toolId == WateringCanState.WATERING_CAN_ID && WateringCanState.GetFillState() > 0) { + GD.Print("Trying to use the watering can."); Vector2I adjustedPosition = GetAdjustedMousePosition(); WaterTheField(adjustedPosition); } @@ -117,11 +118,15 @@ public partial class FarmingControls2D : Node2D { FieldBehaviour2D field = FieldService.Get(fieldPosition); if (field == null || field.FieldState == FieldState.Watered) + { + GD.Print($"The field at position {fieldPosition} is null!"); return; + } field.Water(); _wateringParticles.GlobalPosition = new Vector2(field.GlobalPosition.X, field.GlobalPosition.Y + _wateringCanParticlesVerticalOffset); WateringCanState.Water(); + GD.Print($"Watered the field at {fieldPosition}."); EmitSignal(SignalName.WateringField); } diff --git a/scripts/CSharp/Common/Farming/FieldBehaviour2D.cs b/scripts/CSharp/Common/Farming/FieldBehaviour2D.cs index 30d8f4d..98adfe3 100644 --- a/scripts/CSharp/Common/Farming/FieldBehaviour2D.cs +++ b/scripts/CSharp/Common/Farming/FieldBehaviour2D.cs @@ -20,11 +20,13 @@ public partial class FieldBehaviour2D : Sprite2D public Vector2 FieldPosition; + public FieldService2D FieldService; [Signal] public delegate void PlantedEventHandler(); public override void _Ready() { + UpdateFieldState(FieldState); int randomIndex = new Random().Next(0, _maskTexture.Length); _maskSprite.Texture = _maskTexture[randomIndex]; diff --git a/scripts/CSharp/Common/Farming/FieldService.cs b/scripts/CSharp/Common/Farming/FieldService.cs new file mode 100644 index 0000000..a5b594f --- /dev/null +++ b/scripts/CSharp/Common/Farming/FieldService.cs @@ -0,0 +1,77 @@ +using System.Collections.Generic; +using Godot; + +namespace Babushka.scripts.CSharp.Common.Farming; + +public partial class FieldService : Node2D +{ + private Dictionary? fieldsPerScene; + + + + [Signal] public delegate void FieldCreatedEventHandler(); + + //Create + public bool TryAddEntry(PackedScene scene, Vector2I key, FieldBehaviour2D field) + { + if (!fieldsPerScene.ContainsKey(scene)) + { + FieldsInScene fieldInstance = new FieldsInScene(); + fieldsPerScene.Add(scene, fieldInstance); + EmitSignal(SignalName.FieldCreated); + return true; + } + return false; + } + + // Read + public FieldBehaviour2D Get(PackedScene key, Vector2I fieldPosition) + { + if (fieldsPerScene.TryGetValue(key, out FieldsInScene field)) + { + if (field.fields.TryGetValue(fieldPosition, out FieldBehaviour2D fieldInstance)) + return fieldInstance; + } + + return null; + } + + //todo: + // - Make this a singleton + // - Let this interact with the FarmingControls and the FieldBehaviours + // - Replace FieldService2D and remove it from scenes. + + + /* + //Update + public void UpdateEntry(Vector2I fieldPosition, FieldBehaviour2D state) + { + + if (fields.ContainsKey(fieldPosition)) + { + fields[fieldPosition] = state; + } + else + { + TryAddEntry(fieldPosition, state); + } + } + + //Delete + + public void RemoveEntry(Vector2I fieldPosition) + { + if (fields.ContainsKey(fieldPosition)) + { + fields.Remove(fieldPosition); + } + } + */ +} + +internal class FieldsInScene +{ + public Dictionary fields; +} + +