public bool HasNotification(int level, long blockIndex) { var availableSlots = UnlockHelper.GetAvailableEquipmentSlots(level); foreach (var(type, slotCount) in availableSlots) { var equipments = Equipments.Where(e => e.ItemSubType == type && e.RequiredBlockIndex <= blockIndex); var current = equipments.Where(e => e.equipped); // When an equipment slot is empty. if (current.Count() < Math.Min(equipments.Count(), slotCount)) { return(true); } // When any other equipments are stronger than current one. foreach (var equipment in equipments) { if (equipment.equipped) { continue; } var cp = CPHelper.GetCP(equipment); if (current.Any(i => CPHelper.GetCP(i) < cp)) { return(true); } } } return(false); }
private void UpdateSlotView(AvatarState avatarState) { var game = Game.Game.instance; var playerModel = game.Stage.GetPlayer().Model; nicknameText.text = string.Format( NicknameTextFormat, avatarState.level, avatarState.NameWithHash); var title = avatarState.inventory.Costumes.FirstOrDefault(costume => costume.ItemSubType == ItemSubType.Title && costume.equipped); titleText.text = title is null ? "" : title.GetLocalizedName(); cpText.text = CPHelper .GetCPV2(avatarState, game.TableSheets.CharacterSheet, game.TableSheets.CostumeStatSheet) .ToString(); costumeSlots.SetPlayerCostumes(playerModel, ShowTooltip, null); equipmentSlots.SetPlayerEquipments(playerModel, ShowTooltip, null); }
public override OrderDigest Digest2(AvatarState avatarState, CostumeStatSheet costumeStatSheet) { if (avatarState.inventory.TryGetTradableItem(TradableId, ExpiredBlockIndex, ItemCount, out Inventory.Item inventoryItem)) { ItemBase item = inventoryItem.item; int cp = CPHelper.GetCP((ITradableItem)item, costumeStatSheet); int level = item is Equipment equipment ? equipment.level : 0; return(new OrderDigest( SellerAgentAddress, StartedBlockIndex, ExpiredBlockIndex, OrderId, TradableId, Price, cp, level, item.Id, ItemCount )); } throw new ItemDoesNotExistException( $"Aborted because the tradable item({TradableId}) was failed to load from avatar's inventory."); }
private static int GetTypeValue(ItemBase item, SortType type) { switch (type) { case SortType.Grade: return(item.Grade); case SortType.Cp: switch (item) { case ItemUsable itemUsable: return(CPHelper.GetCP(itemUsable)); case Costume costume: { var costumeSheet = Game.Game.instance.TableSheets.CostumeStatSheet; return(CPHelper.GetCP(costume, costumeSheet)); } } break; case SortType.None: break; default: throw new ArgumentOutOfRangeException(nameof(type), type, null); } throw new ArgumentOutOfRangeException(nameof(type), type, null); }
private void Awake() { avatarInfoButton.OnClickAsObservable() .ThrottleFirst(new TimeSpan(0, 0, 1)) .Subscribe(_ => { AudioController.PlayClick(); Context.OnClickAvatarInfo.OnNext(this); _onClickAvatarInfo.OnNext(this); }) .AddTo(gameObject); challengeButton.OnSubmitClick .ThrottleFirst(new TimeSpan(0, 0, 1)) .Subscribe(_ => { AudioController.PlayClick(); Context.OnClickChallenge.OnNext(this); _onClickChallenge.OnNext(this); }) .AddTo(gameObject); Game.Event.OnUpdatePlayerEquip .Where(_ => _isCurrentUser) .Subscribe(player => { characterView.SetByPlayer(player); cpText.text = CPHelper.GetCPV2( States.Instance.CurrentAvatarState, Game.Game.instance.TableSheets.CharacterSheet, Game.Game.instance.TableSheets.CostumeStatSheet).ToString(); }) .AddTo(gameObject); }
public void EquipItems() { var avatarAddress = _agentAddress.Derive("avatar_1"); var avatarState = new AvatarState( avatarAddress, _agentAddress, 0, _tableSheets.GetAvatarSheets(), new GameConfigState(), default ); avatarState.level = GameConfig.RequireCharacterLevel.CharacterEquipmentSlotRing1; var equipmentList = new List <Guid>(); avatarState.EquipEquipments(equipmentList); var inventory = avatarState.inventory; var hasNotification = inventory.HasNotification(avatarState.level); // When inventory is empty. Assert.False(hasNotification); foreach (var type in _itemSubTypesForEquipments) { var rows = _tableSheets.EquipmentItemSheet.Values .Where(r => r.ItemSubType == type && r.Grade == 1); foreach (var row in rows) { var guid = Guid.NewGuid(); var equipment = (Equipment)ItemFactory.CreateItemUsable(row, guid, 0, 0); inventory.AddItem(equipment); } hasNotification = inventory.HasNotification(avatarState.level); // When all of the items are unequipped. Assert.True(hasNotification); var ordered = inventory.Equipments .Where(i => i.ItemSubType == type) .OrderBy(i => CPHelper.GetCP(i)); var weakest = ordered.First(); equipmentList.Add(weakest.ItemId); avatarState.EquipEquipments(equipmentList); hasNotification = inventory.HasNotification(avatarState.level); // When weakest item is equipped. Assert.True(hasNotification); equipmentList.Remove(weakest.ItemId); var strongest = ordered.Last(); equipmentList.Add(strongest.ItemId); avatarState.EquipEquipments(equipmentList); hasNotification = inventory.HasNotification(avatarState.level); // When strongest item is equipped. Assert.False(hasNotification); } }
public void EquipTwoRings() { var avatarAddress = _agentAddress.Derive("avatar_2"); var avatarState = new AvatarState( avatarAddress, _agentAddress, 0, _tableSheets.GetAvatarSheets(), new GameConfigState(), default ); avatarState.level = GameConfig.RequireCharacterLevel.CharacterEquipmentSlotRing2; var equipmentList = new List <Guid>(); avatarState.EquipEquipments(equipmentList); var inventory = avatarState.inventory; var hasNotification = inventory.HasNotification(avatarState.level); // When inventory is empty. Assert.False(hasNotification); var rows = _tableSheets.EquipmentItemSheet.Values .Where(r => r.ItemSubType == ItemSubType.Ring && r.Grade == 1); foreach (var row in rows) { var guid = Guid.NewGuid(); var equipment = (Equipment)ItemFactory.CreateItemUsable(row, guid, 0, 0); inventory.AddItem(equipment); } hasNotification = inventory.HasNotification(avatarState.level); // When all of the items are unequipped. Assert.True(hasNotification); var ordered = inventory.Equipments.OrderBy(i => CPHelper.GetCP(i)); var strongest = ordered.Last(); equipmentList.Add(strongest.ItemId); avatarState.EquipEquipments(equipmentList); hasNotification = inventory.HasNotification(avatarState.level); // When one strongest ring is equipped. Assert.True(hasNotification); equipmentList.Clear(); var strongests = ordered.TakeLast(2).Select(i => i.ItemId); equipmentList.AddRange(strongests); avatarState.EquipEquipments(equipmentList); hasNotification = inventory.HasNotification(avatarState.level); // When the 1st strongest, the 2nd strongest items are equipped. Assert.False(hasNotification); }
public ArenaInfo(AvatarState avatarState, CharacterSheet characterSheet, bool active) { AvatarAddress = avatarState.address; AgentAddress = avatarState.agentAddress; AvatarName = avatarState.NameWithHash; ArenaRecord = new Record(); Level = avatarState.level; var armor = avatarState.inventory.Items.Select(i => i.item).OfType <Armor>().FirstOrDefault(e => e.equipped); ArmorId = armor?.Id ?? GameConfig.DefaultAvatarArmorId; CombatPoint = CPHelper.GetCP(avatarState, characterSheet); Active = active; DailyChallengeCount = GameConfig.ArenaChallengeCountMax; Score = GameConfig.ArenaScoreDefault; }
private void UpdateSlotView(AvatarState avatarState) { var game = Game.Game.instance; // var playerModel = game.Stage.GetPlayer().Model; var playerModel = _player.Model; nicknameText.text = string.Format( NicknameTextFormat, avatarState.level, avatarState.NameWithHash); var title = avatarState.inventory.Costumes.FirstOrDefault(costume => costume.ItemSubType == ItemSubType.Title && costume.equipped); titleText.text = title is null ? "" : title.GetLocalizedName(); costumeSlots.SetPlayerCostumes(playerModel, ShowTooltip, Unequip); equipmentSlots.SetPlayerEquipments(playerModel, ShowTooltip, Unequip); var currentAvatarState = game.States.CurrentAvatarState; if (avatarState.Equals(currentAvatarState)) { // 인벤토리 아이템의 장착 여부를 `equipmentSlots`의 상태를 바탕으로 설정하기 때문에 `equipmentSlots.SetPlayer()`를 호출한 이후에 인벤토리 아이템의 장착 상태를 재설정한다. // 또한 인벤토리는 기본적으로 `OnEnable()` 단계에서 `OnResetItems` 이벤트를 일으키기 때문에 `equipmentSlots.SetPlayer()`와 호출 순서 커플링이 생기게 된다. // 따라서 강제로 상태를 설정한다. inventory.gameObject.SetActive(true); SubscribeInventoryResetItems(inventory); var currentPlayer = game.Stage.selectedPlayer; cpText.text = CPHelper.GetCP(currentPlayer.Model, game.TableSheets.CostumeStatSheet) .ToString(); } else { inventory.gameObject.SetActive(false); cpText.text = CPHelper.GetCPV2(avatarState, game.TableSheets.CharacterSheet, game.TableSheets.CostumeStatSheet) .ToString(); } UpdateUIPlayer(); }
private void ProcessEquipmentData( Address agentAddress, Address avatarAddress, Equipment equipment, string avatarName) { MySqlStore.StoreAgent(agentAddress); MySqlStore.StoreAvatar( avatarAddress, agentAddress, avatarName); var cp = CPHelper.GetCP(equipment); MySqlStore.ProcessEquipment( equipment.ItemId, agentAddress, avatarAddress, equipment.Id, cp, equipment.level, equipment.ItemSubType); }
public bool HasNotification() { foreach (var subType in new [] { ItemSubType.Weapon, ItemSubType.Armor, ItemSubType.Belt, ItemSubType.Necklace, ItemSubType.Ring }) { var equipments = Equipments.Where(e => e.ItemSubType == subType).ToList(); var current = equipments.FirstOrDefault(e => e.equipped); //현재 장착안한 슬롯에 장착 가능한 장비가 있는 경우 if (current is null && equipments.Any()) { return(true); } var hasNotification = equipments.Any(e => CPHelper.GetCP(e) > CPHelper.GetCP(current)); // 현재장착한 장비보다 강한 장비가 있는 경우 if (hasNotification) { return(true); } } return(false); }
public void UpdateV2(AvatarState state, CharacterSheet characterSheet, CostumeStatSheet costumeStatSheet) { ArmorId = state.GetArmorId(); Level = state.level; CombatPoint = CPHelper.GetCPV2(state, characterSheet, costumeStatSheet); }
public void UpdateV1(AvatarState state, CharacterSheet characterSheet) { ArmorId = state.GetArmorId(); Level = state.level; CombatPoint = CPHelper.GetCP(state, characterSheet); }
private void UpdateStatsArea() { if (Model?.item.Value is null) { statsArea.root.gameObject.SetActive(false); return; } foreach (var stat in statsArea.stats) { stat.Hide(); } var statCount = 0; if (Model.item.Value.ItemBase.Value is Equipment equipment) { descriptionArea.commonGameObject.SetActive(false); descriptionArea.dividerImageGameObject.SetActive(false); descriptionArea.levelLimitGameObject.SetActive(false); descriptionArea.combatPowerObject.SetActive(true); descriptionArea.combatPowerText.text = CPHelper.GetCP(equipment).ToString(); var uniqueStatType = equipment.UniqueStatType; foreach (var statMapEx in equipment.StatsMap.GetStats()) { if (!statMapEx.StatType.Equals(uniqueStatType)) { continue; } AddStat(statMapEx, true); statCount++; } foreach (var statMapEx in equipment.StatsMap.GetStats()) { if (statMapEx.StatType.Equals(uniqueStatType)) { continue; } AddStat(statMapEx); statCount++; } } else if (Model.item.Value.ItemBase.Value is ItemUsable itemUsable) { descriptionArea.commonGameObject.SetActive(false); descriptionArea.dividerImageGameObject.SetActive(false); descriptionArea.levelLimitGameObject.SetActive(false); descriptionArea.combatPowerObject.SetActive(false); foreach (var statMapEx in itemUsable.StatsMap.GetStats()) { AddStat(statMapEx); statCount++; } } else if (Model.item.Value.ItemBase.Value is Costume costume) { var costumeSheet = Game.Game.instance.TableSheets.CostumeStatSheet; descriptionArea.commonGameObject.SetActive(false); descriptionArea.dividerImageGameObject.SetActive(false); descriptionArea.levelLimitGameObject.SetActive(false); var statsMap = new StatsMap(); foreach (var row in costumeSheet.OrderedList.Where(r => r.CostumeId == costume.Id)) { statsMap.AddStatValue(row.StatType, row.Stat); } foreach (var statMapEx in statsMap.GetStats()) { AddStat(statMapEx); statCount++; } var cpEnable = statCount > 0; descriptionArea.combatPowerObject.SetActive(cpEnable); if (cpEnable) { descriptionArea.combatPowerText.text = CPHelper.GetCP(costume, costumeSheet).ToString(); } } else { descriptionArea.levelLimitGameObject.SetActive(false); descriptionArea.combatPowerObject.SetActive(false); descriptionArea.commonGameObject.SetActive(false); descriptionArea.dividerImageGameObject.SetActive(false); } if (statCount <= 0) { statsArea.root.gameObject.SetActive(false); return; } statsArea.root.gameObject.SetActive(true); }
public void UpdateEquipmentNotification(List <ElementalType> elementalTypes = null) { var currentAvatarState = Game.Game.instance.States.CurrentAvatarState; if (currentAvatarState is null) { return; } if (State.Value != ItemType.Equipment) { return; } var equipments = Equipments; foreach (var item in equipments) { item.HasNotification.Value = false; } var level = currentAvatarState.level; var availableSlots = UnlockHelper.GetAvailableEquipmentSlots(level); foreach (var(type, slotCount) in availableSlots) { var matchedEquipments = Equipments .Where(e => e.ItemBase.Value.ItemSubType == type); if (elementalTypes != null) { matchedEquipments = matchedEquipments.Where(e => elementalTypes.Exists(x => x == e.ItemBase.Value.ElementalType)); } var equippedEquipments = matchedEquipments.Where(e => e.EquippedEnabled.Value); var unequippedEquipments = matchedEquipments.Where(e => !e.EquippedEnabled.Value) .OrderByDescending(i => CPHelper.GetCP(i.ItemBase.Value as Equipment)); var equippedCount = equippedEquipments.Count(); if (equippedCount < slotCount) { var itemsToNotify = unequippedEquipments.Take(slotCount - equippedCount); foreach (var item in itemsToNotify) { item.HasNotification.Value = true; } } else { var itemsToNotify = unequippedEquipments.Where(e => { var cp = CPHelper.GetCP(e.ItemBase.Value as Equipment); return(equippedEquipments.Any(i => CPHelper.GetCP(i.ItemBase.Value as Equipment) < cp)); }).Take(slotCount); foreach (var item in itemsToNotify) { item.HasNotification.Value = true; } } } }
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 void Show(int beforeLevel, int afterLevel, bool ignoreShowAnimation = false) { var gameInstance = Game.Game.instance; _model = gameInstance.Stage.selectedPlayer.Model; var characterSheet = gameInstance.TableSheets.CharacterSheet; var characterId = _model.CharacterId; var costumeStatSheet = gameInstance.TableSheets.CostumeStatSheet; if (!characterSheet.TryGetValue(characterId, out var row)) { throw new System.Exception($"CharacterId{characterId} is invaild."); } _model.Level = beforeLevel; var previousCP = CPHelper.GetCP(_model, costumeStatSheet); cpTextTweener.startValue = previousCP; _model.Level = afterLevel; var currentCP = CPHelper.GetCP(_model, costumeStatSheet); cpTextTweener.endValue = currentCP; levelText.text = afterLevel.ToString(); increasedCpText.text = (currentCP - previousCP).ToString(); var beforeStat = row.ToStats(beforeLevel); var afterStat = row.ToStats(afterLevel); using (var enumerator = ((IEnumerable <StatType>)Enum.GetValues(typeof(StatType))).GetEnumerator()) { // StatType.None 스킵 enumerator.MoveNext(); foreach (var view in statViews) { if (!enumerator.MoveNext()) { view.gameObject.SetActive(false); continue; } var type = enumerator.Current; view.Show(type, beforeStat.GetStat(type, true), afterStat.GetStat(type, true)); view.gameObject.SetActive(true); } } base.Show(ignoreShowAnimation); var position = ActionCamera.instance.transform.position; _levelUpVFX = VFXController.instance.CreateAndChaseCam <LevelUpVFX>(position, new Vector3(0f, 0.7f)); _levelUpVFX.Play(); _levelUpVFX.OnFinished = () => Close(); var stage = Game.Game.instance.Stage; stage.ReleaseWhiteList.Add(_levelUpVFX.gameObject); base.Show(ignoreShowAnimation); }
public ArenaInfo(AvatarState avatarState, CharacterSheet characterSheet, CostumeStatSheet costumeStatSheet, bool active) : this(avatarState, characterSheet, active) { CombatPoint = CPHelper.GetCPV2(avatarState, characterSheet, costumeStatSheet); }
private void Unequip(EquipmentSlot slot, bool considerInventoryOnly) { if (Game.Game.instance.Stage.IsInStage) { return; } Find <ItemInformationTooltip>().Close(); if (slot.IsEmpty) { foreach (var item in inventory.SharedModel.Equipments) { item.GlowEnabled.Value = item.ItemBase.Value.ItemSubType == slot.ItemSubType; } 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); var slotItem = slot.Item; slot.Clear(); LocalStateItemEquipModify(slotItem, false); var currentCp = CPHelper.GetCPV2(currentAvatarState, characterSheet, costumeStatSheet); cpTextValueTweener.Play(prevCp, currentCp); var player = considerInventoryOnly ? null : Game.Game.instance.Stage.GetPlayer(); switch (slotItem) { default: return; case Costume costume: { if (!inventory.SharedModel.TryGetCostume(costume, out var inventoryItem)) { return; } inventoryItem.EquippedEnabled.Value = false; if (considerInventoryOnly) { break; } UpdateStatViews(); var armor = (Armor)_armorSlot.Item; var weapon = (Weapon)_weaponSlot.Item; player.UnequipCostume(costume, true); player.EquipEquipmentsAndUpdateCustomize(armor, weapon); Game.Event.OnUpdatePlayerEquip.OnNext(player); if (costume.ItemSubType == ItemSubType.Title) { titleText.text = ""; } break; } case Equipment equipment: { if (!inventory.SharedModel.TryGetEquipment(equipment, out var inventoryItem)) { return; } inventoryItem.EquippedEnabled.Value = false; if (considerInventoryOnly) { break; } 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)_weaponSlot.Item); break; } Game.Event.OnUpdatePlayerEquip.OnNext(player); break; } } PostEquipOrUnequip(slot); }
public void Execute(int avatarLevel, int worldId, int stageId, bool contains) { Assert.True(_tableSheets.WorldSheet.TryGetValue(worldId, out var worldRow)); Assert.True(stageId >= worldRow.StageBegin); Assert.True(stageId <= worldRow.StageEnd); Assert.True(_tableSheets.StageSheet.TryGetValue(stageId, out _)); var previousAvatarState = _initialState.GetAvatarState(_avatarAddress); previousAvatarState.level = avatarLevel; previousAvatarState.worldInformation = new WorldInformation( 0, _tableSheets.WorldSheet, Math.Max(_tableSheets.StageSheet.First?.Id ?? 1, stageId - 1)); var costumeId = _tableSheets .CostumeItemSheet .Values .First(r => r.ItemSubType == ItemSubType.FullCostume) .Id; var costume = ItemFactory.CreateItem(_tableSheets.ItemSheet[costumeId], new ItemEnhancementTest.TestRandom()); previousAvatarState.inventory.AddItem(costume); var state = _initialState.SetState(_avatarAddress, previousAvatarState.Serialize()); var action = new HackAndSlash2() { costumes = new List <int> { costumeId }, equipments = new List <Guid>(), foods = new List <Guid>(), worldId = worldId, stageId = stageId, avatarAddress = _avatarAddress, WeeklyArenaAddress = _weeklyArenaState.address, RankingMapAddress = _rankingMapAddress, }; Assert.Null(action.Result); var nextState = action.Execute(new ActionContext() { PreviousStates = state, Signer = _agentAddress, Random = new ItemEnhancementTest.TestRandom(), Rehearsal = false, }); var nextAvatarState = nextState.GetAvatarState(_avatarAddress); var newWeeklyState = nextState.GetWeeklyArenaState(0); Assert.NotNull(action.Result); Assert.NotEmpty(action.Result.OfType <GetReward>()); Assert.Equal(BattleLog.Result.Win, action.Result.result); Assert.Equal(contains, newWeeklyState.ContainsKey(_avatarAddress)); Assert.True(nextAvatarState.worldInformation.IsStageCleared(stageId)); if (contains) { Assert.True( newWeeklyState[_avatarAddress].CombatPoint > CPHelper.GetCP(nextAvatarState, _tableSheets.CharacterSheet) ); } var value = nextState.GetState(_rankingMapAddress); var rankingMapState = new RankingMapState((Dictionary)value); var info = rankingMapState.GetRankingInfos(null).First(); Assert.Equal(info.AgentAddress, _agentAddress); Assert.Equal(info.AvatarAddress, _avatarAddress); }
private void UpdateView() { if (Model is null) { itemNameText.text = L10nManager.Localize("UI_COMBINATION_ERROR"); itemInformation.gameObject.SetActive(false); return; } var item = Model.itemInformation.Value.item.Value.ItemBase.Value; var isEquipment = item is Equipment; if (Model.isSuccess) { itemNameText.text = item.GetLocalizedName(); itemInformation.gameObject.SetActive(true); AudioController.instance.PlaySfx(AudioController.SfxCode.Success); } else { itemNameText.text = L10nManager.Localize("UI_COMBINATION_FAIL"); itemInformation.gameObject.SetActive(false); AudioController.instance.PlaySfx(AudioController.SfxCode.Failed); } if (Model.materialItems.Any()) { materialText.gameObject.SetActive(true); materialView.SetActive(true); using (var e = Model.materialItems.GetEnumerator()) { foreach (var material in materialItems) { e.MoveNext(); if (e.Current is null) { material.Clear(); material.gameObject.SetActive(false); } else { var data = e.Current; material.SetData(data); material.gameObject.SetActive(true); } } } } else { materialText.gameObject.SetActive(false); materialView.SetActive(false); } consumableHeader.gameObject.SetActive(!isEquipment); equipmentHeader.gameObject.SetActive(isEquipment); if (isEquipment) { cpText.text = CPHelper.GetCP((Equipment)item).ToString(); } cpText.transform.parent.gameObject.SetActive(isEquipment); }