public void OnDrop(PointerEventData eventData) { ItemDisplayer dragged = master.GetDragged; if (dragged != null) { master.EndDrag(InventoryPanel.EndDragPosition.original); if (dragged.isInventory) { master.playerEquipment.EquipArms(dragged.itemIndex, slot); } else { var equipment = master.playerEquipment; Armament.Slot draggedFromSlot = (Armament.Slot)dragged.itemIndex; ArmamentPrefab prefab = equipment.GetArms(draggedFromSlot); if (prefab == null) { Debug.LogError("dragged equipment slot is invalid", this); } foreach (var equippedSlot in prefab.usedSlots) { if (equippedSlot == slot) { return; } } prefab.armsScriptable.EquipRequirements(equipment, slot, out _, out bool onlyEmpty); if (onlyEmpty && equipment.CanUnequip()) { ArmamentPrefab previous = equipment.GetArms(slot); bool hasPrevious = previous != null; Armament previousArms = null; if (hasPrevious) { previousArms = previous.armsScriptable; } if (equipment.EquipArms(prefab.armsScriptable, slot)) { equipment.UnequipArms(draggedFromSlot, -1, true); if (hasPrevious) { equipment.FindItem(previousArms, out _, out int previousIndex); equipment.EquipArms(previousIndex, draggedFromSlot); } } } } } }
private void OnEquipmentUpdate(Armament.Slot slot, ArmamentPrefab prefab) { ItemDisplayer displayer = itemDisplayers[(int)slot]; if (prefab == null) { if (displayer == null) { //no changes needed return; } else { //displayer needs to be removed master.displayersPool.RemoveObject(displayer.gameObject); itemDisplayers[(int)slot] = null; } } else { ItemDisplayer itemDisplayer; Armament arms = prefab.armsScriptable; if (displayer == null) { //displayer needs to be created itemDisplayer = itemDisplayers[(int)slot] = master.displayersPool.GenerateObject(equipmentSlots[(int)slot], 0) .GetComponent <ItemDisplayer>(); itemDisplayer.transform.localPosition = Vector3.zero; itemDisplayer.master = master; itemDisplayer.isInventory = false; itemDisplayer.itemIndex = (int)slot; itemDisplayer.SetIcon(arms.icon); } else { itemDisplayer = itemDisplayers[(int)slot]; } itemDisplayer.SetCount(prefab.usedSlots.Length); } }
public void ResetPosition(Armament.Slot slot) { itemDisplayers[(int)slot].transform.SetParent(equipmentSlots[(int)slot]); itemDisplayers[(int)slot].transform.localPosition = Vector3.zero; }