示例#1
0
    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;
 }