public void Initialize()
 {
     _Process = _FirstProcess;
     _AttackProcesser.Initialize();
     _MoveProcesser.Initialize();
     _AttackProcesser.CompleteAsObservable()
     .Zip(_MoveProcesser.CompleteAsObservable(), (l, r) => r)
     .First()
     .Subscribe(_ => _CompleteObserver.OnNext(Unit.Default));
 }
            public EnemyActionProcesser(Enemy enemy, EnemyActionData data)
            {
                _Enemy = enemy;
                _Data  = data;
                if (data.AttackData.Count() == 0)
                {
                    _AttackProcesser = new NullAttackProcesser();
                }
                else
                {
                    _AttackProcesser = new EnemyAttackProcesser(data.AttackData, enemy);
                }
                _MoveProcesser    = new EnemyMoveProcesser(enemy, data.MoveData);
                _CompleteObserver = new Subject <Unit> ();
                _AttackProcesser.CompleteAsObservable()
                .Zip(_MoveProcesser.CompleteAsObservable(), (l, r) => r)
                .First()
                .Subscribe(_ => _CompleteObserver.OnNext(Unit.Default));

                _CompleteObserver.Subscribe(_ => _Process = _FirstProcess);

                _Process = _FirstProcess;
            }