diff options
Diffstat (limited to 'game/server/hl1/hl1_npc_talker.h')
| -rw-r--r-- | game/server/hl1/hl1_npc_talker.h | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/game/server/hl1/hl1_npc_talker.h b/game/server/hl1/hl1_npc_talker.h new file mode 100644 index 0000000..f3d883b --- /dev/null +++ b/game/server/hl1/hl1_npc_talker.h @@ -0,0 +1,125 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: Base combat character with no AI +// +// $Workfile: $ +// $Date: $ +// $NoKeywords: $ +//=============================================================================// + +#ifndef HL1TALKNPC_H +#define HL1TALKNPC_H + +#ifdef _WIN32 +#pragma once +#endif + +#include "soundflags.h" + +#include "ai_task.h" +#include "ai_schedule.h" +#include "ai_default.h" +#include "ai_speech.h" +#include "ai_basenpc.h" +#include "ai_behavior.h" +#include "ai_behavior_follow.h" +#include "npc_talker.h" + + +#define SF_NPC_PREDISASTER ( 1 << 16 ) // This is a predisaster scientist or barney. Influences how they speak. + + + +//========================================================= +// Talking NPC base class +// Used for scientists and barneys +//========================================================= + +//============================================================================= +// >> CHL1NPCTalker +//============================================================================= + +class CHL1NPCTalker : public CNPCSimpleTalker +{ + DECLARE_CLASS( CHL1NPCTalker, CNPCSimpleTalker ); + +public: + CHL1NPCTalker( void ) + { + } + + virtual void Precache(); + + void StartTask( const Task_t *pTask ); + void RunTask( const Task_t *pTask ); + int SelectSchedule ( void ); + bool HandleInteraction(int interactionType, void *data, CBaseCombatCharacter* sourceEnt); + bool ShouldGib( const CTakeDamageInfo &info ); + + int TranslateSchedule( int scheduleType ); + void IdleHeadTurn( CBaseEntity *pTarget, float flDuration = 0.0, float flImportance = 1.0f ); + void SetHeadDirection( const Vector &vTargetPos, float flInterval); + bool CorpseGib( const CTakeDamageInfo &info ); + + Disposition_t IRelationType( CBaseEntity *pTarget ); + + void TraceAttack( const CTakeDamageInfo &info, const Vector &vecDir, trace_t *ptr, CDmgAccumulator *pAccumulator ); + + void StartFollowing( CBaseEntity *pLeader ); + void StopFollowing( void ); + int PlayScriptedSentence( const char *pszSentence, float delay, float volume, soundlevel_t soundlevel, bool bConcurrent, CBaseEntity *pListener ); + + + void Touch( CBaseEntity *pOther ); + + float PickLookTarget( bool bExcludePlayers = false, float minTime = 1.5, float maxTime = 2.5 ); + + bool OnObstructingDoor( AILocalMoveGoal_t *pMoveGoal, CBaseDoor *pDoor, float distClear, AIMoveResult_t *pResult ); + + // Hacks! HL2 has a system for avoiding the player, we don't + // This ensures that we fall back to the real player avoidance + // Essentially does the opposite of what it says + virtual bool ShouldPlayerAvoid( void ) { return false; } + + bool IsValidSpeechTarget( int flags, CBaseEntity *pEntity ); + +protected: + virtual void FollowerUse( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ); + int FIdleSpeak ( void ); + +private: + virtual void DeclineFollowing( void ) {} + + virtual int SelectDeadSchedule( void ); + +public: + + bool m_bInBarnacleMouth; + + + enum + { + SCHED_HL1TALKER_FOLLOW_MOVE_AWAY = BaseClass::NEXT_SCHEDULE, + SCHED_HL1TALKER_IDLE_SPEAK_WAIT, + SCHED_HL1TALKER_BARNACLE_HIT, + SCHED_HL1TALKER_BARNACLE_PULL, + SCHED_HL1TALKER_BARNACLE_CHOMP, + SCHED_HL1TALKER_BARNACLE_CHEW, + + NEXT_SCHEDULE, + }; + + enum + { + TASK_HL1TALKER_FOLLOW_WALK_PATH_FOR_UNITS = BaseClass::NEXT_TASK, + + NEXT_TASK, + }; + + DECLARE_DATADESC(); + DEFINE_CUSTOM_AI; +}; + + + +#endif //HL1TALKNPC_H |