помоги с этим классом, мне нужно сделать точно такой же класс только без провала квеста и я бы хотел избежать дуближа кода так как мне нужно использовать этот и новый класс 
public class VehicleStartState : IPayloadState<IQuest>
    {
        private readonly SessionQuestStateMachine stateMachine;
        private readonly FatalFailureConditionHandler fatalFailureConditionHandler;
        private readonly CompletionConditionHandler completionConditionHandler;
        private readonly IPublisher publisher;

        private List<IFailureCondition> conditionsForStartingCar;
        private IQuest quest;

        [Inject]
        private StatisticsProvider statisticsProvider;
        [Inject]
        private User user;

        public VehicleStartState(
            SessionQuestStateMachine stateMachine,
            FatalFailureConditionHandler fatalFailureConditionHandler,
            CompletionConditionHandler completionConditionHandler,
            IPublisher publisher)
        {
            this.stateMachine = stateMachine;
            this.fatalFailureConditionHandler = fatalFailureConditionHandler;
            this.completionConditionHandler = completionConditionHandler;
            this.publisher = publisher;
        }

        public void Enter(IQuest quest)
        {
            SessionResultsPuller.SetQuestResult(statisticsProvider, user, QuestResultType.InProgress);

            Debug.Log($"Ожидание запуска двигателя автомобиля");
            this.quest = quest;

            var completionConditions = quest.IsCarNeedReadyToMove
                ? new List<ICompletionCondition>() { new CarIsReadyToMove() }
                : new List<ICompletionCondition>();

            conditionsForStartingCar = new List<IFailureCondition>
            {
                new DrivingWithoutSeatBelt(),
                new LowBeamHeadlightsNotIncluded(),
                new GearboxIsNotInNeutralPosition()
            };

            fatalFailureConditionHandler.Start(conditionsForStartingCar, CompleteQuestWithFailure);
            completionConditionHandler.Start(completionConditions, CompleteQuestWithSuccess);
        }

        private void CompleteQuestWithFailure()
        {
            SessionResultsPuller.SetQuestResult(statisticsProvider, user, QuestResultType.Failed);
            Debug.Log($"Квест завершен неудачей");
            publisher.Publish(new QuestWithFailureMessage());
            stateMachine.Enter<OutputOfQuestResultsState, IQuest>(quest);
        }

        private void CompleteQuestWithSuccess()
        {
            SessionResultsPuller.SetQuestResult(statisticsProvider, user, QuestResultType.Completed);
            switch (quest)
            {
                case QuestComposite quest:
                    stateMachine.Enter<StartCompositeQuestState, QuestComposite>(quest);
                    break;
                case Quest quest:
                    stateMachine.Enter<StartQuestState, IQuest>(quest);
                    break;
                default:
                    break;
            }
        }

        public void Exit()
        {
            fatalFailureConditionHandler.Stop();
            completionConditionHandler.Stop();
        }
    }