From 39ed87570bdb2f86969d4be821c94b722dc71179 Mon Sep 17 00:00:00 2001 From: Joe Ludwig Date: Wed, 26 Jun 2013 15:22:04 -0700 Subject: First version of the SOurce SDK 2013 --- mp/src/game/server/ai_task.cpp | 227 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 227 insertions(+) create mode 100644 mp/src/game/server/ai_task.cpp (limited to 'mp/src/game/server/ai_task.cpp') diff --git a/mp/src/game/server/ai_task.cpp b/mp/src/game/server/ai_task.cpp new file mode 100644 index 00000000..116fa82e --- /dev/null +++ b/mp/src/game/server/ai_task.cpp @@ -0,0 +1,227 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: Sets up the tasks for default AI. +// +// $NoKeywords: $ +//=============================================================================// + +#include "cbase.h" +#include "stringregistry.h" +#include "ai_basenpc.h" +#include "ai_task.h" + +// memdbgon must be the last include file in a .cpp file!!! +#include "tier0/memdbgon.h" + +const char * g_ppszTaskFailureText[] = +{ + "No failure", // NO_TASK_FAILURE + "No Target", // FAIL_NO_TARGET + "Weapon owned by someone else", // FAIL_WEAPON_OWNED + "Weapon/Item doesn't exist", // FAIL_ITEM_NO_FIND + "No hint node", // FAIL_NO_HINT_NODE + "Schedule not found", // FAIL_SCHEDULE_NOT_FOUND + "Don't have an enemy", // FAIL_NO_ENEMY + "Found no backaway node", // FAIL_NO_BACKAWAY_NODE + "Couldn't find cover", // FAIL_NO_COVER + "Couldn't find flank", // FAIL_NO_FLANK + "Couldn't find shoot position", // FAIL_NO_SHOOT + "Don't have a route", // FAIL_NO_ROUTE + "Don't have a route: no goal", // FAIL_NO_ROUTE_GOAL + "Don't have a route: blocked", // FAIL_NO_ROUTE_BLOCKED + "Don't have a route: illegal move", // FAIL_NO_ROUTE_ILLEGAL + "Couldn't walk to target", // FAIL_NO_WALK + "Node already locked", // FAIL_ALREADY_LOCKED + "No sound present", // FAIL_NO_SOUND + "No scent present", // FAIL_NO_SCENT + "Bad activity", // FAIL_BAD_ACTIVITY + "No goal entity", // FAIL_NO_GOAL + "No player", // FAIL_NO_PLAYER + "Can't reach any nodes", // FAIL_NO_REACHABLE_NODE + "No AI Network to Use", // FAIL_NO_AI_NETWORK + "Bad position to Target", // FAIL_BAD_POSITION + "Route Destination No Longer Valid", // FAIL_BAD_PATH_GOAL + "Stuck on top of something", // FAIL_STUCK_ONTOP + "Item has been taken", // FAIL_ITEM_TAKEN +}; + +const char *TaskFailureToString( AI_TaskFailureCode_t code ) +{ + const char *pszResult; + if ( code < 0 || code >= NUM_FAIL_CODES ) + pszResult = (const char *)code; + else + pszResult = g_ppszTaskFailureText[code]; + return pszResult; +} + +//----------------------------------------------------------------------------- +// Purpose: Given and task name, return the task ID +//----------------------------------------------------------------------------- +int CAI_BaseNPC::GetTaskID(const char* taskName) +{ + return GetSchedulingSymbols()->TaskSymbolToId( taskName ); +} + +//----------------------------------------------------------------------------- +// Purpose: Initialize the task name string registry +// Input : +// Output : +//----------------------------------------------------------------------------- +void CAI_BaseNPC::InitDefaultTaskSR(void) +{ + #define ADD_DEF_TASK( name ) idSpace.AddTask(#name, name, "CAI_BaseNPC" ) + + CAI_ClassScheduleIdSpace &idSpace = CAI_BaseNPC::AccessClassScheduleIdSpaceDirect(); + + ADD_DEF_TASK( TASK_INVALID ); + ADD_DEF_TASK( TASK_ANNOUNCE_ATTACK ); + ADD_DEF_TASK( TASK_RESET_ACTIVITY ); + ADD_DEF_TASK( TASK_WAIT ); + ADD_DEF_TASK( TASK_WAIT_FACE_ENEMY ); + ADD_DEF_TASK( TASK_WAIT_FACE_ENEMY_RANDOM ); + ADD_DEF_TASK( TASK_WAIT_PVS ); + ADD_DEF_TASK( TASK_SUGGEST_STATE ); + ADD_DEF_TASK( TASK_TARGET_PLAYER ); + ADD_DEF_TASK( TASK_SCRIPT_WALK_TO_TARGET ); + ADD_DEF_TASK( TASK_SCRIPT_RUN_TO_TARGET ); + ADD_DEF_TASK( TASK_SCRIPT_CUSTOM_MOVE_TO_TARGET ); + ADD_DEF_TASK( TASK_MOVE_TO_TARGET_RANGE ); + ADD_DEF_TASK( TASK_MOVE_TO_GOAL_RANGE ); + ADD_DEF_TASK( TASK_MOVE_AWAY_PATH ); + ADD_DEF_TASK( TASK_GET_PATH_AWAY_FROM_BEST_SOUND ); + ADD_DEF_TASK( TASK_SET_GOAL ); + ADD_DEF_TASK( TASK_GET_PATH_TO_GOAL ); + ADD_DEF_TASK( TASK_GET_PATH_TO_ENEMY ); + ADD_DEF_TASK( TASK_GET_PATH_TO_ENEMY_LKP ); + ADD_DEF_TASK( TASK_GET_CHASE_PATH_TO_ENEMY ); + ADD_DEF_TASK( TASK_GET_PATH_TO_ENEMY_LKP_LOS ); + ADD_DEF_TASK( TASK_GET_PATH_TO_RANGE_ENEMY_LKP_LOS ); + ADD_DEF_TASK( TASK_GET_PATH_TO_ENEMY_CORPSE ); + ADD_DEF_TASK( TASK_GET_PATH_TO_PLAYER ); + ADD_DEF_TASK( TASK_GET_PATH_TO_ENEMY_LOS ); + ADD_DEF_TASK( TASK_GET_FLANK_ARC_PATH_TO_ENEMY_LOS ); + ADD_DEF_TASK( TASK_GET_FLANK_RADIUS_PATH_TO_ENEMY_LOS ); + ADD_DEF_TASK( TASK_GET_PATH_TO_TARGET ); + ADD_DEF_TASK( TASK_GET_PATH_TO_TARGET_WEAPON ); + ADD_DEF_TASK( TASK_CREATE_PENDING_WEAPON ); + ADD_DEF_TASK( TASK_GET_PATH_TO_HINTNODE ); + ADD_DEF_TASK( TASK_STORE_LASTPOSITION ); + ADD_DEF_TASK( TASK_CLEAR_LASTPOSITION ); + ADD_DEF_TASK( TASK_STORE_POSITION_IN_SAVEPOSITION ); + ADD_DEF_TASK( TASK_STORE_BESTSOUND_IN_SAVEPOSITION ); + ADD_DEF_TASK( TASK_STORE_BESTSOUND_REACTORIGIN_IN_SAVEPOSITION ); + ADD_DEF_TASK( TASK_REACT_TO_COMBAT_SOUND ); + ADD_DEF_TASK( TASK_STORE_ENEMY_POSITION_IN_SAVEPOSITION ); + ADD_DEF_TASK( TASK_GET_PATH_TO_COMMAND_GOAL ); + ADD_DEF_TASK( TASK_MARK_COMMAND_GOAL_POS ); + ADD_DEF_TASK( TASK_CLEAR_COMMAND_GOAL ); + ADD_DEF_TASK( TASK_GET_PATH_TO_LASTPOSITION ); + ADD_DEF_TASK( TASK_GET_PATH_TO_SAVEPOSITION ); + ADD_DEF_TASK( TASK_GET_PATH_TO_SAVEPOSITION_LOS ); + ADD_DEF_TASK( TASK_GET_PATH_TO_BESTSOUND ); + ADD_DEF_TASK( TASK_GET_PATH_TO_BESTSCENT ); + ADD_DEF_TASK( TASK_GET_PATH_TO_RANDOM_NODE ); + ADD_DEF_TASK( TASK_RUN_PATH ); + ADD_DEF_TASK( TASK_WALK_PATH ); + ADD_DEF_TASK( TASK_WALK_PATH_TIMED ); + ADD_DEF_TASK( TASK_WALK_PATH_WITHIN_DIST ); + ADD_DEF_TASK( TASK_RUN_PATH_WITHIN_DIST ); + ADD_DEF_TASK( TASK_WALK_PATH_FOR_UNITS ); + ADD_DEF_TASK( TASK_RUN_PATH_FOR_UNITS ); + ADD_DEF_TASK( TASK_RUN_PATH_FLEE ); + ADD_DEF_TASK( TASK_RUN_PATH_TIMED ); + ADD_DEF_TASK( TASK_STRAFE_PATH ); + ADD_DEF_TASK( TASK_CLEAR_MOVE_WAIT ); + ADD_DEF_TASK( TASK_SMALL_FLINCH ); + ADD_DEF_TASK( TASK_BIG_FLINCH ); + ADD_DEF_TASK( TASK_DEFER_DODGE ); + ADD_DEF_TASK( TASK_FACE_IDEAL ); + ADD_DEF_TASK( TASK_FACE_REASONABLE ); + ADD_DEF_TASK( TASK_FACE_PATH ); + ADD_DEF_TASK( TASK_FACE_PLAYER ); + ADD_DEF_TASK( TASK_FACE_ENEMY ); + ADD_DEF_TASK( TASK_FACE_HINTNODE ); + ADD_DEF_TASK( TASK_PLAY_HINT_ACTIVITY ); + ADD_DEF_TASK( TASK_FACE_TARGET ); + ADD_DEF_TASK( TASK_FACE_LASTPOSITION ); + ADD_DEF_TASK( TASK_FACE_SAVEPOSITION ); + ADD_DEF_TASK( TASK_FACE_AWAY_FROM_SAVEPOSITION ); + ADD_DEF_TASK( TASK_SET_IDEAL_YAW_TO_CURRENT ); + ADD_DEF_TASK( TASK_RANGE_ATTACK1 ); + ADD_DEF_TASK( TASK_RANGE_ATTACK2 ); + ADD_DEF_TASK( TASK_MELEE_ATTACK1 ); + ADD_DEF_TASK( TASK_MELEE_ATTACK2 ); + ADD_DEF_TASK( TASK_RELOAD ); + ADD_DEF_TASK( TASK_SPECIAL_ATTACK1 ); + ADD_DEF_TASK( TASK_SPECIAL_ATTACK2 ); + ADD_DEF_TASK( TASK_FIND_HINTNODE ); + ADD_DEF_TASK( TASK_CLEAR_HINTNODE ); + ADD_DEF_TASK( TASK_FIND_LOCK_HINTNODE ); + ADD_DEF_TASK( TASK_LOCK_HINTNODE ); + ADD_DEF_TASK( TASK_SOUND_ANGRY ); + ADD_DEF_TASK( TASK_SOUND_DEATH ); + ADD_DEF_TASK( TASK_SOUND_IDLE ); + ADD_DEF_TASK( TASK_SOUND_WAKE ); + ADD_DEF_TASK( TASK_SOUND_PAIN ); + ADD_DEF_TASK( TASK_SOUND_DIE ); + ADD_DEF_TASK( TASK_SPEAK_SENTENCE ); + ADD_DEF_TASK( TASK_WAIT_FOR_SPEAK_FINISH ); + ADD_DEF_TASK( TASK_SET_ACTIVITY ); + ADD_DEF_TASK( TASK_RANDOMIZE_FRAMERATE ); + ADD_DEF_TASK( TASK_SET_SCHEDULE ); + ADD_DEF_TASK( TASK_SET_FAIL_SCHEDULE ); + ADD_DEF_TASK( TASK_SET_TOLERANCE_DISTANCE ); + ADD_DEF_TASK( TASK_SET_ROUTE_SEARCH_TIME ); + ADD_DEF_TASK( TASK_CLEAR_FAIL_SCHEDULE ); + ADD_DEF_TASK( TASK_PLAY_SEQUENCE ); + ADD_DEF_TASK( TASK_PLAY_PRIVATE_SEQUENCE ); + ADD_DEF_TASK( TASK_PLAY_PRIVATE_SEQUENCE_FACE_ENEMY ); + ADD_DEF_TASK( TASK_PLAY_SEQUENCE_FACE_ENEMY ); + ADD_DEF_TASK( TASK_PLAY_SEQUENCE_FACE_TARGET ); + ADD_DEF_TASK( TASK_FIND_COVER_FROM_BEST_SOUND ); + ADD_DEF_TASK( TASK_FIND_COVER_FROM_ENEMY ); + ADD_DEF_TASK( TASK_FIND_LATERAL_COVER_FROM_ENEMY ); + ADD_DEF_TASK( TASK_FIND_BACKAWAY_FROM_SAVEPOSITION ); + ADD_DEF_TASK( TASK_FIND_NODE_COVER_FROM_ENEMY ); + ADD_DEF_TASK( TASK_FIND_NEAR_NODE_COVER_FROM_ENEMY ); + ADD_DEF_TASK( TASK_FIND_FAR_NODE_COVER_FROM_ENEMY ); + ADD_DEF_TASK( TASK_FIND_COVER_FROM_ORIGIN ); + ADD_DEF_TASK( TASK_DIE ); + ADD_DEF_TASK( TASK_WAIT_FOR_SCRIPT ); + ADD_DEF_TASK( TASK_PUSH_SCRIPT_ARRIVAL_ACTIVITY ); + ADD_DEF_TASK( TASK_PLAY_SCRIPT ); + ADD_DEF_TASK( TASK_PLAY_SCRIPT_POST_IDLE ); + ADD_DEF_TASK( TASK_ENABLE_SCRIPT ); + ADD_DEF_TASK( TASK_PLANT_ON_SCRIPT ); + ADD_DEF_TASK( TASK_FACE_SCRIPT ); + ADD_DEF_TASK( TASK_PLAY_SCENE ); + ADD_DEF_TASK( TASK_WAIT_RANDOM ); + ADD_DEF_TASK( TASK_WAIT_INDEFINITE ); + ADD_DEF_TASK( TASK_STOP_MOVING ); + ADD_DEF_TASK( TASK_TURN_LEFT ); + ADD_DEF_TASK( TASK_TURN_RIGHT ); + ADD_DEF_TASK( TASK_REMEMBER ); + ADD_DEF_TASK( TASK_FORGET ); + ADD_DEF_TASK( TASK_WAIT_FOR_MOVEMENT ); + ADD_DEF_TASK( TASK_WAIT_FOR_MOVEMENT_STEP ); + ADD_DEF_TASK( TASK_WAIT_UNTIL_NO_DANGER_SOUND ); + ADD_DEF_TASK( TASK_WEAPON_FIND ); + ADD_DEF_TASK( TASK_WEAPON_PICKUP ); + ADD_DEF_TASK( TASK_WEAPON_RUN_PATH ); + ADD_DEF_TASK( TASK_WEAPON_CREATE ); + ADD_DEF_TASK( TASK_ITEM_RUN_PATH ); + ADD_DEF_TASK( TASK_ITEM_PICKUP ); + ADD_DEF_TASK( TASK_USE_SMALL_HULL ); + ADD_DEF_TASK( TASK_FALL_TO_GROUND ); + ADD_DEF_TASK( TASK_WANDER ); + ADD_DEF_TASK( TASK_FREEZE ); + ADD_DEF_TASK( TASK_GATHER_CONDITIONS ); + ADD_DEF_TASK( TASK_IGNORE_OLD_ENEMIES ); + ADD_DEF_TASK( TASK_DEBUG_BREAK ); + ADD_DEF_TASK( TASK_ADD_HEALTH ); + ADD_DEF_TASK( TASK_GET_PATH_TO_INTERACTION_PARTNER ); + ADD_DEF_TASK( TASK_PRE_SCRIPT ); +} + + -- cgit v1.2.3