Files

102 lines
2.9 KiB
C#
Raw Permalink Normal View History

using Babushka.scripts.CSharp.Common.CharacterControls;
using Babushka.scripts.CSharp.Common.Inventory;
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;
[Export] private Player2D _player2d;
[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();
_player2d.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>
/// Enables the character movement in the Player2D script.
/// </summary>
public void EnableMovement()
{
_player2d.InputEnabled = true;
}
/// <summary>
/// Disables the character movement in the Player2D script.
/// </summary>
public void DisableMovement()
{
_player2d.InputEnabled = false;
}
2025-05-12 00:16:13 +02:00
}