summaryrefslogtreecommitdiff
path: root/game/server/hl1/hl1_npc_talker.h
diff options
context:
space:
mode:
Diffstat (limited to 'game/server/hl1/hl1_npc_talker.h')
-rw-r--r--game/server/hl1/hl1_npc_talker.h125
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