// ------------------------------------------------------------------
// Desc:
// ------------------------------------------------------------------
void InitFSM () {
FSM.Condition cond_isPlayerInAttackRange = new Condition_isPlayerInAttackRange(this,60.0f,1.5f);
FSM.Condition cond_isAttacking = new Condition_isAttacking(this);
FSM.Condition cond_noHP = new Condition_noHP(this.zombieInfo);
// ========================================================
// setup states
// ========================================================
// seekPlayers
FSM.State state_seekPlayers = new FSM.State( "SeekPlayers",
new Action_PlayAnim(this.anim,"walk"),
new Action_MoveToNearestAlivedPlayer(0.01f,this),
new Action_StopMoving(this) );
// attack
FSM.State state_attack = new FSM.State( "Attack",
new Action_Attack(this),
null,
null );
// dead
FSM.State state_dead = new FSM.State( "Dead",
new Action_ActOnDead(this),
null,
null );
// ========================================================
// setup transitions
// ========================================================
// seek to ...
state_seekPlayers.AddTransition( new FSM.Transition( state_dead,
cond_noHP,
null ) );
state_seekPlayers.AddTransition( new FSM.Transition( state_attack,
cond_isPlayerInAttackRange,
null ) );
// attack to ...
state_attack.AddTransition( new FSM.Transition( state_dead,
cond_noHP,
null ) );
state_attack.AddTransition( new FSM.Transition( state_seekPlayers,
new FSM.Condition_not(cond_isAttacking),
null ) );
//
fsm.init(state_seekPlayers);
}