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(); } }
/// <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); }
/// <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); }
/// <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)); }
private void SubscribeItemPopup(CountableItem data) { if (data is null) { Find <ItemCountAndPricePopup>().Close(); return; } Find <ItemCountAndPricePopup>().Pop(SharedModel.ItemCountAndPricePopup.Value); }
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); }
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()); }
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; }
public void GiveGoblinItem() { CountableItem item = PlayerInventory.Instance.GetCurrentItem(); if (item == null) { return; } if (goblin.Inventory.AddToInventory(item)) { PlayerInventory.Instance.ReduceCurrentItem(1); } gameObject.SetActive(false); }
/// <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; }
private static bool ButtonEnabledFuncForSell(CountableItem inventoryItem) { switch (inventoryItem) { case null: return(false); case ShopItem _: return(true); default: return(!inventoryItem.Dimmed.Value); } }
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); } }
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; } }
public void Show(RectTransform target, CountableItem item, Action <ItemInformationTooltip> onClose = null) { Show(target, item, null, null, null, onClose); }
private static bool ButtonEnabledFuncForBuy(CountableItem inventoryItem) { return(inventoryItem is ShopItem shopItem && States.Instance.GoldBalanceState.Gold >= shopItem.Price.Value); }
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); } } }
public void SetData(CountableItem model, int requiredCount) { RequiredCount = requiredCount; base.SetData(model); }
private bool DimmedFuncForEquipments(CountableItem item) { return(!item.Dimmed.Value && !Game.Game.instance.Stage.IsInStage); }
private bool DimmedFuncForChest(CountableItem item) { return(!(item is null) && item.Count.Value >= 1 && !Game.Game.instance.Stage.IsInStage); }
/// <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); }
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); }
public bool AddToInventory(Item item) { CountableItem countableItem = new CountableItem(item, 1); return(AddToInventory(countableItem)); }
/// <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); }