using Babushka.scripts.CSharp.Common.Animation; using Babushka.scripts.CSharp.Common.CharacterControls; using Babushka.scripts.CSharp.Common.Inventory; using Babushka.scripts.CSharp.Common.Services; using Babushka.scripts.CSharp.GameEntity.Entities; using Babushka.scripts.CSharp.GameEntity.Management; using Godot; namespace Babushka.scripts.CSharp.Common.Farming; public partial class VesnaBehaviour2D : Node2D // EntityNode { [ExportGroup("Farming")] [Export] private FarmingControls2D _farmingControls; [Export] public PlayerMovement player2d; [Export] private VesnaAnimations _vesnaAnimations; [Export] private ItemResource _hoe; [Export] private ItemResource _wateringCan; [Signal] public delegate void PickedUpToolEventHandler(bool success, int toolId); [Signal] public delegate void FilledWateringCanEventHandler(); [Signal] public delegate void InventorySelectionChangedEventHandler(int toolId); //private InventoryManager _inventoryManager; private VesnaEntity _vesnaEntity; private InventoryInstance _playerInventory; public override void _Ready() { _vesnaEntity = EntityManager.Instance.GetUniqueEntity(); _playerInventory = _vesnaEntity.inventory; _vesnaEntity.SlotIndexChanged += HandleInventorySelectedSlotIndexChanged; _playerInventory.InventoryContentsChanged += UpdateToolInHand; } public override void _ExitTree() { _vesnaEntity.SlotIndexChanged -= HandleInventorySelectedSlotIndexChanged; _playerInventory.InventoryContentsChanged -= UpdateToolInHand; } private void HandleInventorySelectedSlotIndexChanged(int _ = 0) { UpdateToolInHand(); } private void UpdateToolInHand() { InventorySlot currentSlot = _playerInventory.Slots[_vesnaEntity.CurrentSelectedSlotIndex]; ItemInstance? currentItem = currentSlot.itemInstance; int toolId = -1; if (currentItem != null && currentItem.blueprint == _hoe) { toolId = 0; } if (currentItem != null && currentItem.blueprint == _wateringCan) { toolId = 1; } ActivateTool(toolId); _vesnaAnimations.ActivateTool(toolId >= 0, toolId); EmitSignal(SignalName.InventorySelectionChanged, toolId); } #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(); _vesnaAnimations.PlayWateringCanFillupAnimation(); EmitSignal(SignalName.FilledWateringCan); } } #endregion /// /// Enables the input. /// public void EnableMovement() { InputService.Instance.InputEnabled = true; } /// /// Disables the input. /// public void DisableMovement() { InputService.Instance.InputEnabled = false; } }