Пример #1
0
 public void AddItem(InventoryItemStack pItem, InventoryUI pFrom)
 {
     if (Station != null)
     {
         Station.AddItem(pItem.ContainedItem);
     }
 }
Пример #2
0
    public void Interact()
    {
        if (SupplySlots.Count <= 0)
        {
            return;
        }
        InventoryItemStack currentItem = Toolbar.Instance.SelectedSlot.ReferencedItemStack;

        if (currentItem == null)
        {
            return;
        }
        BuildingMaterial currentSlot = new BuildingMaterial();
        bool             foundSlot   = false;
        int i = 0;

        for (i = i; i < SupplySlots.Count - 1; i++)
        {
            if (SupplySlots[i].ContainedItem.ID == currentItem.ContainedItem.ID)
            {
                if (SupplySlots[i].CurrentAmount >= SupplySlots[i].TargetAmount)
                {
                    return;
                }
                break;
            }
        }
        currentSlot = SupplySlots[i];
        currentSlot.CurrentAmount += 1;
        SupplySlots[i]             = currentSlot;
        FindObjectOfType <PlayerInventory>().RemoveFromStack(currentItem);
    }
Пример #3
0
    public uint RemoveFromStack(InventoryItemStack itemStack, uint amount = 1)
    {
        uint i = 0;

        for (i = 0; i < amount; i++)
        {
            itemStack.Remove(1);
            CurrentWeight -= itemStack.ContainedItem.Weight;
            if (itemStack.Amount <= 0)
            {
                itemStack.Delete();
                ContainedStacks.Remove(itemStack);
                i++;
                break;
            }
        }
        if (OnItemChanged != null)
        {
            OnItemChanged();
        }
        for (i = 0; i < amount; i++)
        {
            PixelCrushers.MessageSystem.SendMessage(gameObject, "LoseItem", itemStack.ContainedItem.Name);
        }
        return(i);
    }
Пример #4
0
    public void Setup(List <BuildingMaterial> pMaterials, ConstructionSite pSite)
    {
        Site = pSite;
        ConfirmButton.interactable = true;

        SupplySlotUI[] children = ItemsContainer.GetComponentsInChildren <SupplySlotUI>();

        foreach (SupplySlotUI child in children)
        {
            if (child != ItemsContainer.transform)
            {
                Destroy(child.gameObject);
            }
        }

        foreach (BuildingMaterial material in pMaterials)
        {
            InventoryItemStack boxStack = Site.Box.FindItemStack(material.ContainedItem);
            int amount = 0;
            if (boxStack != null)
            {
                amount = boxStack.Amount;
            }
            SupplySlotUI slot = Instantiate(SlotUI, ItemsContainer.transform);
            slot.ItemIcon.sprite = material.ContainedItem.Icon;
            slot.NameText.text   = material.ContainedItem.Name;
            slot.AmountText.text = amount + "/" + material.TargetAmount;
            if (boxStack == null || boxStack.Amount < material.TargetAmount)
            {
                ConfirmButton.interactable = false;
            }
        }

        GetComponent <WindowToggle>().Toggle();
    }
Пример #5
0
 public void RemoveFromBasket(InventoryItemStack pStack)
 {
     StoreInventory.Add(pStack.ContainedItem, 1);
     BasketInventory.RemoveFromStack(pStack, 1);
     DrawStore();
     DrawBasket();
 }
Пример #6
0
    public void DropItem(InventoryItemStack itemStack, uint amount = 1)
    {
        uint    DropAmount = RemoveFromStack(itemStack, amount);
        Vector3 newPos     = transform.position;

        newPos.y -= 0.16f;
        ItemSpawner.Instance.SpawnItems(itemStack.ContainedItem, newPos, DropAmount);
    }
Пример #7
0
 private void UseRecipe(ItemRecipe pItem, InventoryItemStack pStack)
 {
     if (CraftingManager.Instance.TeachRecipe(pItem.Recipe.UniqueName))
     {
         if (pItem.Consumable == true)
         {
             PlayerInventory.RemoveFromStack(pStack, 1);
         }
     }
 }
Пример #8
0
    public void ChangeItem(InventoryItemStack pItemStack)
    {
        if (pItemStack != null)
        {
            return;
        }
        //	print (pItemStack);
        //If an item stack is specified
        if (pItemStack != null && pItemStack.Amount > 0)
        {
            // If the slot already referenced an item stack, unsubscribe from its item change
            if (ReferencedItemStack != null)
            {
                ReferencedItemStack.OnItemChanged -= UpdateItem;
            }
            // Set the reference stack to the specified stack and subscribe to its item change event
            ReferencedItemStack = pItemStack;
            ReferencedItemStack.OnItemChanged += UpdateItem;

            UpdateVisuals();

            // If stack was referenced by another slot, remove the reference
            foreach (ToolbarSlotUI slot in Toolbar.Instance.Slots)
            {
                if (slot != this && slot.ReferencedItemStack == this.ReferencedItemStack)
                {
                    slot.ChangeItem(null);
                }
            }
        }
        else if (pItemStack == null || pItemStack.Amount <= 0)
        {
            // unsubscribe from item change event
            if (ReferencedItemStack != null)
            {
                ReferencedItemStack.OnItemChanged -= UpdateItem;
            }

            //		print(gameObject.name + " set null item stack ref");
            // remove reference and update visuals
            ReferencedItemStack = null;
            UpdateVisuals();
        }

        //		if (ReferencedItemStack != null) {
        //			Tool.GridItem = ItemSystemUtility.GetItemCopy (ReferencedItemStack.Item.itemID, ItemType.GridItem) as ItemGrid;
        //		} else {
        //			Tool.GridItem = null;
        //		}
        // Call item change event
        if (OnSlotItemChanged != null)
        {
            OnSlotItemChanged();
        }
    }
Пример #9
0
    private void UseFood(ItemFood pItem, InventoryItemStack pStack)
    {
        PixelCrushers.MessageSystem.SendMessage(GameManager.Instance.Player, "EatItem", pStack.ContainedItem.Name);

        PlayerNeedManager.Instance.GetNeed("Energy").Change(pItem.EnergyRegen);

        if (pItem.Consumable == true)
        {
            PlayerInventory.RemoveFromStack(pStack, 1);
        }
    }
Пример #10
0
    public void AddFuel(InventoryItemStack pItemStack)
    {
        ItemMaterial item = pItemStack.ContainedItem as ItemMaterial;

        MinutesLeft = Mathf.Clamp(MinutesLeft += item.BurnTime, 0, 10000f);
        FindObjectOfType <PlayerInventory>().RemoveFromStack(pItemStack, 1);

        if (WoodSprite != null)
        {
            WoodSprite.SetActive(true);
        }
    }
Пример #11
0
        public void Interact()
        {
            InventoryItemStack stack = Toolbar.Instance.SelectedSlot.ReferencedItemStack;

            if (stack != null)
            {
                ItemBase item = stack.ContainedItem;
                if (item.Type == ItemSystem.ItemTypes.Food && (item as ItemFood).BlossomFeed == true)
                {
                    FillBowl(item as ItemFood);
                }
            }
        }
Пример #12
0
 public bool CheckMaterials()
 {
     foreach (BuildingMaterial material in Building.Materials)
     {
         InventoryItemStack boxStack = Box.FindItemStack(material.ContainedItem);
         if (boxStack == null)
         {
             return(false);
         }
         if (boxStack.Amount < material.TargetAmount)
         {
             return(false);
         }
     }
     return(true);
 }
Пример #13
0
    void DrawItem(InventoryItemStack pStack)
    {
        if (pStack != null)
        {
            ItemUIPrefab.GetComponent <Button>().interactable = true;
            ItemUIPrefab.ItemIcon.color = Color.white;

            ItemUIPrefab.ItemIcon.sprite = pStack.ContainedItem.Icon;
            ItemUIPrefab.ItemAmount.text = pStack.Amount.ToString();
        }
        else
        {
            ItemUIPrefab.GetComponent <Button>().interactable = false;
            ItemUIPrefab.ItemIcon.color  = new Color(0, 0, 0, 0);
            ItemUIPrefab.ItemAmount.text = "";
        }

        ItemStackUI itemUI = Instantiate(ItemUIPrefab, ItemUIContainer);

        itemUI.Button    = itemUI.GetComponent <Button>();
        itemUI.ItemStack = pStack;

        DrawnItems.Add(itemUI);
        itemUI.Button.onClick.AddListener(delegate
        {
            SetSelectedItem(pStack);
        });


        if (TransferUI != null && TransferUI.IsOpen)
        {
            itemUI.Button.onClick.AddListener(delegate
            {
                TransferUI.TransferItem(pStack, this);
            });
        }

        else if (CraftingInputUI != null && CraftingInputUI.IsOpen)
        {
            itemUI.Button.onClick.AddListener(delegate
            {
                CraftingInputUI.AddItem(pStack, this);
            });
        }
    }
Пример #14
0
    private void UseBottle(ItemBottle pItem, InventoryItemStack pStack)
    {
        if (pItem.HeldLiquid == null)
        {
            return;
        }
        //remove liquid
        pItem.CurrentCharge--;
        //use liquid
        UseFood(pItem.HeldLiquid, pStack);

        if (pItem.CurrentCharge == 0)
        {
            PlayerInventory.RemoveFromStack(Toolbar.Instance.SelectedSlot.ReferencedItemStack, 1);
            ItemBottle newBottle = ItemSystem.Instance.GetItemClone("Empty Bottle") as ItemBottle;
            ItemSpawner.Instance.SpawnItems(newBottle, Player.transform.position, 1);
        }
    }
Пример #15
0
    public bool CheckIncreaseIngredientAmount(StationItem pItem, int pAmount)
    {
        if (pItem == null)
        {
            return(false);
        }
        InventoryItemStack stack = GameManager.Instance.Player.GetComponent <PlayerInventory>().FindItemStack(pItem.ContainedItem);

        if (stack == null)
        {
            return(false);
        }
        if (stack.Amount >= pItem.Amount + pAmount)
        {
            return(true);
        }
        return(false);
    }
    public void DoTransfer()
    {
        if (From.SelectedItem == null || From.SelectedItem.ID == 0)
        {
            return;
        }
        ItemBase           item          = ItemSystem.Instance.GetItemClone(From.SelectedItem.ID);
        InventoryItemStack selectedStack = From.SelectedStack;


        int amountAdded = To.CurrentStorage.Add(item, (uint)Amount);
        int amountLeft  = (int)Amount - amountAdded;

        if (amountLeft > 0)
        {
            // Debug.LogWarning("Could not add " + amountLeft + " " + item.itemName + " to storage: " + To.CurrentStorage.Name);
        }
    }
Пример #17
0
 public void UseItem(InventoryItemStack pStack)
 {
     if (pStack.ContainedItem.UsableFromToolbar == false)
     {
         return;
     }
     PixelCrushers.MessageSystem.SendMessage(GameManager.Instance.Player, "UseItem", pStack.ContainedItem.Name);
     if (pStack.ContainedItem is ItemBottle)
     {
         UseBottle(pStack.ContainedItem as ItemBottle, pStack);
     }
     if (pStack.ContainedItem is ItemFood)
     {
         UseFood(pStack.ContainedItem as ItemFood, pStack);
     }
     if (pStack.ContainedItem is ItemRecipe)
     {
         UseRecipe(pStack.ContainedItem as ItemRecipe, pStack);
     }
 }
    public void TransferItem(InventoryItemStack pStack, InventoryUI pFrom)
    {
        InventoryUI from = pFrom;
        InventoryUI to;

        if (StorageUI == from)
        {
            to = PlayerInventoryUI;
        }
        else
        {
            to = StorageUI;
        }
        int amount = 1;

        if (Input.GetButton("Toggle 1"))
        {
            amount = pStack.Amount;
        }

        if (from.SelectedItem == null || from.SelectedItem.ID == 0)
        {
            return;
        }
        ItemBase           item          = ItemSystem.Instance.GetItemClone(pStack.ContainedItem.ID);
        InventoryItemStack selectedStack = pStack;


        int amountAdded = to.CurrentStorage.Add(item, (uint)amount);
        int amountLeft  = amount - amountAdded;

        if (amountLeft > 0)
        {
            //inventory full
        }

        from.CurrentStorage.RemoveFromStack(selectedStack, (uint)amountAdded);
    }
Пример #19
0
    public void SetSelectedItem(InventoryItemStack pStack)
    {
        if (pStack != null)
        {
            SelectedItem = pStack.ContainedItem;
        }
        else
        {
            SelectedItem = null;
        }

        if (SelectedItem == null)
        {
            SelectedItem  = new ItemBase();
            SelectedStack = null;
        }

        if (SelectedItem.ID != -1)
        {
            foreach (ItemStackUI itemUI in DrawnItems)
            {
                if (itemUI.ItemStack == null || itemUI.ItemStack.ContainedItem.ID != SelectedItem.ID)
                {
                    itemUI.FrameImage.enabled = false;
                }
                else
                {
                    SelectedStack = itemUI.ItemStack;
                    itemUI.GetComponent <Button>().Select();
                    itemUI.FrameImage.enabled = true;
                }
            }
        }


        DrawSelectedItemInfo();
    }
Пример #20
0
    //Check if inventory items have changed since last open
    public void AdjustAmounts()
    {
        foreach (StationItem item in ChosenItems)
        {
            StorageObject      Inventory = GameManager.Instance.Player.GetComponent <PlayerInventory>();
            InventoryItemStack stack     = Inventory.FindItemStack(item.ContainedItem);
            int itemAmount = Inventory.GetItemAmount(item.ContainedItem);

            if (itemAmount < 1)
            {
                RemoveItem(item.ContainedItem);
                return;
            }
            if (item.Amount > itemAmount)
            {
                int amt = item.Amount - itemAmount;
                amt = Mathf.Abs(amt);
                for (int i = 0; i < amt; i++)
                {
                    DecreaseIngredientAmount(item);
                }
            }
        }
    }
Пример #21
0
    void CheckItems(StorageObject pInventory)
    {
        if (pInventory == null)
        {
            return;
        }
        if (pInventory.UniqueID == InventoryID)
        {
            foreach (ContainedItem wantedTtem in WantedItems)
            {
                InventoryItemStack stack = pInventory.FindItemStack(wantedTtem.Item);
                if (stack == null)
                {
                    return;
                }
                else if (stack.Amount < wantedTtem.Amount)
                {
                    return;
                }
            }

            Event.Invoke();
        }
    }
Пример #22
0
    public void DropItems(int pAmount = 1)
    {
        InventoryItemStack stack = SelectedStack;

        CurrentStorage.DropItem(stack, (uint)pAmount);
    }
Пример #23
0
    public virtual int Add(ItemBase pItem, uint pAmount, bool pDropLeftOvers = false)
    {
        if (IsSellChest == false && pItem.Name == "Coin")
        {
            return(0);
        }
        int amountToAdd = (int)pAmount;

        //don't add more than weight allows

        if (pItem.Weight > 0)
        {
            amountToAdd = Mathf.FloorToInt((MaxWeight - CurrentWeight) / pItem.Weight);
        }

        //don't add more than requested
        amountToAdd = (int)Mathf.Clamp(amountToAdd, 0f, pAmount);


        //        print("Can add amount if stacks allow: " + amountToAdd);
        // If weight cannot be added, return false
        if (amountToAdd < 1)
        {
            DialogueManager.ShowAlert("Inventory can't contain 1.");
            return(0);
        }
        int amountLeft  = amountToAdd;
        int amountAdded = 0;

        //Check for an existing stack
        InventoryItemStack existingStack = FindItemStack(pItem.ID);


        //if there exists a stack, add as much to it as possible
        if (existingStack != null)
        {
            //            print("existing stack");
            int maxAmt = MaxStackAmount - existingStack.Amount;
            amountAdded = Mathf.Clamp(amountToAdd, 0, maxAmt);
            existingStack.Add(amountAdded);
            amountLeft -= amountAdded;
        }

        //if there are still items to add, determine how many stacks are needed, then create as many as possible, while adding as much as possible to them until there are no more items.
        //If the stack space runs out, return the amount added.

        if (amountLeft > 0)
        {
            //            print("amount left: " + amountToAdd);
            int stacksLeft     = MaxStacks - ContainedStacks.Count;
            int requiredStacks = Mathf.CeilToInt((float)amountLeft / (float)MaxStackAmount);
            //   print("required stacks: " + requiredStacks);
            //
            //            print("free stacks: " + stacksLeft);

            if (requiredStacks > stacksLeft)
            {
                requiredStacks = stacksLeft;
            }
            for (int i = 0; i < requiredStacks; i++)
            {
                InventoryItemStack newItemStack = new InventoryItemStack();
                newItemStack.ContainedItem = pItem.Clone(pItem);
                int newAmt = Mathf.Clamp(amountLeft, 0, MaxStackAmount);
                newItemStack.Amount = newAmt;
                amountAdded        += newAmt;
                ContainedStacks.Add(newItemStack);
                amountLeft -= newAmt;
            }
        }
        if (OnItemChanged != null)
        {
            OnItemChanged();
        }

        if (OnAddItem != null)
        {
            OnAddItem(this);
        }
        CurrentWeight += pItem.Weight * amountAdded;

        if (pDropLeftOvers)
        {
            DropLeftOvers(pItem, amountLeft);
        }
        return(amountAdded);
    }