Beispiel #1
0
        public void Initialize()
        {
            // 有効になった後
            DidActiveDisposable = ActivateSubject
                                  // 受付時間が経過した後
                                  .SelectMany(_ => Observable.Timer(TimeSpan.FromSeconds(Constant.MoleActiveDuration)))
                                  // まだ攻撃が有効な場合
                                  .Where(_ => CanAttack)
                                  // 非表示にする
                                  .Subscribe(_ => HideSubject.Do());
            // 無効になった後
            DidInactiveDisposable = DeactivateSubject
                                    // ランダムに待った後
                                    .SelectMany(_ => Observable.Timer(TimeSpan.FromSeconds(UnityEngine.Random.Range(Constant.MoleInactiveDurationFrom, Constant.MoleInactiveDurationTo))))
                                    // 次の処理をランダムに決定して実行
                                    .Subscribe(_ => NextActionMap.Random().Value(this).Do());

            ActivateSubject.Subscribe(_ => CanAttack   = true);
            DeactivateSubject.Subscribe(_ => CanAttack = false);

            // 表示が終わったら当たり判定を有効にする
            ShowSubject.WhenDid().Subscribe(_ => ActivateSubject.OnNext(Unit.Default));
            // 消去が始まったら当たり判定を無効にする
            HideSubject.WhenWill().Subscribe(_ => DeactivateSubject.OnNext(Unit.Default));
            // フェイントが終わったら当たり判定を無効にする
            FeintSubject.WhenDid().Subscribe(_ => DeactivateSubject.OnNext(Unit.Default));
            // 攻撃が始まったら当たり判定を無効にする
            AttackSubject.WhenWill().Subscribe(_ => DeactivateSubject.OnNext(Unit.Default));
        }
Beispiel #2
0
 public void Finish()
 {
     ShowSubject.OnCompleted();
     HideSubject.OnCompleted();
     FeintSubject.OnCompleted();
     HitSubject.OnCompleted();
     DidActiveDisposable?.Dispose();
     DidInactiveDisposable?.Dispose();
 }