コード例 #1
0
        public IEnumerable <IState <TState, TEvent> > ExecuteTraversal(ITransitionContext <TState, TEvent> context, IState <TState, TEvent> sourceState, IState <TState, TEvent> targetState, Action <ITransitionContext <TState, TEvent> > transitionAction)
        {
            if (sourceState == null)
            {
                sourceState = new OverState();
            }

            var exitedStates  = new List <IState <TState, TEvent> >();
            var enteredStates = new List <IState <TState, TEvent> >();

            GetStateChanges(sourceState, targetState, exitedStates, enteredStates);

            var finalStates = new List <IState <TState, TEvent> >();

            TraverseToEntrySubstates(enteredStates, targetState, finalStates);

            exitedStates.ForEach(s => s.Exit(context));
            if (transitionAction != null)
            {
                transitionAction(context);
            }
            enteredStates.ForEach(s => s.Entry(context));

            return(finalStates);
        }
コード例 #2
0
        public AbstractState makeState(string stateName, string p1, string p2, string p3, float precision, float grados, string stateType, int posState1, int posState2)
        {
            AbstractState aS;
            AbstractState aS1 = getState(posState1);
            AbstractState aS2 = getState(posState2);

            switch (stateType)
            {
            case "AND": aS = new AndState(aS1, aS2, stateName); break;

            case "ANGLE": aS = new AngleState(p1, p3, p2, grados, precision, stateName); break;

            case "CENTER_X": aS = new CenterStateX(p1, p2, precision, stateName); break;

            case "CENTER_Y": aS = new CenterStateY(p1, p2, precision, stateName); break;

            case "CENTER_Z": aS = new CenterStateZ(p1, p2, precision, stateName); break;

            case "DISTANCE": aS = new DistanceState(p1, p2, precision, stateName); break;

            case "LEFT": aS = new LeftState(p1, p2, precision, stateName); break;

            case "OR": aS = new OrState(aS1, aS2, stateName); break;

            case "OVER": aS = new OverState(p1, p2, precision, stateName); break;

            case "POSITION": aS = new PositionState(p1, precision, stateName); break;

            case "RIGHT": aS = new RightState(p1, p2, precision, stateName); break;

            case "UNDER": aS = new UnderState(p1, p2, precision, stateName); break;

            default: aS = new InvalidState(stateName); break;
            }
            return(aS);
        }