Exemple #1
0
    private void InitialiseFSM()
    {
        _fsm = new FSM.FSM();

        State idleState    = new IdleState(this);
        State rollingState = new RollingState(this);
        State mountedState = new MountedState(this);

        _fsm.AddTransition(idleState, rollingState, () =>
        {
            return(_currentHeading != Vector3.zero);
        });

        _fsm.AddTransition(rollingState, idleState, () =>
        {
            return(_currentHeading == Vector3.zero);
        });

        _fsm.AddTransition(idleState, mountedState, () =>
        {
            if (Input.GetKeyDown(KeyCode.F))
            {
                return(EnterGolem());
            }

            return(false);
        });

        _fsm.AddTransition(mountedState, idleState, () =>
        {
            return(Input.GetKeyDown(KeyCode.F));
        });

        _fsm.SetDefaultState(idleState);
    }
Exemple #2
0
        static void Main(string[] args)
        {
            FSM fsm = new FSM(PlayerStates.init);

            //init->idle
            //idle->walk
            //walk->run
            //run->walk
            //walk->idle

            fsm.AddState(PlayerStates.init);
            fsm.AddState(PlayerStates.idle);
            fsm.AddState(PlayerStates.walk);
            fsm.AddState(PlayerStates.run);
            fsm.AddState(PlayerStates.run);
            fsm.AddState(PlayerStates.run);

            fsm.Info();

            fsm.AddTransition(PlayerStates.init, PlayerStates.idle);
            fsm.AddTransition(PlayerStates.idle, PlayerStates.walk);
            fsm.AddTransition(PlayerStates.walk, PlayerStates.run);
            fsm.AddTransition(PlayerStates.run, PlayerStates.walk);
            fsm.AddTransition(PlayerStates.walk, PlayerStates.idle);

            Console.ReadLine();
        }
Exemple #3
0
    private void InitaliseFSM()
    {
        _fsm = new FSM.FSM();

        State dormantState = new DormantState(this);
        State idleState    = new IdleState(this);
        State walkingState = new WalkingState(this);
        State pushingState = new PushingState(this);
        State liftingState = new LiftingState(this);

        _fsm.AddTransition(dormantState, idleState, () => { return(!_dormant); });
        _fsm.AddTransition(idleState, dormantState, () => { return(_dormant); });

        _fsm.AddTransition(idleState, walkingState, () => { return(_heading != Vector3.zero); });
        _fsm.AddTransition(walkingState, idleState, () =>
        {
            Vector3 vel = _rb.velocity;
            vel.y       = 0f;
            return(_heading == Vector3.zero && vel == Vector3.zero);
        });

        // Pushing
        _fsm.AddTransition(idleState, pushingState, () =>
        {
            if (Input.GetKeyDown(KeyCode.E))
            {
                return(BeginPushing());
            }

            return(false);
        });

        _fsm.AddTransition(pushingState, idleState, () =>
        {
            return(Input.GetKeyDown(KeyCode.E));
        });

        // Lifting
        _fsm.AddTransition(idleState, liftingState, () =>
        {
            if (Input.GetKeyDown(KeyCode.Q))
            {
                return(BeginLifting());
            }

            return(false);
        });

        _fsm.AddTransition(liftingState, idleState, () =>
        {
            return(Input.GetKeyDown(KeyCode.Q));
        });

        _fsm.SetDefaultState(idleState);
    }
Exemple #4
0
        public HurtedFS(FSM fsm, SceneCardBase card)
            : base(fsm)
        {

        }
Exemple #5
0
        //public AnimIdleFS(FSM fsm, BeingEntity beingEntity)
        //    : base(fsm, beingEntity)
        //{

        //}

        public AnimIdleFS(FSM fsm, SceneCardBase card)
            : base(fsm)
        {

        }
Exemple #6
0
        public HurtStartFS(FSM fsm, SceneCardBase card)
            : base(fsm)
        {

        }
Exemple #7
0
 public Dest2InplaceingFS(FSM fsm, SceneCardBase card)
     : base(fsm)
 {
 }
Exemple #8
0
 public FSMInfo(FSM element, string KeyName)
 {
     Element      = element;
     this.KeyName = KeyName;
 }
        public Inplace2DestedFS(FSM fsm, SceneCardBase card)
            : base(fsm)
        {

        }
Exemple #10
0
 public State(FSM <TStateType> fsm, TStateType stateType)
 {
     _fsm      = fsm;
     StateType = stateType;
 }
Exemple #11
0
 public InplaceFS(FSM fsm, SceneCardBase card)
     : base(fsm)
 {
 }
Exemple #12
0
        public FSMSceneState(FSM fsm) :
            base(fsm)
        {

        }
Exemple #13
0
 public HurtingFS(FSM fsm, SceneCardBase card)
     : base(fsm)
 {
 }
Exemple #14
0
        //public AnimRunFS(FSM fsm, BeingEntity beingEntity)
        //    : base(fsm, beingEntity)
        //{

        //}

        public AnimRunFS(FSM fsm, SceneCardBase card)
            : base(fsm)
        {

        }
Exemple #15
0
 public AttackStartFS(FSM fsm, SceneCardBase card)
     : base(fsm)
 {
 }
Exemple #16
0
        //protected BeingEntity m_beingEntity;

        //protected FSMState(FSM fsm, BeingEntity beingEntity)
        //{
        //    mFSM = fsm;
        //    m_beingEntity = beingEntity;
        //}

        protected FSMState(FSM fsm)
        {
            mFSM = fsm;
        }
Exemple #17
0
 public HurtStartFS(FSM fsm, SceneCardBase card)
     : base(fsm)
 {
 }
Exemple #18
0
 public FSMState(FSM <S> fsm)
 {
     this.fsm = fsm;
 }
Exemple #19
0
        public static void Main()
        {
            int id = 1;

            State s1 = new State(id++, "睡觉中");
            State s2 = new State(id++, "吃饭中");
            State s3 = new State(id++, "上课中");
            State s4 = new State(id++, "看时间中");
            State s5 = new State(id++, "打游戏中");

            Transition t1 = new Transition(id++, s1, s2);
            Transition t2 = new Transition(id++, s2, s3);
            Transition t3 = new Transition(id++, s3, s2);
            Transition t4 = new Transition(id++, s2, s4);
            Transition t5 = new Transition(id++, s4, s5);
            Transition t6 = new Transition(id++, s4, s1);
            Transition t7 = new Transition(id++, s5, s1);

            AlarmClock       clock            = new AlarmClock(id++, "闹钟响", 7, 6);
            Eaten            eaten1           = new Eaten(id++, "吃完饭");
            Eaten            eaten2           = new Eaten(id++, "吃完饭");
            ClassNotFinished classNotFinished = new ClassNotFinished(id++, "还有课要上");
            ClassBell        bell             = new ClassBell(id++, "下课铃响");
            StillEarly       early            = new StillEarly(id++, "时间还早");
            TooLate          late             = new TooLate(id++, "时间不早了");
            GameFinished     gameFinished     = new GameFinished(id++, "打完游戏");

            t1.AddEvent(clock);
            t2.AddEvent(eaten1);
            t2.AddEvent(classNotFinished);
            t3.AddEvent(bell);
            t4.AddEvent(eaten2);
            t5.AddEvent(early);
            t6.AddEvent(late);
            t7.AddEvent(gameFinished);

            Sleep     sleep     = new Sleep(id++, "睡觉", clock);
            Eat       eat       = new Eat(id++, "吃饭", eaten1, eaten2);
            TakeClass takeClass = new TakeClass(id++, "上课", bell, classNotFinished);
            CheckTime checkTime = new CheckTime(id++, "看时间", early, late);
            PlayGame  playGame  = new PlayGame(id++, "打游戏", gameFinished);

            s1.AddTransition(t1);
            s2.AddTransition(t2);
            s2.AddTransition(t4);
            s3.AddTransition(t3);
            s4.AddTransition(t5);
            s4.AddTransition(t6);
            s5.AddTransition(t7);

            s1.AddAction(sleep);
            s2.AddAction(eat);
            s3.AddAction(takeClass);
            s4.AddAction(checkTime);
            s5.AddAction(playGame);

            FSM.FSM fsm = new FSM.FSM();
            fsm.AddState(s1);
            fsm.AddState(s2);
            fsm.AddState(s3);
            fsm.AddState(s4);
            fsm.AddState(s5);
            fsm.SetStartState(s1);
            fsm.SetCurrentState(s1);

            ConsoleKeyInfo cki;

            Console.WriteLine("生活行为状态机, 按 N 键进行下一步,按 E 键退出程序。");
            while (true)
            {
                Console.WriteLine("请输入:");

                cki = Console.ReadKey();

                Console.WriteLine();

                if (cki.Key == ConsoleKey.N)
                {
                    Console.WriteLine("当前状态:" + fsm.GetCurrentState().GetName());

                    fsm.CheckAndChangeState();
                }
                else if (cki.Key == ConsoleKey.E)
                {
                    break;
                }
                else
                {
                    Console.WriteLine("输入无效,请重新输入:");
                }
            }
        }
Exemple #20
0
 public AttackingFS(FSM fsm, SceneCardBase card)
     : base(fsm)
 {
 }
Exemple #21
0
        //public AnimIdleFS(FSM fsm, BeingEntity beingEntity)
        //    : base(fsm, beingEntity)
        //{

        //}

        public AnimIdleFS(FSM fsm, SceneCardBase card)
            : base(fsm)
        {
        }
Exemple #22
0
 public FSMSceneState(FSM fsm) :
     base(fsm)
 {
 }
Exemple #23
0
        //public AnimWalkFS(FSM fsm, BeingEntity beingEntity)
        //    : base(fsm, beingEntity)
        //{

        //}

        public AnimWalkFS(FSM fsm, SceneCardBase card)
            : base(fsm)
        {
        }
Exemple #24
0
 public virtual void InitState(T inst, FSM<T, StateType> owner)
 {
     instance = inst;
     ownerMachine = owner;
     StartStateInternal();
 }
Exemple #25
0
 public Inplace2DestStartFS(FSM fsm, SceneCardBase card)
     : base(fsm)
 {
 }
        public Dest2InplaceStartFS(FSM fsm, SceneCardBase card)
            : base(fsm)
        {

        }
Exemple #27
0
        public AttackedFS(FSM fsm, SceneCardBase card)
            : base(fsm)
        {

        }
Exemple #28
0
        //protected BeingEntity m_beingEntity;

        //protected FSMState(FSM fsm, BeingEntity beingEntity)
        //{
        //    mFSM = fsm;
        //    m_beingEntity = beingEntity;
        //}

        protected FSMState(FSM fsm)
        {
            mFSM = fsm;
        }
Exemple #29
0
        //public AnimRunFS(FSM fsm, BeingEntity beingEntity)
        //    : base(fsm, beingEntity)
        //{

        //}

        public AnimRunFS(FSM fsm, SceneCardBase card)
            : base(fsm)
        {
        }