public void Dead(int uniqId)
        {
            var sprite = GetSprite(uniqId);

            if (BattleDictionary.IsActor(uniqId))
            {
                sprite.SpriteRenderer.material.EnableKeyword(ShaderProperties.GREYSCALE_ON);
            }
            else
            {
                sprite.SpriteRenderer.material.DisableKeyword(ShaderProperties.SHADOW_ON);
                sprite.SpriteRenderer.material.EnableKeyword(ShaderProperties.FADE_ON);
                sprite.Ui.HpBar.gameObject.SetActive(false);
                float fade = 0f;
                DOTween.To(() => fade,
                           (x) => fade = x, 1f, 0.8f).Play().OnUpdate(() =>
                {
                    sprite.SpriteRenderer.GetPropertyBlock(sprite.MaterialPropertyBlock);
                    sprite.MaterialPropertyBlock.SetFloat(ShaderProperties.FadeAmount, fade);
                    sprite.SpriteRenderer.SetPropertyBlock(sprite.MaterialPropertyBlock);
                }).OnComplete(
                    () =>
                {
                    sprite.SpriteRenderer.enabled = false;
                });
            }
        }
Beispiel #2
0
        private GameObject CreateCard(TimelineSerializableData item)
        {
            GameObject turnCard;

            if (BattleDictionary.IsActor(item.uniqId))
            {
                turnCard = Object.Instantiate((GameObject)Resources.Load("Prefabs/Battle/TurnCard"),
                                              Vector3.zero, Quaternion.identity, GameObject.Find("Timeline/TurnCards").transform);
            }
            else
            {
                turnCard = Object.Instantiate((GameObject)Resources.Load("Prefabs/Battle/EnemyTurnCard"),
                                              Vector3.zero, Quaternion.identity, GameObject.Find("Timeline/TurnCards").transform);
            }
            GameObject          battlerImage = turnCard.transform.Find("Mask/BattlerImage").gameObject;
            string              monsterId    = BattlerDictionary.GetBattlerByUniqId(item.uniqId).monsterId;
            MonsterSerializable monster      = MonsterDicionary.GetMonsterData(monsterId);
            var sprite = Resources.Load <Sprite>(monster.imageData.spritePath);
            //Sprite sprite = AssetDatabase.LoadAssetAtPath<Sprite>(monster.imageData.spritePath);
            var image = battlerImage.GetComponent <Image>();

            image.sprite = sprite;
            battlerImage.GetComponent <RectTransform>().sizeDelta =
                new Vector3(sprite.rect.width, sprite.rect.height);
            battlerImage.GetComponent <RectTransform>().localPosition = new Vector3(monster.imageData.timelineCard.x,
                                                                                    monster.imageData.timelineCard.y, 0);
            battlerImage.GetComponent <RectTransform>().localScale =
                new Vector3(monster.imageData.timelineCard.scaleX, monster.imageData.timelineCard.scaleY, 0);
            _turnCards.Add(new TimelineViewStruct()
            {
                Card = turnCard,
                Id   = item.id
            });
            return(turnCard);
        }
Beispiel #3
0
        public static AsyncSubject <Unit> SkillByAi(AiSelectSkillResultSerializableData ai, BattlerSerializable fromBattler)
        {
            AsyncSubject <Unit> subject = new AsyncSubject <Unit>();

            if (ai == null)
            {
                ObservableUtils.AsyncSubjectTimeZeroCompleted(subject);
            }
            else
            {
                var skill = SkillsDicionary.GetSkillById(ai.SkillId);
                if (SkillsDicionary.IsAll(skill))
                {
                    List <BattlerSerializable> toBattlers = new List <BattlerSerializable>();
                    ai.TargetUniqIds.ForEach(x => { toBattlers.Add(BattlerDictionary.GetBattlerByUniqId(x)); });
                    SkillToAll(ai.SkillId, fromBattler, toBattlers).Subscribe(_ =>
                    {
                        subject.OnNext(Unit.Default);
                        subject.OnCompleted();
                    });
                }
                else
                {
                    var uniqId          = ai.TargetUniqIds.First();
                    var toBattler       = BattlerDictionary.GetBattlerByUniqId(uniqId);
                    var targetTransform = BattleDictionary.GetTransformByUniqId(uniqId);
                    SkillToSingle(ai.SkillId, fromBattler, toBattler).Subscribe(_ =>
                    {
                        subject.OnNext(Unit.Default);
                        subject.OnCompleted();
                    });
                }
            }
            return(subject);
        }
Beispiel #4
0
 public void EffectPlay(int targetUniqId)
 {
     Instantiate(effectPrefab, BattleDictionary.GetTransformByUniqId(targetUniqId).localPosition,
         gameObject.transform.rotation);
     PlaySound();
     //TODO
     ObservableUtils.Timer(400).Subscribe(_ => { Destroy(gameObject); });
 }
Beispiel #5
0
        private void BattlerSpriteSubscribe()
        {
            List <int> uniqIds = EnemyDataModel.Instance.UniqIds();

            uniqIds.AddRange(MemberDataModel.Instance.UniqIds());
            uniqIds.ForEach(uniqId =>
            {
                //アクティブ時
                _container.Add(_battlerSpriteModel.GetData(uniqId).Active.Subscribe(isActive =>
                {
                    if (isActive)
                    {
                        AnnounceTextView.Instance.TurnStartText(uniqId);
                        _battlerSpriteView.DeActiveOutline();
                        _battlerSpriteView.OnActiveOutline(uniqId);
                        //メンバーの場合
                        if (BattleDictionary.IsActor(uniqId))
                        {
                            _battleModel.ActiveUniqId = uniqId;
                            _skillsView.SkillView(uniqId);
                        }
                        //敵の場合
                        else
                        {
                            _skillsView.SkillHide();
                            _battleManager.AiAction(uniqId);
                        }
                    }
                    else
                    {
                        _battlerSpriteView.DeActiveOutline();
                        _skillsView.SkillHide();
                    }
                }));
                //HPに変動があった時
                _container.Add(_battlerSpriteModel.GetData(uniqId).Hp.Subscribe(value =>
                {
                    _battlerSpriteView.HpBarRefresh(uniqId);
                }));
                //死んだ時
                _container.Add(_battlerSpriteModel.GetData(uniqId).Dead.Subscribe(isDead =>
                {
                    if (isDead)
                    {
                        _battlerSpriteView.Dead(uniqId);
                        BattleLogic.Dead(BattlerDictionary.GetBattlerByUniqId(uniqId));
                        //PlaySe.GetInstance().Play("SE/Miscs/MonsterDie");
                    }
                }));
                //状態異常にかかった時
                _container.Add(_battlerSpriteModel.GetData(uniqId).Status.Subscribe(_ =>
                {
                    _battlerSpriteView.StatusIconRefresh(uniqId);
                }));
            });
        }
Beispiel #6
0
        public void Initialize(TimeLine timeline)
        {
            List <TimelineSerializableData> timelineData = timeline.TimelineData;
            List <int> schedule = timeline.TimelineSchedule;

            for (int v = 0; v < SCHEDULE_SIZE; v++)
            {
                var item = BattleDictionary.GetTimelineById(timelineData, schedule[v]);
                AddCard(item);
            }
        }
Beispiel #7
0
        /// <summary>
        /// ランダムの対象にスキル発動
        /// </summary>
        /// <param name="skillId"></param>
        /// <param name="fromBattler"></param>
        /// <param name="uniqIds"></param>
        /// <returns></returns>
        public static AsyncSubject <Unit> SkillToRandom(string skillId, BattlerSerializable fromBattler,
                                                        List <int> uniqIds)
        {
            AsyncSubject <Unit> subject   = new AsyncSubject <Unit>();
            List <SkillDamages> damageses = new List <SkillDamages>();

            var skill = SkillsDicionary.GetSkillById(skillId);

            var strikeSize = 1;

            if (skill.strikeSize.min != 0 && skill.strikeSize.max != 0)
            {
                strikeSize = Random.Range(skill.strikeSize.min, skill.strikeSize.max);
            }
            List <BattlerSerializable> toBattlers = new List <BattlerSerializable>();

            uniqIds.ForEach(uniqId =>
            {
                toBattlers.Add(BattlerDictionary.GetBattlerByUniqId(uniqId));
            });
            for (int i = 0; i < strikeSize; i++)
            {
                var toBattler = BattleDictionary.GetAliveBattlerByRandom(toBattlers);
                if (toBattler == null)
                {
                    break;
                }
                var isHit = HitCheck(skillId, fromBattler, toBattler);
                List <SkillDamage> damages = new List <SkillDamage>();
                if (isHit)
                {
                    damages = SkillToBattler(skillId, fromBattler, toBattler);
                }

                var isDead = DeadCheck(toBattler);
                damageses.Add(new SkillDamages
                {
                    SkillDamage  = damages,
                    targetUniqId = toBattler.uniqId,
                    isHit        = isHit,
                    isDead       = isDead
                });
            }
            //ダメージテキストの表示
            AnnounceTextView.Instance.AddDamageText(fromBattler, skill.name, damageses);

            EffectManager.Instance.SkillToTarget(skillId, damageses).Subscribe(_ =>
            {
                subject.OnNext(Unit.Default);
                subject.OnCompleted();
            });
            return(subject);
        }
Beispiel #8
0
        private void SkillToSubscribe()
        {
            _container.Add(_battlerSpriteModel.SelectedSubject.Subscribe(_ =>
            {
                var skill   = SkillsDicionary.GetSkillById(_skillModel.SkillId);
                var battler = BattlerDictionary.GetBattlerByUniqId(_battleModel.ActiveUniqId);
                switch (skill.target)
                {
                case SkillConsts.ENEMY:
                case SkillConsts.MEMBER:
                    var uniqId    = _battlerSpriteModel.SelectUniqId;
                    var toBattler = BattlerDictionary.GetBattlerByUniqId(uniqId);
                    BattleLogic.SkillToSingle(skill.skillId, battler, toBattler)
                    .Subscribe(
                        __ => { _battleModel.NextTurn.OnNext(Unit.Default); });
                    break;

                case SkillConsts.ALL_ENEMY:
                    BattleLogic.SkillToAll(skill.skillId, battler,
                                           BattleDictionary.GetRivalBattlers(battler.battlerType)).Subscribe(__ =>
                    {
                        _battleModel.NextTurn.OnNext(Unit.Default);
                    });
                    break;

                case SkillConsts.ALL_MEMBER:
                    BattleLogic.SkillToAll(skill.skillId, battler,
                                           BattleDictionary.GetMemberBattlers(battler.battlerType)).Subscribe(__ =>
                    {
                        _battleModel.NextTurn.OnNext(Unit.Default);
                    });
                    break;

                case SkillConsts.RANDOM_ENEMY:
                    BattleLogic.SkillToRandom(skill.skillId, battler,
                                              BattleDictionary.GetRivalUniqIds(BattlerEnum.BattlerType.Actor)).Subscribe(
                        __ =>
                    {
                        _battleModel.NextTurn.OnNext(Unit.Default);
                    });
                    break;

                case SkillConsts.RANDOM_MEMBER:
                    BattleLogic.SkillToRandom(skill.skillId, battler,
                                              BattleDictionary.GetMemberUniqIds(BattlerEnum.BattlerType.Actor)).Subscribe(
                        __ =>
                    {
                        _battleModel.NextTurn.OnNext(Unit.Default);
                    });
                    break;
                }
            }));
        }
Beispiel #9
0
        public static bool AllEnemyDeadCheck()
        {
            var battlers = BattleDictionary.GetRivalBattlers(BattlerEnum.BattlerType.Actor);

            foreach (var battler in battlers)
            {
                if (DeadCheck(battler) == false)
                {
                    return(false);
                }
            }
            return(true);
        }
Beispiel #10
0
        public AsyncSubject <Unit> PoisonEffect(int uniqId, List <SkillDamages> damageses)
        {
            var targetTransform         = BattleDictionary.GetTransformByUniqId(uniqId);
            AsyncSubject <Unit> subject = new AsyncSubject <Unit>();
            var poison       = Instantiate((GameObject)Resources.Load("Prefabs/Status/Poison"));
            var poisonEffect = poison.GetComponent <SkillBehavior>();

            poisonEffect.Play(damageses);
            poison.transform.localPosition = targetTransform.localPosition;
            ObservableUtils.Timer(200).Subscribe(_ =>
            {
                subject.OnNext(Unit.Default);
                subject.OnCompleted();
            });
            return(subject);
        }
Beispiel #11
0
        /// <summary>
        /// タイムラインを次に送る
        /// </summary>
        public AsyncSubject <Unit> TimelineNext()
        {
            AsyncSubject <Unit> subject = new AsyncSubject <Unit>();

            TimelineCalc();
            _timelineSchedule.Remove(_timelineSchedule.First());
            var id = TimeLineForward();

            _timelineView.DepopSchedule();
            _timelineView.AddCard(BattleDictionary.GetTimelineById(_timelineData, id)).Subscribe(_ =>
            {
                subject.OnNext(Unit.Default);
                subject.OnCompleted();
            });
            return(subject);
        }
        public void OnActiveOutline(int uniqId)
        {
            var sprite                = GetSprite(uniqId);
            var spriteRenderer        = sprite.SpriteRenderer;
            var materialPropertyBlock = sprite.MaterialPropertyBlock;

            spriteRenderer.material.EnableKeyword(ShaderProperties.OUTBASE_ON);
            spriteRenderer.GetPropertyBlock(materialPropertyBlock);
            if (BattleDictionary.IsActor(sprite.UniqId))
            {
                materialPropertyBlock.SetColor(ShaderProperties.OutlineColor, Color.yellow);
            }
            else
            {
                materialPropertyBlock.SetColor(ShaderProperties.OutlineColor, new Color(1f, 0.2758853f, 0.2f, 1f));
            }
            spriteRenderer.SetPropertyBlock(materialPropertyBlock);
        }
    private void SetHighestHp()
    {
        var hasPreviousHighestHp = BattleDictionary.TryGetValue("HighestHP", out var highestHpObject);

        if (hasPreviousHighestHp)
        {
            var highestHp = (int)highestHpObject;
            if (CurrentHp > highestHp)
            {
                Debug.Log($"{BattlerName} Highest HP: {CurrentHp}");
                BattleDictionary["HighestHP"] = CurrentHp;
            }
        }
        else
        {
            Debug.Log($"{BattlerName} Highest HP: {CurrentHp}");
            BattleDictionary["HighestHP"] = CurrentHp;
        }
    }
Beispiel #14
0
        public AiSelectSkillResultSerializableData SelectSkill(int uniqId)
        {
            BattlerSerializable battler = BattlerDictionary.GetBattlerByUniqId(uniqId);
            //スキルを無造作に選ぶ、アタックの重みは少ない
            var choice = new WeightChoice <string>();

            foreach (var x in battler.skills)
            {
                var _skill = SkillsDicionary.GetSkillById(x);
                if (_skill.skillId == SkillIds.ATTACK)
                {
                    choice.Add(SkillWeights.VERY_LOW, x);
                }
                else if (battler.parameter.mp >= _skill.mp)
                {
                    choice.Add(SkillWeights.NORMAL, x);
                }
            }

            AiSelectSkillResultSerializableData result = new AiSelectSkillResultSerializableData();
            var skill = SkillsDicionary.GetSkillById(choice.ChoiceOne());

            if (battler.parameter.mp >= skill.mp)
            {
                switch (skill.target)
                {
                case SkillConsts.ENEMY:
                case SkillConsts.MEMBER:
                    result.TargetUniqIds.Add(
                        AiLogic.ChoiceBattlerByHostile(BattleDictionary.GetAliveRivalBattlers(battler.battlerType)));
                    break;

                case SkillConsts.ALL_ENEMY:
                case SkillConsts.ALL_MEMBER:
                    result.TargetUniqIds = BattleDictionary.GetRivalUniqIds(battler.battlerType);
                    break;
                }
                result.SkillId = skill.skillId;
            }

            return(result);
        }
Beispiel #15
0
        /// <summary>
        /// 全体にスキル発動
        /// </summary>
        /// <param name="skillId"></param>
        /// <param name="fromBattler"></param>
        /// <param name="toBattlers"></param>
        /// <returns></returns>
        public static AsyncSubject <Unit> SkillToAll(string skillId, BattlerSerializable fromBattler,
                                                     List <BattlerSerializable> toBattlers)
        {
            AsyncSubject <Unit> subject   = new AsyncSubject <Unit>();
            List <SkillDamages> damageses = new List <SkillDamages>();
            var skill = SkillsDicionary.GetSkillById(skillId);
            List <Transform> targetTransforms = new List <Transform>();

            toBattlers.ForEach(battler =>
            {
                var targetTransform        = BattleDictionary.GetTransformByUniqId(battler.uniqId);
                var isHit                  = HitCheck(skillId, fromBattler, battler);
                List <SkillDamage> damages = new List <SkillDamage>();
                if (isHit)
                {
                    damages = SkillToBattler(skillId, fromBattler, battler);
                }

                var isDead = DeadCheck(battler);
                damageses.Add(new SkillDamages()
                {
                    SkillDamage  = damages,
                    targetUniqId = battler.uniqId,
                    isHit        = isHit,
                    isDead       = isDead
                });
                targetTransforms.Add(targetTransform);
            });
            //ダメージテキストの表示
            AnnounceTextView.Instance.AddDamageText(fromBattler, skill.name, damageses);

            EffectManager.Instance.SkillToAll(skillId, damageses).Subscribe(_ =>
            {
                subject.OnNext(Unit.Default);
                subject.OnCompleted();
            });
            return(subject);
        }
Beispiel #16
0
    /// <summary>
    /// ターン開始前の処理
    /// </summary>
    /// <returns></returns>
    private SubjectContainer TurnAwake(int activeUniqId)
    {
        SubjectContainer subjects = new SubjectContainer();

        //色々初期化
        BattlePresenter.GetInstance().Refresh();

        //味方の状態異常処理
        BattleDictionary.GetAllAliveBattlers().ForEach(battler =>
        {
            var results = StatusLogic.StatusUpdate(battler);
            if (results.Count != 0)
            {
                subjects.Add(StatusLogic.StatusEffect(results, battler.uniqId, activeUniqId));
            }

            DeadCheck(battler);
        });

        subjects.Add(BattleGuiManager.Instance.Timeline.TimelineScheduleRemove());

        return(subjects);
    }
Beispiel #17
0
    /// <summary>
    /// ターン開始
    /// </summary>
    private void TurnStart()
    {
        _disposableContainer = new IDisposableContainer();
        TimelineSerializableData timelineData =
            BattleDictionary.GetTimelineById(BattleGuiManager.Instance.Timeline.TimelineData, BattleGuiManager.Instance.Timeline.TimelineSchedule[0]);

        TurnAwake(timelineData.uniqId).Play().Subscribe(_ =>
        {
            ObservableUtils.Timer(300).Subscribe(__ =>
            {
                //行動不能判定
                if (StatusLogic.TurnSkipCheck(timelineData.uniqId))
                {
                    TurnEnd();
                }
                else
                {
                    //行動開始 アクターなら選択処理 エネミー、ミニオンならAI
                    BattlePresenter.GetInstance().BattlerSpriteModel.GetData(timelineData.uniqId).Active.OnNext(true);
                }
            });
        });
    }
Beispiel #18
0
        public void Play(List<SkillDamages> damageses)
        {
            SubjectContainer container = new SubjectContainer();
            
            if (isAll)
            {
                if (isAllOneEffect)
                {
                    Instantiate(effectPrefab,
                        BattleDictionary.GetTransformByUniqId(damageses.First().targetUniqId).localPosition,
                        gameObject.transform.rotation);
                }
                else
                {
                    damageses.ForEach(damage =>
                    {
                        if (BattlerDictionary.IsDead(damage.targetUniqId) == false)
                        {
                            Instantiate(effectPrefab,
                                BattleDictionary.GetTransformByUniqId(damage.targetUniqId).localPosition,
                                gameObject.transform.rotation);
                        }
                    });
                }
            }

            var maxTime = damageses.Count * 300;
            foreach (var (x, index) in damageses.Select((x, index) => (x, index)))
            {
                ObservableUtils.Timer(300 * index).Subscribe(_ =>
                {
                    if (isAll == false)
                    {
                        Instantiate(effectPrefab, BattleDictionary.GetTransformByUniqId(damageses.First().targetUniqId).localPosition,
                            gameObject.transform.rotation);
                    }

                    if (x.isHit)
                    {
                        HitEffect(x.targetUniqId);
                        x.SkillDamage.ForEach(damage =>
                        {
                            DamagePopup(BattleDictionary.GetTransformByUniqId(damageses.First().targetUniqId), damage, x.targetUniqId);
                        });
                        hitSound.ForEach(item =>
                        {
                            ObservableUtils.Timer(frame * 100f).Subscribe(__ =>
                            {
                                if (item.pitch == 0)
                                    item.pitch = 1;
                                if (item.volume == 0)
                                    item.volume = 1;
                                item.volume = item.volume * _volumeRate;
                                _audioSource.pitch = item.pitch;
                                _audioSource.volume = item.volume;
                                _audioSource.PlayOneShot(item.sound);
                            });
                        });
                    }
                    else
                    {
                        DodgePopup(BattleDictionary.GetTransformByUniqId(damageses.First().targetUniqId));
                    }
                });
            }
            if (maxTime < sound.Count * 100)
                maxTime = sound.Count * 100;
            PlaySound();
            //TODO
            ObservableUtils.Timer(maxTime + 100).Subscribe(_ =>
            {
                Destroy(gameObject);
            });
        }
Beispiel #19
0
        /// <summary>
        /// バトラー選択時
        /// </summary>
        private void BattlerSelectSubscribe()
        {
            _container.Add(BattlerSpriteModel.SkillSelectSubject.Subscribe(_ =>
            {
                _battlerSpriteView.DeActiveOutline();
            }));
            //全体選択時
            _container.Add(BattlerSpriteModel.AllSelectSubject.Subscribe(_ =>
            {
                var skill = SkillsDicionary.GetSkillById(_skillModel.SkillId);
                BattlerSpriteView.Sprites.ForEach(sprite =>
                {
                    var battler = BattlerDictionary.GetBattlerByUniqId(sprite.UniqId);
                    if ((skill.target == SkillConsts.ALL_ENEMY || skill.target == SkillConsts.RANDOM_ENEMY) && battler.battlerType == BattlerEnum.BattlerType.Enemy ||
                        (skill.target == SkillConsts.ALL_MEMBER || skill.target == SkillConsts.RANDOM_MEMBER) && battler.battlerType == BattlerEnum.BattlerType.Actor)
                    {
                        _battlerSpriteView.SelectOutline(sprite);
                    }
                });
            }));
            BattlerSpriteView.Sprites.ForEach(sprite =>
            {
                //ホバー時
                _container.Add(sprite.SpriteObject.OnMouseOverAsObservable().Subscribe(_ =>
                {
                    if (_skillModel.ActiveIndex != -1 && _battlerSpriteModel.HoverUniqId != sprite.UniqId)
                    {
                        var skill = SkillsDicionary.GetSkillById(_skillModel.SkillId);
                        if (SkillsDicionary.IsSingle(skill))
                        {
                            _battlerSpriteModel.HoverUniqId = sprite.UniqId;
                            var targetBattler = BattlerDictionary.GetBattlerByUniqId(sprite.UniqId);
                            _battlerSpriteView.DeSelectOutlineByBattlerType(targetBattler.battlerType);
                            if (BattleDictionary.IsAppropriate(skill.skillId, _battleModel.ActiveUniqId, sprite.UniqId))
                            {
                                _battlerSpriteView.SelectOutline(sprite);
                            }
                        }
                    }
                }));
                //ターゲット選択時の処理、選択したスキルが発動する
                _container.Add(sprite.SpriteObject.OnMouseUpAsButtonAsObservable().Subscribe(_ =>
                {
                    if (_skillModel.ActiveIndex != -1)
                    {
                        _skillsView.SkillHide();
                        var skill = SkillsDicionary.GetSkillById(_skillModel.SkillId);
                        if (BattleDictionary.IsAppropriate(skill.skillId, _battleModel.ActiveUniqId, sprite.UniqId))
                        {
                            _skillModel.ActiveIndex = -1;

                            switch (skill.target)
                            {
                            case SkillConsts.MEMBER:
                            case SkillConsts.ENEMY:
                                _battlerSpriteView.DeSelectOutline(sprite);
                                _battlerSpriteModel.SelectUniqId = sprite.UniqId;
                                break;

                            case SkillConsts.ALL:
                            case SkillConsts.ALL_ENEMY:
                            case SkillConsts.ALL_MEMBER:
                            case SkillConsts.RANDOM_ENEMY:
                            case SkillConsts.RANDOM_MEMBER:
                                BattlerSpriteView.Sprites.ForEach(x =>
                                {
                                    _battlerSpriteView.DeSelectOutline(x);
                                });
                                break;
                            }

                            _battlerSpriteModel.SelectedSubject.OnNext(Unit.Default);
                        }
                    }
                }));
            });
        }