Пример #1
0
    /// <summary>
    /// Adds the inventory slots.
    /// </summary>
    private void AddSlots()
    {
        int numSlots = rows * columns;

        _slots = new Slot[numSlots];
        int itemCount = _inventory.Count();

        for (int index = 0; index < numSlots; index++)
        {
            // Add Slot Panel
            GameObject slotPanel = Instantiate(slotPanelPrefab);
            slotPanel.transform.SetParent(slotsPanel.transform, false);
            slotPanel.name = string.Format("Slot {0}", index);

            Slot slotPanelClass = slotPanel.GetComponent <Slot> ();
            slotPanelClass.Index = index;

            _slots [index] = slotPanelClass;

            // Set slot image for all inventory items
            if (itemCount > 0 && _inventory.Get(index) != null)
            {
                Item item = _inventory.Get(index);
                SlotImageCanvas.InstantiateInstance(slotImageCanvasPrefab, item, slotPanel, toolTipPanel, toolTipPanelSecondary, slotResolution, slotResolution);
                itemCount--;
            }
            else
            {
                // Add null values to inventory
                _inventory.Add(null);
            }
        }
    }
Пример #2
0
    /// <summary>
    /// Raises the drop event.
    /// </summary>
    /// <param name="eventData">Event data.</param>
    public void OnDrop(PointerEventData eventData)
    {
        // If slot is empty, drop new item into it
        if (!SlotImage)
        {
            // Potentially only allow certain item types
            SlotImageCanvas slotImageCanvas = SlotImageCanvas.itemBeingDragged.GetComponent <SlotImageCanvas> ();
            if (IsSlotCompatible(slotImageCanvas))
            {
                slotImageCanvas.DropInSlot(this);
            }
        }
        // If slot is filled, swap items
        else
        {
            SlotImageCanvas targetSlotImageCanvas = SlotImage.GetComponent <SlotImageCanvas> ();
            SlotImageCanvas sourceSlotImageCanvas = SlotImageCanvas.itemBeingDragged.GetComponent <SlotImageCanvas> ();
            Slot            sourceSlot            = sourceSlotImageCanvas.GetSlot();

            if (IsSlotCompatible(sourceSlotImageCanvas))
            {
                targetSlotImageCanvas.SwapSlots(targetSlotImageCanvas, sourceSlotImageCanvas, this, sourceSlot);
            }
        }
    }
    /// <summary>
    /// Sets the equipped items.
    /// </summary>
    /// <param name="unit">Unit.</param>
    public void SetEquippedItems(Unit unit)
    {
        _inventorySlots = unit.GetInventorySlots();

        // Delete existing slot image (if exists) before adding new one.
        // TODO: Clearly, this is terrible. Come up with better solution.
        ClearAllSlotImages();
        ClearAttributeText();

        // Iterate over weapons/armor and add
        foreach (Item item in _inventorySlots.GetInventorySlots().Values)
        {
            SetAllAttributesText(item);

            GameObject slotPanel = GetPanelBySlot(item.SlotType).transform.Find("Slot").gameObject;

            RectTransform rectTransform = (RectTransform)slotPanel.transform;
            float         height        = rectTransform.rect.height;
            float         width         = rectTransform.rect.width;

            // Create slot images
            SlotImageCanvas.InstantiateInstance(
                slotImageCanvasPrefab,
                item,
                slotPanel,
                toolTipPanel,
                toolTipPanelSecondary,
                width,
                height
                );
        }
    }
Пример #4
0
    /// <summary>
    /// Swaps the slots of 2 items.
    /// </summary>
    /// <param name="slotImageCanvas1">Slot image canvas1.</param>
    /// <param name="slotImageCanvas2">Slot image canvas2.</param>
    /// <param name="slotImageCanvasSlot1">Slot image canvas slot1.</param>
    /// <param name="slotImageCanvasSlot2">Slot image canvas slot2.</param>
    public void SwapSlots(SlotImageCanvas slotImageCanvas1, SlotImageCanvas slotImageCanvas2, Slot slotImageCanvasSlot1, Slot slotImageCanvasSlot2)
    {
        // Update UI
        UpdateUI(slotImageCanvas1, slotImageCanvasSlot2);
        UpdateUI(slotImageCanvas2, slotImageCanvasSlot1);

        // Sawp Inventory
        _inventoryController.SwapInventory(
            slotImageCanvas1.GetItem(),
            slotImageCanvas2.GetItem(),
            slotImageCanvasSlot1,
            slotImageCanvasSlot2
            );
    }
Пример #5
0
    // ----------------------------- POINTER CLICK EVENTS ----------------------------- //

    /// <summary>
    /// Raises the pointer click event.
    /// </summary>
    /// <param name="eventData">Event data.</param>
    public void OnPointerClick(PointerEventData eventData)
    {
        // Check for double click
        if (eventData.clickCount == 2)
        {
            Slot oldSlot = GetSlot();

            // This item is in inventory
            if (oldSlot.slotType == InventorySlots.SlotType.ANY)
            {
                // Get item slot and see if it's filled
                InventorySlots.SlotType slotType = _item.SlotType;
                Slot equipmentSlot = _inventoryController.GetEquipmentSlot(slotType);
                if (equipmentSlot != null)
                {
                    GameObject slotImageCanvasObject = equipmentSlot.SlotImage;

                    // If there is an item in the equipment slot, swap it out
                    if (slotImageCanvasObject != null)
                    {
                        SlotImageCanvas slotImageCanvas = equipmentSlot.SlotImage.GetComponent <SlotImageCanvas> ();
                        SwapSlots(this, slotImageCanvas, oldSlot, equipmentSlot);
                    }
                    else
                    {
                        // Drop item into slot
                        DropInSlot(equipmentSlot);
                    }

                    // Play SFX
                    PlaySFX();
                }
            }
            // This item is equipped
            else if (oldSlot.slotType != InventorySlots.SlotType.ANY)
            {
                Slot newSlot = _inventoryController.GetFirstOpenSlot();
                if (newSlot != null)
                {
                    // Drop item into slot
                    DropInSlot(newSlot);

                    // Play SFX
                    PlaySFX();
                }
            }
        }
    }
Пример #6
0
    /// <summary>
    /// Updates the UI of the slot image's location.
    /// </summary>
    /// <param name="slotImageCanvas">Slot image canvas.</param>
    /// <param name="newSlot">New slot.</param>
    private void UpdateUI(SlotImageCanvas slotImageCanvas, Slot newSlot)
    {
        // Make slot the parent of the slot canvas/image
        slotImageCanvas.transform.SetParent(newSlot.transform, false);

        // Get height of slot and set the image to that same height just to be safe
        RectTransform rectTransform = (RectTransform)newSlot.transform;
        float         height        = rectTransform.rect.height;
        float         width         = rectTransform.rect.width;

        //rectTransform = (RectTransform)slotImageCanvas.transform.GetChild (0);
        rectTransform           = (RectTransform)slotImageCanvas.transform.Find("SlotImage");
        rectTransform.sizeDelta = new Vector2(width, height);

        rectTransform           = (RectTransform)slotImageCanvas.transform.Find("SlotBackgroundImage");
        rectTransform.sizeDelta = new Vector2(width * 0.85f, height * 0.85f);
    }
Пример #7
0
    /// <summary>
    /// Instantiates the instance.
    /// </summary>
    /// <returns>The instance.</returns>
    /// <param name="slotImageCanvasPrefab">Slot image canvas prefab.</param>
    /// <param name="item">Item.</param>
    /// <param name="slotPanel">Slot panel.</param>
    /// <param name="toolTipPanel">Tool tip panel.</param>
    /// <param name="toolTipPanelSecondary">Tool tip panel secondary.</param>
    /// <param name="width">Width.</param>
    /// <param name="height">Height.</param>
    public static SlotImageCanvas InstantiateInstance(
        Canvas slotImageCanvasPrefab,
        Item item,
        GameObject slotPanel,
        GameObject toolTipPanel,
        GameObject toolTipPanelSecondary,
        float width,
        float height
        )
    {
        // Create canvas for slot image
        Canvas canvas = Instantiate(slotImageCanvasPrefab) as Canvas;

        // Resize canvas
        //RectTransform rectTransform = (RectTransform)canvas.transform;
        //rectTransform.sizeDelta = new Vector2(width, height);
        canvas.transform.SetParent(slotPanel.transform, false);

        // Setup background image
        Image image = canvas.transform.Find("SlotBackgroundImage").GetComponent <Image>();

        image.transform.SetParent(canvas.transform, false);
        image.color = item.TierColor;
        RectTransform rectTransform = (RectTransform)image.transform;

        rectTransform.sizeDelta = new Vector2(width * 0.85f, height * 0.85f);

        // Setup slot image
        image = canvas.transform.Find("SlotImage").GetComponent <Image>();
        image.transform.SetParent(canvas.transform, false);

        // Set icon on slot image
        image.sprite = item.Icon;

        // Resize image size
        rectTransform           = (RectTransform)image.transform;
        rectTransform.sizeDelta = new Vector2(width, height);

        // Pass tool tip info
        SlotImageCanvas slotImage = canvas.transform.GetComponent <SlotImageCanvas> ();

        slotImage.Initialize(toolTipPanel, toolTipPanelSecondary, item);

        return(slotImage);
    }
Пример #8
0
 /// <summary>
 /// Determines whether this slot is compatible with the item trying to be added to it.
 /// </summary>
 /// <returns><c>true</c> if this instance is slot compatible the specified slotImageCanvas; otherwise, <c>false</c>.</returns>
 /// <param name="slotImageCanvas">Slot image canvas.</param>
 private bool IsSlotCompatible(SlotImageCanvas slotImageCanvas)
 {
     return(slotType == InventorySlots.SlotType.ANY || slotType == slotImageCanvas.GetItem().SlotType);
 }