Task: Difference between revisions
No edit summary |
No edit summary |
||
Line 12: | Line 12: | ||
</pre> | </pre> | ||
Then you would need to add the tasks in your custom schedule in the order you wish them to execute, notice <code>TASK_FIND_DODGE_DIRECTION</code> has been given a value of | Then you would need to add the tasks in your custom schedule in the order you wish them to execute, notice <code>TASK_FIND_DODGE_DIRECTION</code> has been given a value of 3, you can pass data through with your tasks and use them when the task logic is executed. | ||
<pre> | <pre> | ||
Line 29: | Line 29: | ||
AI_END_CUSTOM_NPC() | AI_END_CUSTOM_NPC() | ||
</pre> | |||
We need to also provide some logic that will be executed for each task, we can do this by overriding the method <code>StartTask( const Task_t *pTask )</code> and <code>RunTask( const Task_t *pTask )</code>of CAI_BaseNPC. As mentioned you can grab the data passed through with the task in these methods by using <code>pTask->flTaskData</code>. An example is shown below. | |||
<pre> | |||
void CNPC_Custom :StartTask( const Task_t *pTask ) | |||
{ | |||
switch ( pTask->iTask ) | |||
{ | |||
case TASK_FIND_DODGE_DIRECTION: | |||
{ | |||
if(!FindBestDodgeDirection(pTask->flTaskData)) | |||
{ | |||
TaskFail( "TASK_FIND_DODGE_DIRECTION: Unable to find suitable dodge direction\n" ); | |||
} | |||
else | |||
{ | |||
TaskComplete(); | |||
} | |||
} | |||
break; | |||
case TASK_JUMP: | |||
{ | |||
Jump(); | |||
} | |||
break; | |||
default: | |||
{ | |||
BaseClass::StartTask( pTask ); | |||
} | |||
} | |||
} | |||
</pre> | </pre> |
Revision as of 16:50, 3 August 2005
A Task is a logical step in a schedule, it can be seen as a sequential set of steps the NPC must take in order to accomplish a schedule.
custom tasks may be added to your NPC by first declaring a new enum.
enum { TASK_JUMP = LAST_SHARED_TASK, TASK_FIND_DODGE_DIRECTION, };
Then you would need to add the tasks in your custom schedule in the order you wish them to execute, notice TASK_FIND_DODGE_DIRECTION
has been given a value of 3, you can pass data through with your tasks and use them when the task logic is executed.
AI_BEGIN_CUSTOM_NPC( npc_custom, CNPC_Custom ) DEFINE_SCHEDULE ( SCHED_DODGE_ENEMY_FIRE, " Tasks" " TASK_FIND_DODGE_DIRECTION 3" " TASK_JUMP 0" "" " Interrupts" " COND_LIGHT_DAMAGE" ); AI_END_CUSTOM_NPC()
We need to also provide some logic that will be executed for each task, we can do this by overriding the method StartTask( const Task_t *pTask )
and RunTask( const Task_t *pTask )
of CAI_BaseNPC. As mentioned you can grab the data passed through with the task in these methods by using pTask->flTaskData
. An example is shown below.
void CNPC_Custom :StartTask( const Task_t *pTask ) { switch ( pTask->iTask ) { case TASK_FIND_DODGE_DIRECTION: { if(!FindBestDodgeDirection(pTask->flTaskData)) { TaskFail( "TASK_FIND_DODGE_DIRECTION: Unable to find suitable dodge direction\n" ); } else { TaskComplete(); } } break; case TASK_JUMP: { Jump(); } break; default: { BaseClass::StartTask( pTask ); } } }