static void DummyFsmUpdate(FSM fsm) { //const int updatePerMs = (int)(1f / 60f * 1000); const int updatePerMs = (int)(1000); bool speedAdding = true; bool gravityAdding = false; bool hpAdding = false; int perNumGravityEnabled = 5; int gravityNum = 0; // var task = Task.Factory.StartNew((Action)(() => // while (true) // { fsm.Update(); var speed = fsm.GetParamValue<int>(P_SPEED); var hp = fsm.GetParamValue<int>(P_HP); var gravity = fsm.GetParamValue<int>(P_GRAVITY); if (hp <= -5) hpAdding = true; else if (hp > 100) hpAdding = false; hp += (hpAdding ? 4 : -4); fsm.SetParamValue(P_HP, hp); // minus 10 hp per frame, to dead when hp less and equals 0 if (hp > 0) // is alive, then to do somthing... { if (speed <= 0) speedAdding = true; else if (speed > 20) speedAdding = false; fsm.SetParamValue(P_SPEED, (speed + (speedAdding ? 1 : -1))); // to run when speed greater and equals 10, back to idle when speed less than 10 if (gravity <= -10) gravityAdding = true; else if (gravity > 10) gravityAdding = false; fsm.SetParamValue(P_GRAVITY, (gravity + (gravityAdding ? 1 : -1))); // to fly when gravity less and equals 0 gravityNum += 1; if (gravityNum % perNumGravityEnabled == 0) { fsm.SetParamValue(P_GRAVITY_ENABLED, !fsm.GetParamValue<bool>(P_GRAVITY_ENABLED)); } } // Thread.Sleep(updatePerMs); // } }
public override void EnterState(FSM fsm) { Debug.Log(string.Format("->Enter State : {0}", Name)); Debug.Log(string.Format("Oh~~ Shit!!! NO! NO! NO!")); // enter dead state, initialize params fsm.SetParamValue(TestFSM.P_SPEED, (int)0); fsm.SetParamValue(TestFSM.P_GRAVITY, (int)10); }
public bool checkLife(FSM fsm) { float curHP = m_unit.getCurProperty((int)GlobalDef.NewHeroProperty.PRO_LIFEPOINT); float maxHP = m_unit.getProperty((int)GlobalDef.NewHeroProperty.PRO_LIFEPOINT); float percent = curHP / maxHP; //检测逃跑 for(int i = 0; i < hpPercentRunaway.Length; i++) { if(percent <= hpPercentRunaway[i] && canRunaway[i] == true) { canRunaway[i] = false; fsm.SetParamValue(AI_Define.P_STATE, (int)AI_Define.AI_State.S_RUN_AWAY); return true; } } //检测翻滚 int energy = (int)m_unit.getCurProperty ((int)GlobalDef.NewHeroProperty.PRO_MOVEPOWER); for(int i = 0; i < hpPercent.Length; i++) { if(percent < hpPercent[i] && canRoll[i] && energy > 0) { canRoll[i] = false; fsm.SetParamValue(AI_Define.P_STATE, (int)AI_Define.AI_State.S_ROLLINGBACK); return true; } } return false; }