State: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
No edit summary
 
No edit summary
Line 13: Line 13:
</blockquote>
</blockquote>


SelectIdealState()
The select ideal state method chooses a state based on it's current state and conditions.


The function has a switch statement that reverts Ideal state selection to specific functions to the current state.  
One interesting method that deals with states is the SelectIdealState() method.
 
The SelectIdealState() method chooses a state based on it's current state and conditions.
 
The method implementation has a switch statement that reverts Ideal state selection to specific functions to the current state.  


Code:
<blockquote>
<blockquote>
switch ( m_NPCState )  
switch ( m_NPCState )  
Line 60: Line 61:
}  
}  
   
   
</blockquote>


 
We can see the switch statement in the case of NPC_STATE_IDLE state selection will be reverted to SelectIdleIdealState() method.
We can see above in the case of NPC_STATE_IDLE state selection will be reverted to SelectIdleIdealState() function.
 
SelectIdealState() is called in MaintainSchedule () function (see below) if there is no current schedule and the current state is not the ideal state, it also does a check to see if it should select the ideal state, again, based on states and conditions which adds to the complexity level of state selection.

Revision as of 12:15, 3 August 2005

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.

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.

The SelectIdealState() method chooses a state based on it's 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.