Esempio n. 1
0
    /*public void BreakWholeInventory(float value)
     * {
     *      BreakWagon (0, value);
     *      for(int wagonIndex = 0; wagonIndex < PlayerSaveData.reference.wagonData.Count; wagonIndex++)
     *      {
     *              BreakWagon (1 + wagonIndex, value);
     *      }
     * }*/

    IEnumerator UpdateItemsToBreak()
    {
        while (true)
        {
            while (itemsToBreak.Count != 1 + PlayerSaveData.reference.wagonData.Count)
            {
                if (itemsToBreak.Count < 1 + PlayerSaveData.reference.wagonData.Count)
                {
                    itemsToBreak.Add(null);
                }
                else if (itemsToBreak.Count > 1 + PlayerSaveData.reference.wagonData.Count)
                {
                    itemsToBreak.RemoveAt(itemsToBreak.Count - 1);
                }
            }
            //if (itemsToBreak [0] == null || itemsToBreak [0].IsBroken() || !itemsToBreak [0].IsEquipped()) {
            for (int itemIndex = PlayerSaveData.reference.trainData.equippedItems.Length - 1; itemIndex >= 0; itemIndex--)
            {
                InventoryItemObject equippedItem = PlayerSaveData.reference.trainData.equippedItems [itemIndex];
                if (equippedItem != null && !equippedItem.IsBroken())
                {
                    itemsToBreak [0] = equippedItem;
                    break;
                }
            }

            for (int wagonIndex = 0; wagonIndex < PlayerSaveData.reference.wagonData.Count; wagonIndex++)
            {
                if (itemsToBreak [wagonIndex + 1] == null || itemsToBreak [wagonIndex + 1].IsBroken() || !PlayerSaveData.reference.wagonData [wagonIndex].items.Contains(itemsToBreak [wagonIndex + 1]))
                {
                    PlayerSaveData.WagonData wagonData = PlayerSaveData.reference.wagonData [wagonIndex];
                    if (wagonData.items.Count == 0)
                    {
                        continue;
                    }
                    int repairedItemsCount = 0;
                    foreach (InventoryItemObject item in wagonData.items)
                    {
                        if (!item.IsBroken())
                        {
                            repairedItemsCount += 1;
                        }
                    }
                    if (repairedItemsCount == 0)
                    {
                        continue;
                    }
                    int itemIndex = Random.Range(0, repairedItemsCount);
                    foreach (InventoryItemObject item in wagonData.items)
                    {
                        if (!item.IsBroken())
                        {
                            if (itemIndex == 0)
                            {
                                itemsToBreak [wagonIndex + 1] = item;
                                break;
                            }
                            itemIndex -= 1;
                        }
                    }
                }
            }
            yield return(null);
        }
    }
    public void Place(Transform slot)
    {
        //Debug.Log ("place item function is on work");
        // check that slot is correctly set up
        if (slot.GetComponent <UIDragDropContainer> () == null)
        {
            //Debug.Log ("slot is broken!");
            return;
        }

        // check that potential slot is empty or is equipment slot
        if (GetLastSlot() != null)
        {
            if (!InventorySystem.reference.CanPutInSlot(slot, this))
            {
                Place(GetLastSlot());
                return;
            }
        }


        if (!PlayerSaveData.reference.trainData.conditions.CanManageInventory)
        {
            if (InventorySystem.reference.GetSlotInfo(GetLastSlot()) != null)
            {
                if (InventorySystem.reference.GetSlotInfo(GetLastSlot()).type != InventorySystem.reference.GetSlotInfo(slot).type)
                {
                    Place(GetLastSlot());
                    return;
                }
                if (wagonIndex != InventorySystem.reference.GetSlotInfo(slot).wagonIndex)
                {
                    Place(GetLastSlot());
                    return;
                }
            }
        }

        transform.parent        = slot.GetComponent <UIDragDropContainer>().reparentTarget;
        transform.localPosition = new Vector3(0, 0, 0);
        GetComponent <UISprite>().spriteName = info.uiInfo.spriteName;
        GetComponent <UISprite> ().enabled   = false;
        GetComponent <UISprite> ().enabled   = true;


        // remove item from its slot...
        if (GetLastSlot() != null)
        {
            if (InventorySystem.reference.GetSlotInfo(GetLastSlot()).type == InventorySystem.SlotType.Wagon)
            {
                if (PlayerSaveData.reference.wagonData [wagonIndex].items.Contains(this))
                {
                    TakeFromWagon(wagonIndex);
                }
            }
            else if (InventorySystem.reference.GetSlotInfo(GetLastSlot()).type == InventorySystem.SlotType.Equipment)
            {
                Unequip();
            }
            else if (InventorySystem.reference.GetSlotInfo(GetLastSlot()).type == InventorySystem.SlotType.Shop)
            {
                if (InventorySystem.reference.GetSlotInfo(slot).type != InventorySystem.SlotType.Shop)
                {
                    Buy();
                }
            }
        }
        wagonIndex = InventorySystem.reference.GetSlotInfo(slot).wagonIndex;
        slotIndex  = InventorySystem.reference.GetSlotInfo(slot).slotIndex;


        // ...and place it in new slot
        if (InventorySystem.reference.GetSlotInfo(slot).type == InventorySystem.SlotType.Wagon)
        {
            PutInWagon(wagonIndex);
        }
        else if (InventorySystem.reference.GetSlotInfo(slot).type == InventorySystem.SlotType.Equipment)
        {
            Equip();
        }
        else if (InventorySystem.reference.GetSlotInfo(slot).type == InventorySystem.SlotType.Shop)
        {
            if (GetLastSlot() != null && InventorySystem.reference.GetSlotInfo(GetLastSlot()).type != InventorySystem.SlotType.Shop)
            {
                Sell();
            }
        }

        // after all changes with item info check wagons passenger count
        // if player moved item from its wagon, remove extra passengers from there
        if (GetLastSlot() != null)
        {
            if (InventorySystem.reference.GetSlotInfo(GetLastSlot()).type == InventorySystem.SlotType.Wagon)
            {
                if (InventorySystem.reference.GetSlotInfo(GetLastSlot()).type != InventorySystem.reference.GetSlotInfo(GetSlot()).type ||
                    InventorySystem.reference.GetSlotInfo(GetLastSlot()).wagonIndex != InventorySystem.reference.GetSlotInfo(GetSlot()).wagonIndex)
                {
                    PlayerSaveData.WagonData wagonData = PlayerSaveData.reference.wagonData [InventorySystem.reference.GetSlotInfo(GetLastSlot()).wagonIndex];
                    int extraPassengersCount           = wagonData.currentPassengersCount - wagonData.maxPassengersCount;
                    Debug.Log("extra passengers count: " + extraPassengersCount);
                    for (int passengerCounter = 0; passengerCounter < extraPassengersCount; passengerCounter++)
                    {
                        PlayerSaveData.reference.passengerData.RemovePassenger(InventorySystem.reference.GetSlotInfo(GetLastSlot()).wagonIndex);
                    }
                }
            }
        }

        transform.SetSiblingIndex(0);
        slot.GetComponent <UIDragDropContainer> ().reparentTarget.GetComponent <UIGrid> ().Reposition();


        lastSlot = slot;
        //Debug.Log ("place item function finished, new slot is  " + slot);
        // after all changes with item info check its durability
        if (info.durabilityInfo.current > info.durabilityInfo.max)
        {
            info.durabilityInfo.current = info.durabilityInfo.max;
        }
    }