void Awake() { _spawner = GetComponentInParent <Spawner>(); _customerEvents = GetComponent <CustomerEvents>(); var waitingState = new WaitingState(this, _customerEvents); var buyingState = new BuyingState(_buyTime, this, _customerEvents); var finishedState = new FinishedState(this, _customerEvents, _spawner, point); var deadState = new DeadState(this, _spawner); _stateMachine = new StateMachine(); At(waitingState, buyingState, IsCustomerCanBuy()); At(buyingState, waitingState, NotIsCustomerCanBuy()); At(waitingState, deadState, IsDead()); At(buyingState, deadState, IsDead()); At(buyingState, finishedState, IsFinishedBuying()); _stateMachine.SetState(waitingState); void At(IState from, IState to, Func <bool> condition) => _stateMachine.AddTransition(from, to, condition); Func <bool> IsCustomerCanBuy() => () => _canBuy; Func <bool> NotIsCustomerCanBuy() => () => !_canBuy; Func <bool> IsFinishedBuying() => () => _finishedBuying; Func <bool> IsDead() => () => _isDead; }
public bool Part() { bool result = Connect(new ConnectedState(ClientConst.ProcessType.Part)); if (!result) { State = new FinishedState(ClientConst.OperationResult.Retryable, ClientConst.ErrorCode.CONNECTION_FAILED); } return(result); }
/// <summary>Constructor.</summary> /// <param name="inputFileName">Name of a file to be processed.</param> public ProjectFileStateMachineImpl(string inputFileName) : base(inputFileName) { m_Created = new CreatedState(this); m_Processing = new ProcessingState(this); m_Finished = new FinishedState(this); AddState(m_Created); AddState(m_Processing); AddState(m_Finished); GoToState(m_Created); }
private static void CommaCombineFinishedStates(StringBuilder sb, FinishedState finished) { bool notEmpty = false; if (finished.HasFlagFast(FinishedState.Finished)) { sb.Append(nameof(FinishedState.Finished)); notEmpty = true; } if (finished.HasFlagFast(FinishedState.Unfinished)) { if (notEmpty) { sb.Append(','); } sb.Append(nameof(FinishedState.Unfinished)); } sb.AppendLine(); }
internal static bool HasFlagFast(this FinishedState @enum, FinishedState flag) => (@enum & flag) == flag;