Files

74 lines
1.8 KiB
C#
Raw Permalink Normal View History

2025-05-12 00:16:13 +02:00
using Godot;
using Godot.Collections;
namespace Babushka.scripts.CSharp.Common.Farming;
[GlobalClass]
2025-05-12 00:16:13 +02:00
public partial class FieldService2D : Node2D
{
[Export] private Dictionary<Vector2I, FieldBehaviour2D> fields = new Dictionary<Vector2I, FieldBehaviour2D>();
2025-07-06 10:57:38 +02:00
[Export] private Area2D _allowedArea;
2025-06-15 19:37:57 +02:00
[Signal] public delegate void FieldCreatedEventHandler();
2025-05-17 17:40:15 +02:00
2025-07-06 10:57:38 +02:00
/*
public override void _PhysicsProcess(double delta)
2025-05-17 17:40:15 +02:00
{
2025-07-06 10:57:38 +02:00
var spaceState = GetWorld2D().DirectSpaceState;
// use global coordinates, not local to node
var query = PhysicsRayQueryParameters2D.Create(GetGlobalMousePosition(), new Vector3(0,0,-1),
CollisionMask, [GetRid()]);
var result = spaceState.IntersectRay(query);
if (result.Count > 0)
GD.Print("Hit at point: ", result["position"]);
2025-05-17 17:40:15 +02:00
}
2025-07-06 10:57:38 +02:00
*/
2025-05-17 17:40:15 +02:00
2025-05-12 00:16:13 +02:00
//Create
public bool TryAddEntry(Vector2I key, FieldBehaviour2D field)
{
if (!fields.ContainsKey(key))
{
fields.Add(key, field);
2025-06-15 19:37:57 +02:00
EmitSignal(SignalName.FieldCreated);
2025-05-12 00:16:13 +02:00
return true;
}
return false;
}
// Read
public FieldBehaviour2D Get(Vector2I key)
{
if (fields.TryGetValue(key, out FieldBehaviour2D field))
return field;
return field;
return null;
}
//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);
}
}
}