Beispiel #1
0
        public TimeMachineState Execute(TimeMachineState previousState, IAction action)
        {
            if(action is ResumeTimeMachineAction)
            {
                return previousState
                    .WithIsPaused(false)
                    .WithStates(previousState.States.Take(previousState.Position + 1).ToImmutableList())
                    .WithActions(previousState.Actions.Take(previousState.Position).ToImmutableList());
            }

            if(action is PauseTimeMachineAction)
            {
                return previousState
                    .WithIsPaused(true);
            }

            if(action is SetTimeMachinePositionAction)
            {
                return previousState
                    .WithPosition(((SetTimeMachinePositionAction)action).Position)
                    .WithIsPaused(true);
            }

            if (previousState.IsPaused)
            {
                return previousState;
            }

            var innerState = _reducer(previousState.States.Last(), action);

            return previousState
                .WithStates(previousState.States.Add(innerState))
                .WithActions(previousState.Actions.Add(action))
                .WithPosition(previousState.Position + 1);
        }
Beispiel #2
0
        public TimeMachineState Execute(TimeMachineState previousState, IAction action)
        {
            if (action is ResumeTimeMachineAction)
            {
                return(previousState
                       .WithIsPaused(false)
                       .WithStates(previousState.States.Take(previousState.Position + 1).ToImmutableList())
                       .WithActions(previousState.Actions.Take(previousState.Position).ToImmutableList()));
            }

            if (action is PauseTimeMachineAction)
            {
                return(previousState
                       .WithIsPaused(true));
            }

            if (action is SetTimeMachinePositionAction)
            {
                return(previousState
                       .WithPosition(((SetTimeMachinePositionAction)action).Position)
                       .WithIsPaused(true));
            }

            if (previousState.IsPaused)
            {
                return(previousState);
            }

            var innerState = _reducer(previousState.States.Last(), action);

            return(previousState
                   .WithStates(previousState.States.Add(innerState))
                   .WithActions(previousState.Actions.Add(action))
                   .WithPosition(previousState.Position + 1));
        }