diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/server/ai_task.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/server/ai_task.h')
| -rw-r--r-- | game/server/ai_task.h | 504 |
1 files changed, 504 insertions, 0 deletions
diff --git a/game/server/ai_task.h b/game/server/ai_task.h new file mode 100644 index 0000000..43170a3 --- /dev/null +++ b/game/server/ai_task.h @@ -0,0 +1,504 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: Defines the tasks for default AI. +// +// $NoKeywords: $ +//=============================================================================// + +#ifndef AI_TASK_H +#define AI_TASK_H +#ifdef _WIN32 +#pragma once +#endif + +class CStringRegistry; + +// ---------------------------------------------------------------------- +// Failure messages +// +// UNDONE: do this diffently so when not in developer mode we can +// not use any memory for these text strings +// ---------------------------------------------------------------------- + +// Codes are either one of the enumerated types below, or a string (similar to Windows resource IDs) +typedef int AI_TaskFailureCode_t; + +enum AI_BaseTaskFailureCodes_t +{ + NO_TASK_FAILURE, + FAIL_NO_TARGET, + FAIL_WEAPON_OWNED, + FAIL_ITEM_NO_FIND, + FAIL_NO_HINT_NODE, + FAIL_SCHEDULE_NOT_FOUND, + FAIL_NO_ENEMY, + FAIL_NO_BACKAWAY_NODE, + FAIL_NO_COVER, + FAIL_NO_FLANK, + FAIL_NO_SHOOT, + FAIL_NO_ROUTE, + FAIL_NO_ROUTE_GOAL, + FAIL_NO_ROUTE_BLOCKED, + FAIL_NO_ROUTE_ILLEGAL, + FAIL_NO_WALK, + FAIL_ALREADY_LOCKED, + FAIL_NO_SOUND, + FAIL_NO_SCENT, + FAIL_BAD_ACTIVITY, + FAIL_NO_GOAL, + FAIL_NO_PLAYER, + FAIL_NO_REACHABLE_NODE, + FAIL_NO_AI_NETWORK, + FAIL_BAD_POSITION, + FAIL_BAD_PATH_GOAL, + FAIL_STUCK_ONTOP, + FAIL_ITEM_TAKEN, + + NUM_FAIL_CODES, +}; + +inline bool IsPathTaskFailure( AI_TaskFailureCode_t code ) +{ + return ( code >= FAIL_NO_ROUTE && code <= FAIL_NO_ROUTE_ILLEGAL ); +} + +const char *TaskFailureToString( AI_TaskFailureCode_t code ); +inline int MakeFailCode( const char *pszGeneralError ) { return (int)pszGeneralError; } + + +enum TaskStatus_e +{ + TASKSTATUS_NEW = 0, // Just started + TASKSTATUS_RUN_MOVE_AND_TASK = 1, // Running task & movement + TASKSTATUS_RUN_MOVE = 2, // Just running movement + TASKSTATUS_RUN_TASK = 3, // Just running task + TASKSTATUS_COMPLETE = 4, // Completed, get next task +}; + +// an array of tasks is a task list +// an array of schedules is a schedule list +struct Task_t +{ + int iTask; + float flTaskData; +}; + +//========================================================= +// These are the shared tasks +//========================================================= +enum sharedtasks_e +{ + TASK_INVALID = 0, + + // Forces the activity to reset. + TASK_RESET_ACTIVITY, + + // Waits for the specified number of seconds. + TASK_WAIT, + + // Make announce attack sound + TASK_ANNOUNCE_ATTACK, + + // Waits for the specified number of seconds. Will constantly turn to + // face the enemy while waiting. + TASK_WAIT_FACE_ENEMY, + + // Waits up to the specified number of seconds. Will constantly turn to + // face the enemy while waiting. + TASK_WAIT_FACE_ENEMY_RANDOM, + + // Wait until the player enters the same PVS as this character. + TASK_WAIT_PVS, + + // DON'T use this, it needs to go away. + TASK_SUGGEST_STATE, + + // Set m_hTargetEnt to nearest player + TASK_TARGET_PLAYER, + + // Walk to m_hTargetEnt's location + TASK_SCRIPT_WALK_TO_TARGET, + + // Run to m_hTargetEnt's location + TASK_SCRIPT_RUN_TO_TARGET, + + // Move to m_hTargetEnt's location using the activity specified by m_hCine->m_iszCustomMove. + TASK_SCRIPT_CUSTOM_MOVE_TO_TARGET, + + // Move to within specified range of m_hTargetEnt + TASK_MOVE_TO_TARGET_RANGE, + + // Move to within specified range of our nav goal + TASK_MOVE_TO_GOAL_RANGE, + + // Path that moves the character a few steps forward of where it is. + TASK_MOVE_AWAY_PATH, + + TASK_GET_PATH_AWAY_FROM_BEST_SOUND, + + // Set the implied goal for TASK_GET_PATH_TO_GOAL + TASK_SET_GOAL, + + // Get the path to the goal specified by TASK_SET_GOAL + TASK_GET_PATH_TO_GOAL, + + // Path to the enemy's location. Even if the enemy is unseen! + TASK_GET_PATH_TO_ENEMY, + + // Path to the last place this character saw the enemy + TASK_GET_PATH_TO_ENEMY_LKP, + + // Path to the enemy's location or path to a LOS with the enemy's last known position, depending on range + TASK_GET_CHASE_PATH_TO_ENEMY, + + // Path to a LOS with the enemy's last known position + TASK_GET_PATH_TO_ENEMY_LKP_LOS, + + // Path to the dead enemy's carcass. + TASK_GET_PATH_TO_ENEMY_CORPSE, + + // Path to the player's origin + TASK_GET_PATH_TO_PLAYER, + + // Path to node with line of sight to enemy + TASK_GET_PATH_TO_ENEMY_LOS, + + // Path to node with line of sight to enemy, at least flTaskData units away from m_vSavePosition + TASK_GET_FLANK_RADIUS_PATH_TO_ENEMY_LOS, + + // Path to node with line of sight to enemy, at least flTaskData degrees away from m_vSavePosition from the enemy's POV + TASK_GET_FLANK_ARC_PATH_TO_ENEMY_LOS, + + // Path to the within shot range of last place this character saw the enemy + TASK_GET_PATH_TO_RANGE_ENEMY_LKP_LOS, + + // Build a path to m_hTargetEnt + TASK_GET_PATH_TO_TARGET, + + // Allow a little slop, and allow for some Z offset (like the target is a gun on a table). + TASK_GET_PATH_TO_TARGET_WEAPON, + + TASK_CREATE_PENDING_WEAPON, + + // Path to nodes[ m_pHintNode ] + TASK_GET_PATH_TO_HINTNODE, + + // Store current position for later reference + TASK_STORE_LASTPOSITION, + + // Clear stored position + TASK_CLEAR_LASTPOSITION, + + // Store current position for later reference + TASK_STORE_POSITION_IN_SAVEPOSITION, + + // Store best sound position for later reference + TASK_STORE_BESTSOUND_IN_SAVEPOSITION, + TASK_STORE_BESTSOUND_REACTORIGIN_IN_SAVEPOSITION, + + TASK_REACT_TO_COMBAT_SOUND, + + // Store current enemy position in saveposition + TASK_STORE_ENEMY_POSITION_IN_SAVEPOSITION, + + // Move to the goal specified by the player in command mode. + TASK_GET_PATH_TO_COMMAND_GOAL, + + TASK_MARK_COMMAND_GOAL_POS, + + TASK_CLEAR_COMMAND_GOAL, + + // Path to last position (Last position must be stored with TASK_STORE_LAST_POSITION) + TASK_GET_PATH_TO_LASTPOSITION, + + // Path to saved position (Save position must by set in code or by a task) + TASK_GET_PATH_TO_SAVEPOSITION, + + // Path to location that has line of sight to saved position (Save position must by set in code or by a task) + TASK_GET_PATH_TO_SAVEPOSITION_LOS, + + // Path to random node + TASK_GET_PATH_TO_RANDOM_NODE, + + // Path to source of loudest heard sound that I care about + TASK_GET_PATH_TO_BESTSOUND, + + // Path to source of the strongest scend that I care about + TASK_GET_PATH_TO_BESTSCENT, + + // Run the current path + TASK_RUN_PATH, + + // Walk the current path + TASK_WALK_PATH, + + // Walk the current path for a specified number of seconds + TASK_WALK_PATH_TIMED, + + // Walk the current path until you are x units from the goal. + TASK_WALK_PATH_WITHIN_DIST, + + // Walk the current path until for x units + TASK_WALK_PATH_FOR_UNITS, + + // Rung the current path until you are x units from the goal. + TASK_RUN_PATH_FLEE, + + // Run the current path for a specified number of seconds + TASK_RUN_PATH_TIMED, + + // Run the current path until for x units + TASK_RUN_PATH_FOR_UNITS, + + // Run the current path until you are x units from the goal. + TASK_RUN_PATH_WITHIN_DIST, + + // Walk the current path sideways (must be supported by animation) + TASK_STRAFE_PATH, + + // Clear m_flMoveWaitFinished (timer that inhibits movement) + TASK_CLEAR_MOVE_WAIT, + + // Decide on the appropriate small flinch animation, and play it. + TASK_SMALL_FLINCH, + + // Decide on the appropriate big flinch animation, and play it. + TASK_BIG_FLINCH, + + // Prevent dodging for a certain amount of time. + TASK_DEFER_DODGE, + + // Turn to face ideal yaw + TASK_FACE_IDEAL, + + // Find an interesting direction to face. Don't face into walls, corners if you can help it. + TASK_FACE_REASONABLE, + + // Turn to face the way I should walk or run + TASK_FACE_PATH, + + // Turn to face a player + TASK_FACE_PLAYER, + + // Turn to face the enemy + TASK_FACE_ENEMY, + + // Turn to face nodes[ m_pHintNode ] + TASK_FACE_HINTNODE, + + // Play activity associate with the current hint + TASK_PLAY_HINT_ACTIVITY, + + // Turn to face m_hTargetEnt + TASK_FACE_TARGET, + + // Turn to face stored last position (last position must be stored first!) + TASK_FACE_LASTPOSITION, + + // Turn to face stored save position (save position must be stored first!) + TASK_FACE_SAVEPOSITION, + + // Turn to face directly away from stored save position (save position must be stored first!) + TASK_FACE_AWAY_FROM_SAVEPOSITION, + + // Set the current facing to be the ideal + TASK_SET_IDEAL_YAW_TO_CURRENT, + + // Attack the enemy (should be facing the enemy) + TASK_RANGE_ATTACK1, + TASK_RANGE_ATTACK2, + TASK_MELEE_ATTACK1, + TASK_MELEE_ATTACK2, + + // Reload weapon + TASK_RELOAD, + + // Execute special attack (user-defined) + TASK_SPECIAL_ATTACK1, + TASK_SPECIAL_ATTACK2, + + TASK_FIND_HINTNODE, + TASK_FIND_LOCK_HINTNODE, + + TASK_CLEAR_HINTNODE, + + // Claim m_pHintNode exclusively for this NPC. + TASK_LOCK_HINTNODE, + + // Emit an angry sound + TASK_SOUND_ANGRY, + + // Emit a dying sound + TASK_SOUND_DEATH, + + // Emit an idle sound + TASK_SOUND_IDLE, + + // Emit a sound because you are pissed off because you just saw someone you don't like + TASK_SOUND_WAKE, + + // Emit a pain sound + TASK_SOUND_PAIN, + + // Emit a death sound + TASK_SOUND_DIE, + + // Speak a sentence + TASK_SPEAK_SENTENCE, + + // Wait for the current sentence I'm speaking to finish + TASK_WAIT_FOR_SPEAK_FINISH, + + // Set current animation activity to the specified activity + TASK_SET_ACTIVITY, + + // Adjust the framerate to plus/minus N% + TASK_RANDOMIZE_FRAMERATE, + + // Immediately change to a schedule of the specified type + TASK_SET_SCHEDULE, + + // Set the specified schedule to execute if the current schedule fails. + TASK_SET_FAIL_SCHEDULE, + + // How close to route goal do I need to get + TASK_SET_TOLERANCE_DISTANCE, + + // How many seconds should I spend search for a route + TASK_SET_ROUTE_SEARCH_TIME, + + // Return to use of default fail schedule + TASK_CLEAR_FAIL_SCHEDULE, + + // Play the specified animation sequence before continuing + TASK_PLAY_SEQUENCE, + + // Play the specified private animation sequence before continuing + TASK_PLAY_PRIVATE_SEQUENCE, + + // Turn to face the enemy while playing specified animation sequence + TASK_PLAY_PRIVATE_SEQUENCE_FACE_ENEMY, + TASK_PLAY_SEQUENCE_FACE_ENEMY, + TASK_PLAY_SEQUENCE_FACE_TARGET, + + // tries lateral cover first, then node cover + TASK_FIND_COVER_FROM_BEST_SOUND, + + // tries lateral cover first, then node cover + TASK_FIND_COVER_FROM_ENEMY, + + // Find a place to hide from the enemy, somewhere on either side of me + TASK_FIND_LATERAL_COVER_FROM_ENEMY, + + // Find a place further from the saved position + TASK_FIND_BACKAWAY_FROM_SAVEPOSITION, + + // Fine a place to hide from the enemy, anywhere. Use the node system. + TASK_FIND_NODE_COVER_FROM_ENEMY, + + // Find a place to hide from the enemy that's within the specified distance + TASK_FIND_NEAR_NODE_COVER_FROM_ENEMY, + + // data for this one is there MINIMUM aceptable distance to the cover. + TASK_FIND_FAR_NODE_COVER_FROM_ENEMY, + + // Find a place to go that can't see to where I am now. + TASK_FIND_COVER_FROM_ORIGIN, + + // Unhook from the AI system. + TASK_DIE, + + // Wait until scripted sequence plays + TASK_WAIT_FOR_SCRIPT, + + // Play scripted sequence animation + TASK_PUSH_SCRIPT_ARRIVAL_ACTIVITY, + TASK_PLAY_SCRIPT, + TASK_PLAY_SCRIPT_POST_IDLE, + TASK_ENABLE_SCRIPT, + TASK_PLANT_ON_SCRIPT, + TASK_FACE_SCRIPT, + + // Wait for scene to complete + TASK_PLAY_SCENE, + + // Wait for 0 to specified number of seconds + TASK_WAIT_RANDOM, + + // Wait forever (until this schedule is interrupted) + TASK_WAIT_INDEFINITE, + + TASK_STOP_MOVING, + + // Turn left the specified number of degrees + TASK_TURN_LEFT, + + // Turn right the specified number of degrees + TASK_TURN_RIGHT, + + // Remember the specified piece of data + TASK_REMEMBER, + + // Forget the specified piece of data + TASK_FORGET, + + // Wait until current movement is complete. + TASK_WAIT_FOR_MOVEMENT, + + // Wait until a single-step movement is complete. + TASK_WAIT_FOR_MOVEMENT_STEP, + + // Wait until I can't hear any danger sound. + TASK_WAIT_UNTIL_NO_DANGER_SOUND, + + // Pick up new weapons: + TASK_WEAPON_FIND, + TASK_WEAPON_PICKUP, + TASK_WEAPON_RUN_PATH, // run to weapon but break if someone else picks it up + TASK_WEAPON_CREATE, + + TASK_ITEM_PICKUP, + TASK_ITEM_RUN_PATH, + + // Use small hull for tight navigation + TASK_USE_SMALL_HULL, + + // wait until you are on ground + TASK_FALL_TO_GROUND, + + // Wander for a specfied amound of time + TASK_WANDER, + + TASK_FREEZE, + + // regather conditions at the start of a schedule (all conditions are cleared between schedules) + TASK_GATHER_CONDITIONS, + + // Require an enemy be seen after the task is run to be considered a candidate enemy + TASK_IGNORE_OLD_ENEMIES, + + TASK_DEBUG_BREAK, + + // Add a specified amount of health to this NPC + TASK_ADD_HEALTH, + + // Add a gesture layer and wait until it's finished + TASK_ADD_GESTURE_WAIT, + + // Add a gesture layer + TASK_ADD_GESTURE, + + // Get a path to my forced interaction partner + TASK_GET_PATH_TO_INTERACTION_PARTNER, + + // First task of all schedules for playing back scripted sequences + TASK_PRE_SCRIPT, + + // ====================================== + // IMPORTANT: This must be the last enum + // ====================================== + LAST_SHARED_TASK + +}; + +#endif // AI_TASK_H |