// Use this for initialization void Start () { // Console.ForegroundColor = ConsoleColor.Green; fsm = new FSM("Jave's FSM"); Debug.Log(string.Format("Start testing :{0}", fsm)); // add event show cur state changed info fsm.CurStateChangedEvent += (CurStateChangedEventHandler)((sender) => { Debug.Log(string.Format("state changed, last : {0}, cur : {1}", fsm.LastState, fsm.CurState)); }); // add event show params changed info fsm.ParamsChangedEvent += (ParamsChangedEventHandler)((sender, paramChangedArgs) => { //Debug.Log(string.Format( // "param:{1}, src:{2}, to: {3}", // fsm, paramChangedArgs.CurValue.Name, paramChangedArgs.LastValue.Value, paramChangedArgs.CurValue.Value)); }); // add some states fsm.AddState(new MyIdle(IDLE)); fsm.AddState(new MyRun(RUN)); fsm.AddState(new MyFly(FLY)); fsm.AddState(new MyDead(DEAD)); // set any state fsm.AnyState = new MyAnyState("any state"); // set cur state fsm.CurState = fsm.GetState(IDLE); // add some into fsm black board, u can add anythings for every states to calcs fsm.Blackboard.AddData("Boss", new Boss()); // add fsm some params fsm.AddParam(new ParamFunc(P_GRAVITY_FUNC_1, (FuncParamHandler)(funcArgs => // Param can be a func, handl complex logic { return fsm.GetParamValue<int>(P_SPEED) > 15 && fsm.GetParamValue<int>(P_HP) > 0 && fsm.GetParamValue<int>(P_GRAVITY) <= 0; }))); fsm.AddParam(new ParamFunc(P_GRAVITY_FUNC_2, (FuncParamHandler)(funcArgs => // Param can be a func, handl complex logic { return fsm.GetParamValue<int>(P_SPEED) < 15 && fsm.GetParamValue<int>(P_HP) > 0; }))); fsm.AddParam(new ParamValue(P_GRAVITY) { Value = 10 }); // init gravity = 10; fsm.AddParam(new ParamBoolean(P_GRAVITY_ENABLED) { Value = true }); // init gravity_enabled = true fsm.AddParam(new ParamValue(P_SPEED) { Value = 0 }); // init speed = 0; fsm.AddParam(new ParamValue(P_HP) { Value = 100 }); // init hp = 100 // idle state add some transition to run FSM.TransitionTo(fsm, IDLE, RUN, new List<Condition>() { COND_GE_10_SPEED, COND_ALIVE_HP }); // run back to idle FSM.TransitionTo(fsm, RUN, IDLE, new List<Condition>() { COND_L_10_SPEED, COND_ALIVE_HP }); // run to fly FSM.TransitionTo(fsm, RUN, FLY, new List<Condition>() { COND_GRAVITY_FUNC_1 }); // back to run FSM.TransitionTo(fsm, FLY, RUN, new List<Condition>() { COND_GRAVITY_FUNC_2, COND_E_TRUE_GRAVITY_ENABLE }); // every state to fly, except dead ToFly(fsm, IDLE); ToFly(fsm, RUN); // idle, run, fly, and so on, states add some transition to dead state's transitions. ToDead(fsm, IDLE); ToDead(fsm, RUN); ToDead(fsm, FLY); // dead back to alive(idle) FSM.TransitionTo(fsm, DEAD, IDLE, new List<Condition>() { COND_ALIVE_HP }); // dummy fsm update task // DummyFsmUpdate(fsm); Console.ReadLine(); }