/// <summary> /// логика при блокированном состоянии /// </summary> /// <param name="fsmevent"></param> /// <returns></returns> private State <TurnstileStatus, Coins> LockedLogic(Event <Coins> fsmevent) { // вставляем монету if (fsmevent.FsmEvent is InsertCoin) { return(GoTo(TurnstileStatus.Unlocked).Using(StateData.AddOne())); } // пытаемся пройти без монеты if (fsmevent.FsmEvent is PushBar) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine($"You can't go, insert coin first please. State is {StateName}."); Console.ResetColor(); return(Stay()); } return(null); }
/// <summary> /// логика при разблокированном состоянии /// </summary> /// <param name="fsmevent"></param> /// <returns></returns> private State <TurnstileStatus, Coins> UnlockedLogic(Event <Coins> fsmevent) { // слишком много монет, получаем сдачу, состояние не меняется if (fsmevent.FsmEvent is InsertCoin) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("Coin already inserted. Take back and go."); Console.ResetColor(); return(GoTo(TurnstileStatus.Unlocked).Using(StateData.AddOne())); } // проходим if (fsmevent.FsmEvent is PushBar) { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine($"You can go. State is: {StateName}."); Console.ResetColor(); return(GoTo(TurnstileStatus.Locked)); } return(null); }