Ejemplo n.º 1
0
        public static AsyncSubject <Unit> StatusEffect(List <StatusUpdateResult> results, int uniqId, int activeUniqId)
        {
            AsyncSubject <Unit> subject = new AsyncSubject <Unit>();
            int count       = 0;
            var subjects    = new SubjectContainer();
            var fromBattler = BattlerDictionary.GetBattlerByUniqId(uniqId);

            results.ForEach(x =>
            {
                switch (x.StatusType)
                {
                case StatusConsts.POISON:
                    AnnounceTextView.Instance.PoisonText(fromBattler, x.Value, x.IsDead);
                    List <SkillDamage> damage = new List <SkillDamage>();
                    damage.Add(new SkillDamage()
                    {
                        damage      = x.Value,
                        valueTarget = SkillConsts.HP
                    });
                    List <SkillDamages> damageses = new List <SkillDamages>();
                    damageses.Add(new SkillDamages()
                    {
                        isHit        = true,
                        SkillDamage  = damage,
                        targetUniqId = uniqId,
                        isDead       = x.IsDead
                    });

                    subjects.Add(EffectManager.Instance.PoisonEffect(uniqId, damageses));
                    break;

                case StatusConsts.SLEEP:
                    if (uniqId == activeUniqId)
                    {
                        AnnounceTextView.Instance.SleepText(fromBattler);
                        subjects.Add(EffectManager.Instance.SleepEffect(uniqId));
                    }
                    break;
                }
            });

            subjects.Play().Subscribe(_ =>
            {
                subject.OnNext(Unit.Default);
                subject.OnCompleted();
            });

            return(subject);
        }
Ejemplo n.º 2
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);
    }