🚧 reworking Fieldservice
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
using System.Collections.Generic;
|
||||
using Godot;
|
||||
|
||||
namespace Babushka.scripts.CSharp.Common.Farming;
|
||||
|
||||
public partial class FieldService : Node2D
|
||||
{
|
||||
private Dictionary<PackedScene, FieldsInScene>? 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<Vector2I, FieldBehaviour2D> fields;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user