Example #1
0
    public void swapWith(MenuSlot releaseTo)
    {
        MenuSlotItem meTemp           = this.getItem();
        MenuSlotItem youTemp          = releaseTo.getItem();
        bool         changedInventory = false;

        //If the two items can't be combined
        if (!combineSuccess(releaseTo))
        {
            //Maybe add/remove the items to the home inventories
            //tip to future William: only use one | so the evaluation doesn't short curcuit
            changedInventory = changedInventory | maybeAddToInventory(releaseTo);
            changedInventory = changedInventory | maybeRemoveFromInventory(releaseTo);
            changedInventory = changedInventory | releaseTo.maybeAddToInventory(this);
            changedInventory = changedInventory | releaseTo.maybeRemoveFromInventory(this);

            //Swap them
            this.setItem(youTemp);
            releaseTo.setItem(meTemp);
        }

        if (changedInventory && releaseTo.type != SlotType.DisplaySlot)
        {
            HomeBaseUIController hbuic = GetComponentInParent <HomeBaseUIController>();
            hbuic.updateInventoryItemCount();
        }
    }
Example #2
0
    //Gathers all the items in the player inventory and stores them in the home inventory
    public void storeAllItems()
    {
        dropItem();
        //get the 0th home inventory slot
        //MenuSlot storeSlot = homeFlowerSlots[0].GetComponent<MenuSlot>();

        //Loop through the inventory
        for (int ii = 0; ii < fpc.inventorySize; ii += 1)
        {
            //Store the item if it's not null
            MenuSlot     storeItemSlot = playerInventoryContainer.GetChild(ii).GetComponent <MenuSlot>();
            MenuSlotItem storeItem     = storeItemSlot.getItem();
            if (storeItem != null)
            {
                storeItemSlot.storeItem(false);
            }
        }

        updateInventoryItemCount();

        //If the player is in the flower tab then refresh the tab
        if (currentTab == TabType.Flowers)
        {
            SetFlowersTab();
        }
    }
Example #3
0
    private bool combineSuccess(MenuSlot releaseTo)
    {
        MenuSlotItem meTemp  = this.getItem();
        MenuSlotItem youTemp = releaseTo.getItem();

        //If the two items should be merged
        if (this.getItem() != null && releaseTo.getItem() != null && meTemp.id == youTemp.id && meTemp.isFlower == youTemp.isFlower)
        {
            HomeBaseUIController hbuic = GetComponentInParent <HomeBaseUIController>();
            if (releaseTo.type == SlotType.PlayerInventory)//if moving to inventory
            {
                hbuic.addHomeInventoryItem(releaseTo.getItem().id, -releaseTo.getItem().count, releaseTo.getItem().isFlower);
            }
            else if (this.type == SlotType.PlayerInventory)//if moving out of inventory
            {
                hbuic.addHomeInventoryItem(this.getItem().id, this.getItem().count, this.getItem().isFlower);
            }
            //Set the other item's count
            int oldCount = releaseTo.getItem().count;
            //Destroy the item in the other slot because the grabbed item will be stored
            GameObject.Destroy(releaseTo.getItem().gameObject);
            //Set the other slot to the grabbed item
            releaseTo.setItem(this.getItem());
            releaseTo.setCount(oldCount + this.getItem().count);


            //Clear the item in the grabbed slot
            this.setItem(null);

            //It was successful so return true
            return(true);
        }
        return(false);
    }
Example #4
0
    //Shifts all the flowers to the next slot in the list
    public void reSortFlowerList()
    {
        if (currentTab == TabType.Flowers)
        {
            int          ii           = 0;
            MenuSlotItem previousItem = null;
            while (ii < homeFlowerSlots.Count)
            {
                MenuSlot fromSlot = homeFlowerSlots[ii].GetComponent <MenuSlot>();

                MenuSlotItem tempItem = fromSlot.getItem();

                fromSlot.setItemNoSort(previousItem);
                previousItem = tempItem;

                //Break out of the lop
                if (previousItem == null)
                {
                    break;
                }
                ii += 1;
            }

            if (previousItem != null)
            {
                Destroy(previousItem.gameObject);
            }
        }
    }
Example #5
0
    //Returns the first slot wit hthe gien item
    public MenuSlot findSlotWithItem(MenuSlotItem inItem)
    {
        //Grab all the slots
        MenuSlot[] slots = GameObject.FindObjectsOfType <MenuSlot>();

        //Loop through the slots
        foreach (MenuSlot s in slots)
        {
            //If the slot is in the home inventory or the display slot
            //(both slots hold items that are currently "in" the home inventory
            if (s.type == MenuSlot.SlotType.HomeInventory || s.type == MenuSlot.SlotType.DisplaySlot || s.type == MenuSlot.SlotType.DecorationSlot)
            {
                //If there's an item at the slot
                if (s.getItem() != null)
                {
                    //If it matches id and isFlower
                    if (s.getItem().id == inItem.id && s.getItem().isFlower == inItem.isFlower)
                    {
                        return(s);
                    }
                }
            }
        }
        return(null);
    }
Example #6
0
    private void FillPlayerInventoryPanel()
    {
        //Get the player's inventory
        UIControllerScript uic            = otherCanvas.GetComponent <UIControllerScript>();
        List <Placeable>   inventoryData  = uic.getInventoryData();
        List <int>         inventoryCount = uic.getInventoryCount();

        //Get the panel to add to
        RectTransform pip = GameObject.Find("playerInventoryPanel").GetComponent <RectTransform>();

        for (int ii = 0; ii < fpc.inventorySize; ii++)
        {
            //Add item to player inventory rect
            //Build the slot regardless of whether or not it will be empty
            GameObject slotObject = Instantiate(playerInventorySlotPrefab, pip);
            MenuSlot   slot       = slotObject.GetComponent <MenuSlot>();
            slot.slotIndex = ii;

            //Add an item to the slot if it shouldn't be empty
            if (inventoryData[ii] != null && inventoryCount[ii] > 0)
            {
                //Add the slot item to the slot
                GameObject   itemObject = Instantiate(slotItemPrefab, slot.GetComponent <RectTransform>());
                MenuSlotItem item       = itemObject.GetComponent <MenuSlotItem>();
                item.setID(inventoryData[ii].id, inventoryData[ii].isFlower);
                item.setCount(inventoryCount[ii]);

                slot.GetComponent <MenuSlot>().setItem(item);
            }
        }
    }
Example #7
0
    private GameObject newSlotItem(uint id, int count, bool isFlower)
    {
        HomeBaseUIController hbuic        = GetComponentInParent <HomeBaseUIController>();
        GameObject           resultObject = GameObject.Instantiate(hbuic.slotItemPrefab);
        MenuSlotItem         slotItem     = resultObject.GetComponent <MenuSlotItem>();

        slotItem.count = count;
        slotItem.setID(id, isFlower);
        return(resultObject);
    }
Example #8
0
    public void updateFlowerDisplaySlot(MenuSlotItem item)
    {
        if (currentTab == TabType.Flowers || currentTab == TabType.Decorations)
        {
            GameObject sellButton = GameObject.Find("sellButton");

            //Remove all the listeners because they ended up stacking on top of each other every time the display slot was updated
            sellButton.GetComponent <UnityEngine.UI.Button>().onClick.RemoveAllListeners();

            if (item != null)
            {
                if (item.isFlower)
                {
                    uint sellID    = item.id;
                    int  sellCount = item.count;
                    int  sellPrice = HomeBaseController.instance.getFlowerValue(sellID);
                    sellButton.GetComponentInChildren <Text>().text = sellPrefix + ": " + sellPrice;
                    sellButton.GetComponent <UnityEngine.UI.Button>().interactable = true;
                    sellButton.GetComponent <UnityEngine.UI.Button>().onClick.AddListener(delegate { sellFlower(sellID, 1); });
                    updatePriceBreakdownButton(true);
                }
                else
                {
                    uint sellID           = item.id;
                    int  actuallySellable = 1;
                    try
                    {
                        if (homeDecorationsBought[sellID] < actuallySellable)
                        {
                            actuallySellable = homeDecorationsBought[sellID];
                        }
                    }
                    catch { actuallySellable = 0; }
                    int sellPrice = (int)(decorationValue[(uint)sellID] * 0.75f) * actuallySellable;
                    sellButton.GetComponentInChildren <Text>().text = sellPrefix + ": " + sellPrice;
                    sellButton.GetComponent <UnityEngine.UI.Button>().interactable = true;
                    sellButton.GetComponent <UnityEngine.UI.Button>().onClick.AddListener(delegate { sellDecoration(sellID, 1); });
                    updatePriceBreakdownButton(false, sellID, item.count);
                }
            }
            else
            {
                sellButton.GetComponentInChildren <Text>().text = sellPrefix;
                sellButton.GetComponent <UnityEngine.UI.Button>().interactable = false;
                if (currentTab == TabType.Flowers)
                {
                    updatePriceBreakdownButton(true);
                }
                else if (currentTab == TabType.Decorations)
                {
                    updatePriceBreakdownButton(false);
                }
            }
        }
    }
Example #9
0
 public void setItemNoSort(MenuSlotItem item)
 {
     this.item = item;
     if (item != null)
     {
         item.GetComponent <RectTransform>().SetParent(gameObject.GetComponent <RectTransform>(), false);
         item.GetComponent <RectTransform>().localPosition = Vector3.zero;
         GetComponent <RectTransform>().ForceUpdateRectTransforms();
         item.GetComponent <RectTransform>().sizeDelta = Vector2.zero;
     }
 }
Example #10
0
    private void postSetDecorationsTab()
    {
        Transform grid     = currentPageObject.transform.Find("decorationInventoryHolder");
        Canvas    myCanvas = transform.GetComponentInParent <Canvas>();

        GetComponent <RectTransform>().ForceUpdateRectTransforms();

        float rectWidth  = grid.GetComponent <RectTransform>().rect.width *myCanvas.scaleFactor * .5f;
        float rectHeight = grid.GetComponent <RectTransform>().rect.height *myCanvas.scaleFactor * .5f;

        rectHeight = Mathf.Min(rectWidth * .75f, rectHeight);

        List <GameObject> slotList = new List <GameObject>();

        for (int ii = 0; ii < 4; ii += 1)
        {
            uint itemID = (uint)decorationTabIDs[decorationTab, ii];

            //GetComponent<RectTransform>().ForceUpdateRectTransforms();
            GameObject seller = Instantiate(decorationPurchasePrefab, grid);

            GameObject slot = Instantiate(homeInventorySlotPrefab, seller.GetComponent <RectTransform>());
            slotList.Add(slot);

            Text priceText = seller.GetComponentInChildren <Text>();
            slot.transform.SetAsFirstSibling();
            slot.GetComponent <MenuSlot>().slotIndex = 0;
            slot.GetComponent <MenuSlot>().type      = MenuSlot.SlotType.DecorationSlot;
            GameObject   item       = Instantiate(slotItemPrefab, slot.GetComponent <RectTransform>());
            MenuSlotItem itemObject = item.GetComponent <MenuSlotItem>();
            itemObject.setID(itemID, false);
            itemObject.setCount(getHomeInventoryCount(itemID, false));

            slot.GetComponent <MenuSlot>().setItemNoSort(itemObject);
            slot.GetComponent <MenuSlot>().getItem().updateModelScale(rectWidth * .5f, rectHeight);

            GameObject buyButtom = seller.transform.GetComponentInChildren <UnityEngine.UI.Button>().gameObject;

            priceText.text = "PRICE: " + decorationValue[(uint)decorationTabIDs[decorationTab, ii]];
            buyButtom.GetComponent <UnityEngine.UI.Button>().onClick.AddListener(delegate { purchaseDecoration(itemID, slot.GetComponent <MenuSlot>()); });
            buyButtom.GetComponentInChildren <Text>().text = "BUY";
        }

        GameObject priceBreakdownButton = GameObject.Find("priceBreakdownButton");

        priceBreakdownButton.GetComponentInChildren <Text>().text = sellAllPrefix;
        grid.GetComponent <GridLayoutGroup>().cellSize            = new Vector2(rectWidth, rectHeight);

        //LayoutRebuilder.ForceRebuildLayoutImmediate(GetComponent<RectTransform>());
        GetComponent <RectTransform>().ForceUpdateRectTransforms();
        updatePriceBreakdownButton(false);
        //Set up the sell display slot
        updateFlowerDisplaySlot(null);
    }
Example #11
0
 public void setCount(int count)
 {
     this.getItem().setCount(count);
     if (this.type != SlotType.DecorationSlot)
     {
         if (this.getItem().count <= 0)
         {
             GameObject.Destroy(this.getItem().gameObject);
             this.item = null;
         }
     }
 }
Example #12
0
 private void purchaseDecoration(uint id, MenuSlot item)
 {
     if (grabbedSlot == null)
     {
         if (fpc.money >= decorationValue[(uint)id])
         {
             if (!homeDecorationsBought.ContainsKey(id))
             {
                 homeDecorationsBought.Add(id, 0);
             }
             homeDecorationsBought[id] += 1;
             fpc.money -= decorationValue[(uint)id];
             updateMoneyText();
             bool      pushedToInventory    = false;
             Transform playerInventoryPanel = GameObject.Find("playerInventoryPanel").transform;
             for (int i = 0; i < 10 && pushedToInventory == false; i++)
             {
                 if (playerInventoryPanel.GetChild(i).childCount != 0)
                 {
                     MenuSlotItem msi = playerInventoryPanel.GetChild(i).GetChild(0).GetComponent <MenuSlotItem>();
                     if (msi.isFlower == false && msi.id == id)
                     {
                         msi.setCount(msi.count + 1);
                         pushedToInventory = true;
                     }
                 }
             }
             if (!pushedToInventory)
             {
                 item.setCount(item.getCount() + 1);
                 addHomeInventoryItem(id, 1, false);
             }
             for (int i = 0; i < 10 && pushedToInventory == false; i++)
             {
                 if (playerInventoryPanel.GetChild(i).childCount == 0)
                 {
                     item.releaseItem(playerInventoryPanel.GetChild(i).GetComponent <MenuSlot>());
                     pushedToInventory = true;
                 }
             }
         }
     }
 }
Example #13
0
    public void setItem(MenuSlotItem item)
    {
        if (item == null)
        {
            //If it's a decoration slot then set the count to 0
            if (this.type == SlotType.DecorationSlot)
            {
                //Make a new item for this slot
                uint         id      = this.getItem().id;
                MenuSlotItem newItem = newSlotItem(id, 0, false).GetComponent <MenuSlotItem>();
                this.setItem(newItem);
            }
            else //If it's anything other than a decoration slot then clear it
            {
                this.item = null;
            }
        }
        else
        {
            this.item = item;
            item.GetComponent <RectTransform>().SetParent(gameObject.GetComponent <RectTransform>(), false);
            item.GetComponent <RectTransform>().localPosition = Vector3.zero;
            GetComponent <RectTransform>().ForceUpdateRectTransforms();
            item.GetComponent <RectTransform>().sizeDelta = Vector2.zero;
            if (slotIndex == 0)
            {
                HomeBaseUIController hbuic = GetComponentInParent <HomeBaseUIController>();
                hbuic.reSortFlowerList();
            }
            prepareUpdateScale();
        }

        if (type == SlotType.DisplaySlot)
        {
            HomeBaseUIController hbuic = GetComponentInParent <HomeBaseUIController>();
            hbuic.updateFlowerDisplaySlot(this.getItem());
        }
    }
Example #14
0
    private void postSetFlowersTab()
    {
        //Fill in the display inventory
        if (searchMask != 0)
        {
            displayInventory = new Dictionary <uint, int>();

            for (int ii = 0; ii < homeFlowerInventory.Keys.Count; ii++)
            {
                if (shouldDisplayFlower(homeFlowerInventory.Keys.ElementAt(ii)))
                {
                    displayInventory.Add(homeFlowerInventory.Keys.ElementAt(ii), homeFlowerInventory.Values.ElementAt(ii));
                }
            }
        }
        else
        {
            displayInventory = homeFlowerInventory;
        }

        //Just add some slots and things
        GameObject flowerGridObject = GameObject.Find("flowerGrid");
        Transform  grid             = flowerGridObject.transform;

        //Figure out how many flowers to put on each page
        Canvas myCanvas   = transform.GetComponentInParent <Canvas>();
        float  rectWidth  = grid.GetComponent <RectTransform>().rect.width *myCanvas.scaleFactor;
        float  rectHeight = grid.GetComponent <RectTransform>().rect.height *myCanvas.scaleFactor;

        Debug.Log(rectWidth + "," + rectHeight + "  with a scale factor of " + myCanvas.scaleFactor);
        int gridWidth  = (int)Mathf.Floor(rectWidth / slotSize);
        int gridHeight = (int)Mathf.Floor(rectHeight / slotSize);

        flowersPerPage = (gridHeight * gridWidth) - 1;

        //Add an empty slot
        //Fill the screen with flowers and slots
        int startPosition = flowersPerPage * currentFlowerPage;

        Debug.Log("start position is: " + startPosition);

        //Loop and fill the page with the right flowers
        for (int ii = startPosition; ii <= Mathf.Min(startPosition + flowersPerPage - 1, displayInventory.Count - 1); ii += 1)
        {
            uint flowerID = displayInventory.Keys.ElementAt(ii);
            int  count    = displayInventory.Values.ElementAt(ii);

            if (shouldDisplayFlower(flowerID))
            {
                GameObject slot = Instantiate(homeInventorySlotPrefab, grid);
                slot.GetComponent <MenuSlot>().slotIndex = ii;
                GameObject   item       = Instantiate(slotItemPrefab, slot.GetComponent <RectTransform>());
                MenuSlotItem itemObject = item.GetComponent <MenuSlotItem>();
                itemObject.setID(flowerID, true);
                itemObject.setCount(count);

                slot.GetComponent <MenuSlot>().setItem(itemObject);
                homeFlowerSlots.Add(slot);
            }
        }

        //If there are more flowersPerPage than flowers in the home inventory then...
        //fill in the rest of the screen with blank slots
        int ss = homeFlowerSlots.Count; //this is just for setting indexes

        while (homeFlowerSlots.Count <= flowersPerPage)
        {
            GameObject slot = Instantiate(homeInventorySlotPrefab, grid);
            slot.GetComponent <MenuSlot>().slotIndex = ss;
            homeFlowerSlots.Add(slot);
            ss += 1;
        }

        setPageCountText();
        updatePriceBreakdownButton(true);
        //Set up the sell display slot
        updateFlowerDisplaySlot(null);
    }