Пример #1
0
        private void SetView(
            RequiredItemView view,
            int materialId,
            int requiredCount,
            bool checkInventory
            )
        {
            var item      = ItemFactory.CreateMaterial(Game.Game.instance.TableSheets.MaterialItemSheet, materialId);
            var itemCount = requiredCount;

            if (checkInventory)
            {
                var inventory = Game.Game.instance.States.CurrentAvatarState.inventory;
                itemCount = inventory.TryGetFungibleItem(item, out var inventoryItem)
                    ? inventoryItem.count
                    : 0;
            }
            var countableItem = new CountableItem(item, itemCount);

            view.SetData(countableItem, requiredCount);
            if (!checkInventory)
            {
                view.SetRequiredText();
            }
        }
Пример #2
0
    /// <summary>
    /// Add an item to the inventory
    /// </summary>
    /// <param name="item"></param>
    /// <returns>returns true if it was successfully added, false, if the inventory was too full</returns>
    public bool AddToInventory(CountableItem countableItem)
    {
        Item item  = countableItem.item;
        int  num   = countableItem.number;
        int  index = GetItemIndex(item);

        if (index != -1)
        {
            //add another item to list
            items[index].number += num;
            UpdateSprites(index);
        }
        else
        {
            if (items.Count == slots.Count)
            {
                return(false);
            }
            CountableItem newCountable = new CountableItem(item, num);
            items.Add(newCountable);
            items[items.Count - 1].number = num;
            UpdateSprites(items.Count - 1);
        }
        return(true);
    }
Пример #3
0
    /// <summary>
    /// How many of a certain item do we have in our inventory.
    /// </summary>
    /// <param name="item"></param>
    /// <returns></returns>
    public int NumberItemInInventory(Item item)
    {
        CountableItem specifiedItem = items.Find(x => x.item.Equals(item));

        if (specifiedItem == null)
        {
            return(0);
        }
        return(specifiedItem.number);
    }
Пример #4
0
    /// <summary>
    /// Remove an item from the inventory item.num times
    /// </summary>
    /// <param name="item">The countable item containing the item and how many we are supposed to subtract</param>
    /// <returns></returns>
    public bool ReduceItem(CountableItem item)
    {
        int index = GetItemIndex(item.item);

        if (index == -1)
        {
            return(false);
        }
        return(ReduceItemAt(index, item.number));
    }
Пример #5
0
        private void SubscribeItemPopup(CountableItem data)
        {
            if (data is null)
            {
                Find <ItemCountAndPricePopup>().Close();
                return;
            }

            Find <ItemCountAndPricePopup>().Pop(SharedModel.ItemCountAndPricePopup.Value);
        }
Пример #6
0
        private bool DimmedFuncForChargeActionPoint(CountableItem item)
        {
            if (item is null || item.Count.Value < 1)
            {
                return(false);
            }

            return(States.Instance.CurrentAvatarState.actionPoint !=
                   States.Instance.GameConfigState.ActionPointMax &&
                   !Game.Game.instance.Stage.IsInStage);
        }
Пример #7
0
        public void Show(RectTransform target, CountableItem item, Func <CountableItem, bool> submitEnabledFunc,
                         string submitText, Action <ItemInformationTooltip> onSubmit, Action <ItemInformationTooltip> onClose = null,
                         bool retrieve = false)
        {
            if (item?.ItemBase.Value is null)
            {
                return;
            }

            _disposablesForModel.DisposeAllAndClear();
            Model.target.Value = target;
            Model.ItemInformation.item.Value = item;
            Model.SubmitButtonEnabledFunc.SetValueAndForceNotify(submitEnabledFunc);
            Model.SubmitButtonText.Value = submitText;

            // Show(Model)을 먼저 호출함으로써 Widget.Show()가 호출되고, 게임 오브젝트가 활성화 됨. 그래야 레이아웃 정리가 가능함.
            Show(Model);
            // itemInformation UI의 모든 요소에 적절한 값이 들어가야 레이아웃 정리가 유효함.
            itemInformation.SetData(Model.ItemInformation);

            Model.TitleText.SubscribeTo(titleText).AddTo(_disposablesForModel);
            Model.PriceEnabled.Subscribe(priceContainer.SetActive).AddTo(_disposablesForModel);
            Model.PriceEnabled.SubscribeTo(priceText).AddTo(_disposablesForModel);
            Model.Price.SubscribeToPrice(priceText).AddTo(_disposablesForModel);

            if (retrieve)
            {
                Model.SubmitButtonText.SubscribeTo(submitButtonForRetrieve).AddTo(_disposablesForModel);
                Model.SubmitButtonEnabled.Subscribe(submitButtonForRetrieve.SetSubmittable).AddTo(_disposablesForModel);
            }
            else
            {
                Model.SubmitButtonText.SubscribeTo(submitButton).AddTo(_disposablesForModel);
                Model.SubmitButtonEnabled.Subscribe(submitButton.SetSubmittable).AddTo(_disposablesForModel);
            }
            submitGameObject.SetActive(!retrieve);
            submitGameObjectForRetrieve.SetActive(retrieve);

            Model.SubmitButtonText.SubscribeTo(submitButton).AddTo(_disposablesForModel);
            Model.SubmitButtonEnabled.Subscribe(submitButton.SetSubmittable).AddTo(_disposablesForModel);
            Model.OnSubmitClick.Subscribe(onSubmit).AddTo(_disposablesForModel);
            if (onClose != null)
            {
                Model.OnCloseClick.Subscribe(onClose).AddTo(_disposablesForModel);
            }
            Model.FooterRootActive.Subscribe(footerRoot.SetActive).AddTo(_disposablesForModel);
            // Model.itemInformation.item을 마지막으로 구독해야 위에서의 구독으로 인해 바뀌는 레이아웃 상태를 모두 반영할 수 있음.
            Model.ItemInformation.item.Subscribe(value => SubscribeTargetItem(Model.target.Value))
            .AddTo(_disposablesForModel);

            StartCoroutine(CoUpdate());
        }
Пример #8
0
            public void AddReward(CountableItem reward)
            {
                var sameReward =
                    _rewards.FirstOrDefault(e => e.ItemBase.Value.Equals(reward.ItemBase.Value));

                if (sameReward is null)
                {
                    _rewards.Add(reward);
                    return;
                }

                sameReward.Count.Value += reward.Count.Value;
            }
Пример #9
0
    public void GiveGoblinItem()
    {
        CountableItem item = PlayerInventory.Instance.GetCurrentItem();

        if (item == null)
        {
            return;
        }
        if (goblin.Inventory.AddToInventory(item))
        {
            PlayerInventory.Instance.ReduceCurrentItem(1);
        }
        gameObject.SetActive(false);
    }
Пример #10
0
    /// <summary>
    /// Update the sprites for one slot in the inventory.
    /// </summary>
    /// <param name="index">The index at which we are to update the sprites</param>
    public void UpdateSprites(int index)
    {
        CountableItem item = items[index];

        if (item == null)
        {
            return;
        }
        GameObject slot = slots[index];

        slot.SetActive(true);
        slot.GetComponent <Image>().sprite = item.item.sprite;
        slot.transform.GetChild(0).GetComponent <Text>().text = "" + item.number;
    }
Пример #11
0
        private static bool ButtonEnabledFuncForSell(CountableItem inventoryItem)
        {
            switch (inventoryItem)
            {
            case null:
                return(false);

            case ShopItem _:
                return(true);

            default:
                return(!inventoryItem.Dimmed.Value);
            }
        }
Пример #12
0
 private static void ChargeActionPoint(CountableItem item)
 {
     if (item.ItemBase.Value is Nekoyume.Model.Item.Material material)
     {
         Notification.Push(Nekoyume.Model.Mail.MailType.System,
                           L10nManager.Localize("UI_CHARGE_AP"));
         Game.Game.instance.ActionManager.ChargeActionPoint();
         LocalLayerModifier.RemoveItem(States.Instance.CurrentAvatarState.address,
                                       material.ItemId, 1);
         LocalLayerModifier.ModifyAvatarActionPoint(
             States.Instance.CurrentAvatarState.address,
             States.Instance.GameConfigState.ActionPointMax);
     }
 }
Пример #13
0
        private void ShowActionPopup(CountableItem viewModel)
        {
            if (viewModel is null ||
                viewModel.Dimmed.Value)
            {
                return;
            }

            switch (viewModel)
            {
            case InventoryItem inventoryItem:
                if (SharedModel.State.Value == StateType.Sell)
                {
                    ShowSellPopup(inventoryItem);
                }

                break;

            case ShopItem shopItem:

                if (SharedModel.State.Value == StateType.Buy)
                {
                    if (!ButtonEnabledFuncForBuy(shopItem))
                    {
                        return;
                    }
                    ShowBuyPopup(shopItem);
                }
                else
                {
                    ShowRetrievePopup(shopItem);
                }

                break;
            }
        }
Пример #14
0
 public void Show(RectTransform target, CountableItem item, Action <ItemInformationTooltip> onClose = null)
 {
     Show(target, item, null, null, null, onClose);
 }
Пример #15
0
 private static bool ButtonEnabledFuncForBuy(CountableItem inventoryItem)
 {
     return(inventoryItem is ShopItem shopItem &&
            States.Instance.GoldBalanceState.Gold >= shopItem.Price.Value);
 }
Пример #16
0
        private void UpdateView()
        {
            if (_quest is null)
            {
                Hide();
                return;
            }

            var isReceived = false;

            titleText.text   = _quest.GetTitle();
            contentText.text = _quest.GetContent();

            var text            = _quest.GetProgressText();
            var showProgressBar = !string.IsNullOrEmpty(text);

            progressText.gameObject.SetActive(showProgressBar);
            progressBar.gameObject.SetActive(showProgressBar);
            if (showProgressBar)
            {
                progressText.text = text;
                progressBar.value = _quest.Progress;
            }

            if (_quest.Complete)
            {
                if (_quest.isReceivable)
                {
                    background.color   = Color.white;
                    fillImage.color    = ColorHelper.HexToColorRGB("ffffff");
                    titleText.color    = ColorHelper.HexToColorRGB("ffa78b");
                    contentText.color  = ColorHelper.HexToColorRGB("955c4a");
                    progressText.color = ColorHelper.HexToColorRGB("e0a491");
                    receiveButton.Show();
                    receiveButton.SetSubmittable(true);
                }
                else
                {
                    isReceived         = true;
                    fillImage.color    = ColorHelper.HexToColorRGB("282828");
                    background.color   = ColorHelper.HexToColorRGB("7b7b7b");
                    titleText.color    = ColorHelper.HexToColorRGB("614037");
                    contentText.color  = ColorHelper.HexToColorRGB("38251e");
                    progressText.color = ColorHelper.HexToColorRGB("282828");
                    receiveButton.Hide();
                }
            }
            else
            {
                background.color   = Color.white;
                fillImage.color    = ColorHelper.HexToColorRGB("ffffff");
                titleText.color    = ColorHelper.HexToColorRGB("ffa78b");
                contentText.color  = ColorHelper.HexToColorRGB("955c4a");
                progressText.color = ColorHelper.HexToColorRGB("e0a491");
                receiveButton.Show();
                receiveButton.SetSubmittable(false);
            }

            var itemMap = _quest.Reward.ItemMap;

            for (var i = 0; i < rewardViews.Length; i++)
            {
                if (i < itemMap.Count)
                {
                    var pair       = itemMap.ElementAt(i);
                    var rewardView = rewardViews[i];
                    rewardView.ignoreOne = true;
                    var row = Game.Game.instance.TableSheets.MaterialItemSheet.Values.First(
                        itemRow => itemRow.Id == pair.Key);
                    var item          = ItemFactory.CreateMaterial(row);
                    var countableItem = new CountableItem(item, pair.Value);
                    countableItem.Dimmed.Value = isReceived;
                    rewardView.SetData(countableItem);
                    rewardView.iconImage.rectTransform.sizeDelta *= 0.7f;
                    rewardView.gameObject.SetActive(true);
                }
                else
                {
                    rewardViews[i].gameObject.SetActive(false);
                }
            }
        }
Пример #17
0
 public void SetData(CountableItem model, int requiredCount)
 {
     RequiredCount = requiredCount;
     base.SetData(model);
 }
Пример #18
0
 private bool DimmedFuncForEquipments(CountableItem item)
 {
     return(!item.Dimmed.Value && !Game.Game.instance.Stage.IsInStage);
 }
Пример #19
0
 private bool DimmedFuncForChest(CountableItem item)
 {
     return(!(item is null) && item.Count.Value >= 1 && !Game.Game.instance.Stage.IsInStage);
 }
Пример #20
0
    /// <summary>
    /// Check if there is an item with a specified Item Action in the inventory.
    /// </summary>
    /// <param name="itemAction">The Item action we want to find an item with.</param>
    /// <returns>True if such an item exists.</returns>
    public bool ContainsItemType(ItemAction itemAction)
    {
        CountableItem specifiedItem = items.Find(x => x.item.itemAction == itemAction);

        return(specifiedItem != null);
    }
Пример #21
0
        private void Equip(CountableItem countableItem)
        {
            if (Game.Game.instance.Stage.IsInStage ||
                !(countableItem is InventoryItem inventoryItem))
            {
                return;
            }

            var itemBase = inventoryItem.ItemBase.Value;

            // 이미 장착중인 아이템이라면 해제한다.
            if (TryToFindSlotAlreadyEquip(itemBase, out var slot))
            {
                Unequip(slot);
                return;
            }

            // 아이템을 장착할 슬롯을 찾는다.
            if (!TryToFindSlotToEquip(itemBase, out slot))
            {
                return;
            }

            var currentAvatarState = Game.Game.instance.States.CurrentAvatarState;
            var characterSheet     = Game.Game.instance.TableSheets.CharacterSheet;
            var costumeStatSheet   = Game.Game.instance.TableSheets.CostumeStatSheet;
            var prevCp             = CPHelper.GetCPV2(currentAvatarState, characterSheet, costumeStatSheet);

            // 이미 슬롯에 아이템이 있다면 해제한다.
            if (!slot.IsEmpty)
            {
                Unequip(slot, true);
            }

            slot.Set(itemBase, ShowTooltip, Unequip);
            LocalStateItemEquipModify(slot.Item, true);

            if (!(_disableCpTween is null))
            {
                StopCoroutine(_disableCpTween);
            }
            additionalCpArea.gameObject.SetActive(false);

            var currentCp = CPHelper.GetCPV2(currentAvatarState, characterSheet, costumeStatSheet);
            var tweener   = cpTextValueTweener.Play(prevCp, currentCp);

            if (prevCp < currentCp)
            {
                additionalCpArea.gameObject.SetActive(true);
                additionalCpText.text = (currentCp - prevCp).ToString();
                _disableCpTween       = StartCoroutine(CoDisableIncreasedCP());
            }

            var player = Game.Game.instance.Stage.GetPlayer();

            switch (itemBase)
            {
            default:
                return;

            case Costume costume:
            {
                inventoryItem.EquippedEnabled.Value = true;
                player.EquipCostume(costume);
                UpdateStatViews();
                if (costume.ItemSubType == ItemSubType.Title)
                {
                    titleText.text = costume.GetLocalizedName();
                }

                break;
            }

            case Equipment _:
            {
                inventoryItem.EquippedEnabled.Value = true;
                UpdateStatViews();
                switch (slot.ItemSubType)
                {
                case ItemSubType.Armor:
                {
                    var armor  = (Armor)_armorSlot.Item;
                    var weapon = (Weapon)_weaponSlot.Item;
                    player.EquipEquipmentsAndUpdateCustomize(armor, weapon);
                    break;
                }

                case ItemSubType.Weapon:
                    player.EquipWeapon((Weapon)slot.Item);
                    break;
                }

                break;
            }
            }

            Game.Event.OnUpdatePlayerEquip.OnNext(player);
            PostEquipOrUnequip(slot);
        }
Пример #22
0
    public bool AddToInventory(Item item)
    {
        CountableItem countableItem = new CountableItem(item, 1);

        return(AddToInventory(countableItem));
    }
Пример #23
0
    /// <summary>
    /// Does the inventory contain an item?
    /// </summary>
    /// <param name="item">The item we are looking for.</param>
    /// <returns></returns>
    public bool ContainsItem(Item item)
    {
        CountableItem specifiedItem = items.Find(x => x.item == item);

        return(specifiedItem != null);
    }