State
The NPC's State and Condition helps the NPC decide on an ideal Schedule. At any given time the NPC will only ever be in one state. You can change the state anywhere in your NPC logic with SetState()
, for instance SetState( NPC_STATE_ALERT );
The following is a list of the states.
NPC_STATE_INVALID NPC_STATE_NONE NPC_STATE_IDLE NPC_STATE_ALERT NPC_STATE_COMBAT NPC_STATE_SCRIPT NPC_STATE_PLAYDEAD NPC_STATE_PRONE NPC_STATE_DEAD
One interesting method that deals with states is the SelectIdealState()
method. This method chooses a state based on its current state and conditions.
The method implementation has a switch statement that reverts Ideal state selection to specific functions to the current state.
switch ( m_NPCState ) { case NPC_STATE_IDLE: { NPC_STATE nState = SelectIdleIdealState(); if ( nState != NPC_STATE_INVALID ) return nState; } break; case NPC_STATE_ALERT: { NPC_STATE nState = SelectAlertIdealState(); if ( nState != NPC_STATE_INVALID ) return nState; } break; case NPC_STATE_COMBAT: { // COMBAT goes to ALERT upon death of enemy if ( GetEnemy() == NULL ) { return NPC_STATE_ALERT; } break; } case NPC_STATE_SCRIPT: { NPC_STATE nState = SelectScriptIdealState(); if ( nState != NPC_STATE_INVALID ) return nState; } break; case NPC_STATE_DEAD: return NPC_STATE_DEAD; }
We can see the switch statement in the case of NPC_STATE_IDLE
state selection will be reverted to SelectIdleIdealState()
method.