Exemplo n.º 1
0
        public KanKan(IKarass[] karass, IFrameFactory frameFactory)
        {
            _allKarassStates = karass.ToList().Select(_ => new KarassState(_)).ToList();

            for (int i = 0; i < karass.Length; i++)
            {
                _allKarassStates[i] = new KarassState(karass[i]);
            }

            _message      = new KarassMessage();
            _frameFactory = frameFactory;
        }
Exemplo n.º 2
0
        public bool MoveNext()
        {
            KarassState karassState = _allKarassStates[_currentKarass];

            int lastFrameCount = 0;

            if (KarassStateBehaviour.EmptyKarass(karassState.Karass))
            {
                KarassStateBehaviour.InvokeAllSetupActions(karassState.Karass);
                KarassStateBehaviour.InvokeAllTeardownActions(karassState.Karass);

                if (_allKarassStates.Count - 1 < _currentKarass + 1)
                {
                    return(false);
                }

                _currentKarass++;
                return(MoveNext());
            }

            karassState.NextFrames.Clear();

            for (int index = 0; index < karassState.Karass.FramesCollection.Count; index++)
            {
                if (KarassStateBehaviour.FrameSetAlreadyFinished(index, karassState.Complete))
                {
                    continue;
                }

                KarassStateBehaviour.InvokeSetupActionsOnFirstFrame(
                    karassState.CurrentFrames[karassState.Karass.FramesCollection[index]],
                    index,
                    karassState.Karass);

                if (!InvokeCurrentFrame(index,
                                        karassState.CurrentFrames[karassState.Karass.FramesCollection[index]],
                                        _message,
                                        karassState.Karass))
                {
                    continue;
                }

                KarassStateBehaviour.InvokeTeardownActionsIfLastFrame(
                    index,
                    KarassStateBehaviour.AddFrame(karassState.Karass.FramesCollection[index], karassState.CurrentFrames),
                    ref lastFrameCount,
                    out bool shouldComplete,
                    karassState);

                if (!shouldComplete)
                {
                    continue;
                }

                if (_allKarassStates.Count - 1 < _currentKarass + 1)
                {
                    return(false);
                }

                _currentKarass++;
                return(true);
            }

            _message.ClearMessage();

            return(true);
        }