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;
+}
+
+