using GeometryTD.Definition; using UnityEngine; namespace GeometryTD.UI { public class CombineArea : MonoBehaviour { [SerializeField] private CombineSlotItem[] _slots; public void OnInit(CombineAreaContext context) { if (_slots == null) { return; } for (int i = 0; i < _slots.Length; i++) { if (_slots[i] != null) { _slots[i].OnInit(i); } } } public void OnReset() { if (_slots == null) { return; } foreach (var slot in _slots) { if (slot != null) { slot.OnReset(); } } } public void OnCombineClick() { // TODO: Combine logic. } public bool TryAssignItem(RepoItemContext itemContext) { if (itemContext == null || itemContext.ComponentSlotType == TowerCompSlotType.None) { return false; } CombineSlotItem targetSlot = FindSlot(itemContext.ComponentSlotType); if (targetSlot == null || targetSlot.HasItem) { return false; } targetSlot.BindItem(itemContext); return true; } public bool TryClearSlot(int slotIndex, out long removedItemId) { removedItemId = 0; if (_slots == null || slotIndex < 0 || slotIndex >= _slots.Length) { return false; } CombineSlotItem slot = _slots[slotIndex]; if (slot == null || !slot.HasItem) { return false; } removedItemId = slot.BoundItemId; slot.ClearSlot(); return true; } private CombineSlotItem FindSlot(TowerCompSlotType slotType) { if (_slots == null) { return null; } for (int i = 0; i < _slots.Length; i++) { CombineSlotItem slot = _slots[i]; if (slot != null && slot.AcceptSlotType == slotType) { return slot; } } return null; } } }