예제 #1
0
        private static void SubscribeOnClickCellView(RecipeCellView cellView)
        {
            var combination = Widget.Find <Combination>();

            if (!combination.CanHandleInputEvent)
            {
                return;
            }
            cellView.scaleTweener.PlayTween();

            if (cellView.tempLocked)
            {
                AudioController.instance.PlaySfx(AudioController.SfxCode.UnlockRecipe);
                var avatarState = Game.Game.instance.States.CurrentAvatarState;

                combination.RecipeVFXSkipMap[cellView.EquipmentRowData.Id]
                    = new int[3] {
                    0, 0, 0
                    };
                combination.SaveRecipeVFXSkipMap();

                var centerPos = cellView.GetComponent <RectTransform>()
                                .GetWorldPositionOfCenter();
                VFXController.instance.CreateAndChaseCam <RecipeUnlockVFX>(centerPos);

                cellView.Set(avatarState, null, false);
                return;
            }

            combination.selectedRecipe = cellView;
            combination.State.SetValueAndForceNotify(Combination.StateType.CombinationConfirm);
        }
예제 #2
0
        public void Show(
            EquipmentItemRecipeSheet.Row row,
            bool ignoreShowAnimation = false)
        {
            if (row is null)
            {
                var sb = new StringBuilder($"[{nameof(CelebratesPopup)}]");
                sb.Append($"Argument {nameof(row)} is null.");
                Debug.LogError(sb.ToString());
                return;
            }

            titleText.text     = L10nManager.Localize("UI_NEW_EQUIPMENT_RECIPE");
            continueText.alpha = 0f;

            recipeCellView.Set(row);

            menuContainer.SetActive(false);
            questRewards.SetActive(false);
            recipeCellView.Show();

            _rewards = null;

            AppearNPC(ignoreShowAnimation, NPCAnimation.Type.Emotion_01);
            base.Show(ignoreShowAnimation);
            PlayEffects();
        }
예제 #3
0
        public void SetData(EquipmentItemRecipeSheet.Row recipeRow, int?subRecipeId = null)
        {
            recipeCellView.Set(recipeRow);
            materialPanel.SetData(recipeRow, subRecipeId);
            Enable();
            var requiredBlockIndex = recipeRow.RequiredBlockIndex;

            if (subRecipeId.HasValue)
            {
                var subSheet = Game.Game.instance.TableSheets.EquipmentItemSubRecipeSheet;
                if (subSheet.TryGetValue((int)subRecipeId, out var subRecipe))
                {
                    requiredBlockIndex += subRecipe.RequiredBlockIndex;
                }
            }
            RequiredBlockIndexSubject.OnNext(requiredBlockIndex);
            stateType = Combination.StateType.CombineEquipment;
        }
예제 #4
0
        public void Pop(CombinationSlotState state, int slotIndex)
        {
            _slotIndex = slotIndex;
            CombinationConsumable.ResultModel result;
            CombinationConsumable.ResultModel chainResult;
            try
            {
                result = (CombinationConsumable.ResultModel)state.Result;
                var chainState = new CombinationSlotState((Dictionary)Game.Game.instance.Agent.GetState(state.address));
                chainResult = (CombinationConsumable.ResultModel)chainState.Result;
            }
            catch (InvalidCastException)
            {
                return;
            }
            var subRecipeEnabled = result.subRecipeId.HasValue;

            materialPanel.gameObject.SetActive(false);
            optionView.gameObject.SetActive(false);
            switch (result.itemType)
            {
            case ItemType.Equipment:
            {
                var recipeRow =
                    Game.Game.instance.TableSheets.EquipmentItemRecipeSheet.Values.First(r =>
                                                                                         r.Id == result.recipeId);

                recipeCellView.Set(recipeRow);
                if (subRecipeEnabled)
                {
                    optionView.Show(
                        result.itemUsable.GetLocalizedName(),
                        (int)result.subRecipeId,
                        new EquipmentItemSubRecipeSheet.MaterialInfo(
                            recipeRow.MaterialId,
                            recipeRow.MaterialCount),
                        false
                        );
                }
                else
                {
                    materialPanel.SetData(recipeRow, null, false);
                    materialPanel.gameObject.SetActive(true);
                }

                break;
            }

            case ItemType.Consumable:
            {
                var recipeRow =
                    Game.Game.instance.TableSheets.ConsumableItemRecipeSheet.Values.First(r =>
                                                                                          r.Id == result.recipeId);

                recipeCellView.Set(recipeRow);
                materialPanel.SetData(recipeRow, false, true);
                materialPanel.gameObject.SetActive(true);
                break;
            }
            }

            submitButton.HideAP();
            submitButton.HideNCG();
            var diff = result.itemUsable.RequiredBlockIndex - Game.Game.instance.Agent.BlockIndex;

            if (diff < 0)
            {
                submitButton.SetSubmitText(
                    L10nManager.Localize("UI_COMBINATION_WAITING"),
                    L10nManager.Localize("UI_RAPID_COMBINATION")
                    );
                submitButton.SetSubmittable(result.id == chainResult?.id);
                submitButton.HideHourglass();
            }
            else
            {
                _cost = Action.RapidCombination.CalculateHourglassCount(
                    States.Instance.GameConfigState,
                    diff);
                _row = Game.Game.instance.TableSheets.MaterialItemSheet.Values
                       .First(r => r.ItemSubType == ItemSubType.Hourglass);
                var isEnough =
                    States.Instance.CurrentAvatarState.inventory.HasItem(_row.ItemId, _cost);

                var count = States.Instance.CurrentAvatarState.inventory
                            .TryGetMaterial(_row.ItemId, out var glass) ? glass.count : 0;

                if (result.id == chainResult?.id)
                {
                    submitButton.SetSubmitText(
                        L10nManager.Localize("UI_RAPID_COMBINATION"));
                    submitButton.SetSubmittable(isEnough);
                }
                else
                {
                    submitButton.SetSubmitText(
                        L10nManager.Localize("UI_COMBINATION_WAITING"));
                    submitButton.SetSubmittable(false);
                }

                submitButton.ShowHourglass(_cost, count);
            }

            base.Show();
        }