Files
Babushka/scripts/CSharp/Common/Farming/VesnaBehaviour2D.cs
T

105 lines
3.1 KiB
C#
Raw Normal View History

2025-08-02 15:08:38 +02:00
using Babushka.scripts.CSharp.Common.Animation;
using Babushka.scripts.CSharp.Common.CharacterControls;
using Babushka.scripts.CSharp.Common.Inventory;
2025-08-02 15:08:38 +02:00
using Babushka.scripts.CSharp.Common.Services;
2025-05-12 00:16:13 +02:00
using Godot;
namespace Babushka.scripts.CSharp.Common.Farming;
public partial class VesnaBehaviour2D : Node
{
[ExportGroup("Farming")]
[Export] private FieldService2D _fieldParent;
[Export] private FarmingControls2D _farmingControls;
2025-08-02 15:08:38 +02:00
[Export] private PlayerMovement _player2d;
[Export] private VesnaAnimations _vesnaAnimations;
[Export] private ItemResource _hoe;
[Export] private ItemResource _wateringCan;
2025-05-12 00:16:13 +02:00
[Signal] public delegate void PickedUpToolEventHandler(bool success, int toolId);
2025-06-15 19:44:16 +02:00
[Signal] public delegate void FilledWateringCanEventHandler();
2025-07-05 17:34:03 +02:00
[Signal] public delegate void InventorySelectionChangedEventHandler(int toolId);
2025-05-12 00:16:13 +02:00
private InventoryManager _inventoryManager;
private InventoryInstance _inventoryInstance;
2025-05-12 00:16:13 +02:00
public override void _Ready()
{
2025-05-18 11:44:33 +02:00
_farmingControls.FieldService = _fieldParent;
_inventoryManager = InventoryManager.Instance;
_inventoryInstance = _inventoryManager.playerInventory;
_inventoryManager.SlotIndexChanged += HandleInventorySelectedSlotIndexChanged;
}
2025-07-05 13:18:19 +02:00
/// <summary>
/// Called when picking up an item.
/// Makes sure that item animations are also updated when they are occupying a currently empty spot.
/// </summary>
public void HandlePickUp()
{
//Calls the same event handler as the inventory to ensure the currently selected item is updated in the animation.
HandleInventorySelectedSlotIndexChanged(0);
}
2025-07-05 13:18:19 +02:00
private void HandleInventorySelectedSlotIndexChanged(int newIndex = 0)
{
InventorySlot currentSlot = InventoryManager.Instance.GetCurrentSelectedSlot();
ItemInstance? currentItem = currentSlot.itemInstance;
if (currentItem == null)
return;
2025-07-05 17:34:03 +02:00
int toolId = -1;
if (currentItem.blueprint == _hoe)
{
2025-07-05 17:34:03 +02:00
toolId = 0;
}
if (currentItem.blueprint == _wateringCan)
{
2025-07-05 17:34:03 +02:00
toolId = 1;
}
2025-07-05 17:34:03 +02:00
ActivateTool(toolId);
EmitSignal(SignalName.InventorySelectionChanged, toolId);
2025-05-12 00:16:13 +02:00
}
#region Farming
public void ActivateTool(int toolId)
2025-05-12 00:16:13 +02:00
{
bool activated = _farmingControls.TryActivateTool(toolId);
EmitSignal(SignalName.PickedUpTool, activated, toolId);
2025-05-12 00:16:13 +02:00
}
2025-05-18 11:44:33 +02:00
public void TryFillWateringCan(int toolId)
{
if (toolId == 1)
{
2025-07-05 17:34:03 +02:00
_farmingControls.FillWateringCan();
2025-08-02 15:08:38 +02:00
_vesnaAnimations.PlayWateringCanFillupAnimation();
2025-06-15 19:44:16 +02:00
EmitSignal(SignalName.FilledWateringCan);
2025-05-18 11:44:33 +02:00
}
}
2025-05-12 00:16:13 +02:00
#endregion
/// <summary>
2025-08-02 15:08:38 +02:00
/// Enables the input.
/// </summary>
public void EnableMovement()
{
2025-08-02 15:08:38 +02:00
InputService.Instance.InputEnabled = true;
}
/// <summary>
2025-08-02 15:08:38 +02:00
/// Disables the input.
/// </summary>
public void DisableMovement()
{
2025-08-02 15:08:38 +02:00
InputService.Instance.InputEnabled = false;
}
2025-05-12 00:16:13 +02:00
}