Difference between revisions of "Creating a task"

From Valve Developer Community
Jump to: navigation, search
(Task logic)
(Redirected page to Task)
 
Line 1: Line 1:
{{npc tut}}
+
#redirect [[Task]]
 
 
A '''Task''' is an action that an NPC can perform. [[Schedule]]s will run a list of tasks. Keep tasks as atomic as possible; don't squeeze two distinct actions into the same one.
 
 
 
== Creating a task ==
 
 
 
Custom tasks are added by first declaring a new enum value.
 
 
 
<source lang=cpp>
 
enum
 
{
 
TASK_JUMP = LAST_SHARED_TASK,
 
TASK_FIND_DODGE_DIRECTION,
 
LAST_MY_NPC_TASK,
 
};
 
</source>
 
 
 
After that, the task itself should be declared like this:
 
 
 
<source lang=cpp>
 
AI_BEGIN_CUSTOM_NPC( npc_custom, CNPC_Custom )
 
DECLARE_TASK( TASK_FIND_DODGE_DIRECTION )
 
AI_END_CUSTOM_SCHEDULE_PROVIDER()
 
</source>
 
 
 
Then you add the tasks in your custom schedule in the order you want them to execute. See [[Schedule]] for more details on the following code:
 
 
 
<source lang=cpp>
 
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()
 
</source>
 
 
 
== Task logic ==
 
 
 
Now that everything is set up it's finally time ''to write some actual AI code''.
 
 
 
* Tasks are initiated from <code>StartTask(Task_t *pTask)</code>, which should take the form of a <code>[[W:Switch statement#Examples|switch]]</code> statement that evaluates <code>pTask->iTask</code>. {{note|Remember to have a <code>default</code> case that falls back on <code>BaseClass::StartTask()</code>.}}
 
* Each task has an associated [[float]] value, <code>pTask->flTaskData</code>, which can be used to change its outcome.
 
* When the current task is complete, call <code>TaskComplete()</code>. The schedule will move on to the next task.
 
* If the current task has failed, call <code>TaskFail()</code> with an error message. A new schedule will be selected.
 
 
 
=== Navigation ===
 
 
 
{{todo}}
 
 
 
=== Animation ===
 
 
 
{{todo}}
 
 
 
=== Combat ===
 
 
 
{{todo}}
 
 
 
== See also ==
 
 
 
* [[Shared tasks]]
 
 
 
{{navbar|Creating a schedule|Creating an NPC|Giving an NPC Memory}}
 
[[Category:AI Programming]]
 

Latest revision as of 10:02, 16 September 2011

Redirect to: