You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Babushka/scripts/CSharp/Common/Farming/FieldService.cs

78 lines
1.8 KiB

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