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); }
/// <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); }