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