using Babushka.scripts.CSharp.Common.CharacterControls; using Babushka.scripts.CSharp.Common.Inventory; 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; [Signal] public delegate void PickedUpToolEventHandler(bool success, int toolId); [Signal] public delegate void FilledWateringCanEventHandler(); private InventoryManager _inventoryManager; private InventoryInstance _inventoryInstance; public override void _Ready() { _farmingControls.FieldService = _fieldParent; _inventoryManager = InventoryManager.Instance; _inventoryInstance = _inventoryManager.playerInventory; _inventoryManager.SlotIndexChanged += HandleInventorySelectedSlotIndexChanged; } private void HandleInventorySelectedSlotIndexChanged(int newIndex) { InventorySlot currentSlot = InventoryManager.Instance.GetCurrentSelectedSlot(); ItemInstance? currentItem = currentSlot.itemInstance; if (currentItem == null) return; if (currentItem.blueprint == _hoe) { ActivateTool(0); return; } if (currentItem.blueprint == _wateringCan) { ActivateTool(1); return; } ActivateTool(-1); } #region Farming public void ActivateTool(int toolId) { bool activated = _farmingControls.TryActivateTool(toolId); EmitSignal(SignalName.PickedUpTool, activated, toolId); } public void TryFillWateringCan(int toolId) { if (toolId == 1) { _farmingControls.FillWateringCan(true); _player2d.PlayWateringCanFillupAnimation(); EmitSignal(SignalName.FilledWateringCan); } } #endregion /// /// Enables the character movement in the Player2D script. /// public void EnableMovement() { _player2d.InputEnabled = true; } /// /// Disables the character movement in the Player2D script. /// public void DisableMovement() { _player2d.InputEnabled = false; } }