Esempio n. 1
0
    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;
    }
Esempio n. 2
0
        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);
                }
Esempio n. 4
0
        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();
        }
Esempio n. 5
0
 internal static bool HasFlagFast(this FinishedState @enum, FinishedState flag) => (@enum & flag) == flag;