示例#1
0
    public void InitFsmFunc()
    {
        fsm.AddStateTransition(State.Ready, Event.Call, State.Accelate);
        fsm.AddStateTransition(State.Ready, Event.Arrived, State.DoorOpening);
        fsm.AddStateTransition(State.Ready, Event.DoorOpenRequest, State.DoorOpening);

        fsm.AddStateTransition(State.Accelate, Event.AccelateEnd, State.NormalMove);
        fsm.AddStateTransition(State.NormalMove, Event.DecelerateStart, State.Decelerate);
        fsm.AddStateTransition(State.Decelerate, Event.Arrived, State.MoveStop);

        fsm.AddStateTransition(State.MoveStop, Event.DoorOpenRequest, State.DoorOpening);
        fsm.AddStateTransition(State.MoveStop, Event.EmptyPassinger, State.Ready);
        fsm.AddStateTransition(State.MoveStop, Event.DoorCloseEnd, State.Accelate);

        fsm.AddStateTransition(State.DoorOpening, Event.DoorOpenEnd, State.DoorOpened);
        fsm.AddStateTransition(State.DoorOpened, Event.DoorCloseStart, State.DoorClosing);
        fsm.AddStateTransition(State.DoorClosing, Event.DoorCloseEnd, State.Accelate);
        fsm.AddStateTransition(State.DoorClosing, Event.EmptyPassinger, State.Ready);

        elevatorAction[(int)State.Ready]       = Ready;       //문닫고 멈춰있는 상태
        elevatorAction[(int)State.NormalMove]  = NormalMove;  //위아래 어느쪽이든 정상적인 이동상태
        elevatorAction[(int)State.Decelerate]  = Decelerate;  //다음층에 멈추기 위한 감속상태
        elevatorAction[(int)State.MoveStop]    = MoveStop;
        elevatorAction[(int)State.DoorOpening] = DoorOpening; //문열는중
        elevatorAction[(int)State.DoorOpened]  = DoorOpened;  //문열린 상태에서 승객내리고 타고
        elevatorAction[(int)State.DoorClosing] = DoorClosing; //문닫히는 동안.
        elevatorAction[(int)State.Accelate]    = Accelate;    //이동에 대한 가속상태
        elevatorAction[(int)State.Turn]        = Turn;

        fsm.SetCurrentState(State.Ready);
    }