Condition: Difference between revisions
m (recategorize) |
m (clean up) |
||
Line 1: | Line 1: | ||
[[Category:AI Programming]] | [[Category:AI Programming]] | ||
Multiple conditions can be set on an NPC which help the NPC determine what schedule should be run (handled in <code>SelectSchedule()</code> or variants). | Multiple conditions can be set on an NPC which help the NPC determine what schedule should be run (handled in <code>SelectSchedule()</code> or variants). | ||
An example of a condition is <code>COND_LIGHT_DAMAGE</code> which may cause the NPC to go to an alert state and select a schedule appropriate to this condition. | An example of a condition is <code>COND_LIGHT_DAMAGE</code> which may cause the NPC to go to an alert state and select a schedule appropriate to this condition. | ||
NPC's can implement their own custom conditions to deal with things unique to that NPC, for instance, you could use a <code>COND_ON_FIRE</code> to determine if the NPC is on fire and select specific schedules on this condition such as <code>SCHED_JUMP_IN_WATER</code>. | NPC's can implement their own custom conditions to deal with things unique to that NPC, for instance, you could use a <code>COND_ON_FIRE</code> to determine if the NPC is on fire and select specific schedules on this condition such as <code>SCHED_JUMP_IN_WATER</code>. | ||
==GatherConditions== | |||
<code>GatherConditions</code> can be overridden in child classes to implement the selection of custom conditions; the function sets the NPC's conditions appropriate at the time based on game state. | |||
The following condition has been taken from the headcrabs <code>GatherConditions()</code> method. | The following condition has been taken from the headcrabs <code>GatherConditions()</code> method. | ||
<pre> | <pre> | ||
Line 22: | Line 18: | ||
} | } | ||
</pre> | </pre> | ||
This if block checks to see if the headcrab is alive but submerged in water, if so a condition <code>COND_HEADCRAB_IN_WATER</code> is set. | This if block checks to see if the headcrab is alive but submerged in water, if so a condition <code>COND_HEADCRAB_IN_WATER</code> is set. | ||
==BuildScheduleTestBits== | |||
<code>BuildScheduleTestBits</code> can be overridden to set custom condition to interrupt schedules. If you want to see your NPC react to conditions, this needs to be overriden so the NPC reacts to fire (COND_ON_FIRE) or start drowing (COND_HEADCRAB_IN_WATER) right away, not after the current schedule ends. | |||
Here is code from the headcrabs <code>BuildScheduleTestBits()</code> | Here is code from the headcrabs <code>BuildScheduleTestBits()</code> | ||
Line 47: | Line 41: | ||
If the condition <code>COND_HEADCRAB_IN_WATER</code> is set, it interrupts the current schedule unless it is already drowning. Then this is handled in <code>SelectSchedule()</code> to choose the appropriate schedule (<code>SCHED_HEADCRAB_DROWN</code>) that will end up drowning the headcrab. | If the condition <code>COND_HEADCRAB_IN_WATER</code> is set, it interrupts the current schedule unless it is already drowning. Then this is handled in <code>SelectSchedule()</code> to choose the appropriate schedule (<code>SCHED_HEADCRAB_DROWN</code>) that will end up drowning the headcrab. | ||
==See Also== | |||
== | * [[Shared conditions]] - a list of conditions inherited by all NPCs | ||
Revision as of 18:24, 10 June 2006
Multiple conditions can be set on an NPC which help the NPC determine what schedule should be run (handled in SelectSchedule()
or variants).
An example of a condition is COND_LIGHT_DAMAGE
which may cause the NPC to go to an alert state and select a schedule appropriate to this condition.
NPC's can implement their own custom conditions to deal with things unique to that NPC, for instance, you could use a COND_ON_FIRE
to determine if the NPC is on fire and select specific schedules on this condition such as SCHED_JUMP_IN_WATER
.
GatherConditions
GatherConditions
can be overridden in child classes to implement the selection of custom conditions; the function sets the NPC's conditions appropriate at the time based on game state.
The following condition has been taken from the headcrabs GatherConditions()
method.
if( m_lifeState == LIFE_ALIVE && GetWaterLevel() > 1 ) { // Start Drowning! SetCondition( COND_HEADCRAB_IN_WATER ); }
This if block checks to see if the headcrab is alive but submerged in water, if so a condition COND_HEADCRAB_IN_WATER
is set.
BuildScheduleTestBits
BuildScheduleTestBits
can be overridden to set custom condition to interrupt schedules. If you want to see your NPC react to conditions, this needs to be overriden so the NPC reacts to fire (COND_ON_FIRE) or start drowing (COND_HEADCRAB_IN_WATER) right away, not after the current schedule ends.
Here is code from the headcrabs BuildScheduleTestBits()
if ( !IsCurSchedule(SCHED_HEADCRAB_DROWN) ) { // Interrupt any schedule unless already drowning. SetCustomInterruptCondition( COND_HEADCRAB_IN_WATER ); } else { // Don't stop drowning just because you're in water! ClearCustomInterruptCondition( COND_HEADCRAB_IN_WATER ); }
If the condition COND_HEADCRAB_IN_WATER
is set, it interrupts the current schedule unless it is already drowning. Then this is handled in SelectSchedule()
to choose the appropriate schedule (SCHED_HEADCRAB_DROWN
) that will end up drowning the headcrab.
See Also
- Shared conditions - a list of conditions inherited by all NPCs