aboutsummaryrefslogtreecommitdiff
path: root/mp/src/game/server/hl2/npc_scanner.h
diff options
context:
space:
mode:
Diffstat (limited to 'mp/src/game/server/hl2/npc_scanner.h')
-rw-r--r--mp/src/game/server/hl2/npc_scanner.h215
1 files changed, 215 insertions, 0 deletions
diff --git a/mp/src/game/server/hl2/npc_scanner.h b/mp/src/game/server/hl2/npc_scanner.h
new file mode 100644
index 00000000..f6f23f00
--- /dev/null
+++ b/mp/src/game/server/hl2/npc_scanner.h
@@ -0,0 +1,215 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef NPC_SCANNER_H
+#define NPC_SCANNER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "npc_basescanner.h"
+
+//------------------------------------
+// Spawnflags
+//------------------------------------
+#define SF_CSCANNER_NO_DYNAMIC_LIGHT (1 << 16)
+#define SF_CSCANNER_STRIDER_SCOUT (1 << 17)
+
+class CBeam;
+class CSprite;
+class SmokeTrail;
+class CSpotlightEnd;
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+class CNPC_CScanner : public CNPC_BaseScanner
+{
+ DECLARE_CLASS( CNPC_CScanner, CNPC_BaseScanner );
+
+public:
+ CNPC_CScanner();
+
+ int GetSoundInterests( void ) { return (SOUND_WORLD|SOUND_COMBAT|SOUND_PLAYER|SOUND_DANGER); }
+ int OnTakeDamage_Alive( const CTakeDamageInfo &info );
+
+ bool FValidateHintType(CAI_Hint *pHint);
+
+ virtual int TranslateSchedule( int scheduleType );
+ Disposition_t IRelationType(CBaseEntity *pTarget);
+
+ void NPCThink( void );
+
+ void GatherConditions( void );
+ void PrescheduleThink( void );
+ void Precache(void);
+ void RunTask( const Task_t *pTask );
+ int SelectSchedule(void);
+ virtual char *GetScannerSoundPrefix( void );
+ void Spawn(void);
+ void Activate();
+ void StartTask( const Task_t *pTask );
+ void UpdateOnRemove( void );
+ void DeployMine();
+ float GetMaxSpeed();
+ virtual void Gib( void );
+
+ void HandleAnimEvent( animevent_t *pEvent );
+ Activity NPC_TranslateActivity( Activity eNewActivity );
+
+ void InputDisableSpotlight( inputdata_t &inputdata );
+ void InputSetFollowTarget( inputdata_t &inputdata );
+ void InputClearFollowTarget( inputdata_t &inputdata );
+ void InputInspectTargetPhoto( inputdata_t &inputdata );
+ void InputInspectTargetSpotlight( inputdata_t &inputdata );
+ void InputDeployMine( inputdata_t &inputdata );
+ void InputEquipMine( inputdata_t &inputdata );
+ void InputShouldInspect( inputdata_t &inputdata );
+
+ void InspectTarget( inputdata_t &inputdata, ScannerFlyMode_t eFlyMode );
+
+ void Event_Killed( const CTakeDamageInfo &info );
+
+ char *GetEngineSound( void );
+
+ virtual float MinGroundDist(void);
+ virtual void AdjustScannerVelocity( void );
+
+ virtual float GetHeadTurnRate( void );
+
+public:
+ bool HandleInteraction(int interactionType, void *data, CBaseCombatCharacter* sourceEnt);
+
+ // ------------------------------
+ // Inspecting
+ // ------------------------------
+ Vector m_vInspectPos;
+ float m_fInspectEndTime;
+ float m_fCheckCitizenTime; // Time to look for citizens to harass
+ float m_fCheckHintTime; // Time to look for hints to inspect
+ bool m_bShouldInspect;
+ bool m_bOnlyInspectPlayers;
+ bool m_bNeverInspectPlayers;
+
+ void SetInspectTargetToEnt(CBaseEntity *pEntity, float fInspectDuration);
+ void SetInspectTargetToPos(const Vector &vInspectPos, float fInspectDuration);
+ void SetInspectTargetToHint(CAI_Hint *pHint, float fInspectDuration);
+ void ClearInspectTarget(void);
+ bool HaveInspectTarget(void);
+ Vector InspectTargetPosition(void);
+ bool IsValidInspectTarget(CBaseEntity *pEntity);
+ CBaseEntity* BestInspectTarget(void);
+ void RequestInspectSupport(void);
+
+ bool IsStriderScout() { return HasSpawnFlags( SF_CSCANNER_STRIDER_SCOUT ); }
+
+ // ------------------------
+ // Photographing
+ // ------------------------
+ float m_fNextPhotographTime;
+ CSprite* m_pEyeFlash;
+
+ void TakePhoto( void );
+ void BlindFlashTarget( CBaseEntity *pTarget );
+
+ // ------------------------------
+ // Spotlight
+ // ------------------------------
+ Vector m_vSpotlightTargetPos;
+ Vector m_vSpotlightCurrentPos;
+ CHandle<CBeam> m_hSpotlight;
+ CHandle<CSpotlightEnd> m_hSpotlightTarget;
+ Vector m_vSpotlightDir;
+ Vector m_vSpotlightAngVelocity;
+ float m_flSpotlightCurLength;
+ float m_flSpotlightMaxLength;
+ float m_flSpotlightGoalWidth;
+ float m_fNextSpotlightTime;
+ int m_nHaloSprite;
+
+ void SpotlightUpdate(void);
+ Vector SpotlightTargetPos(void);
+ Vector SpotlightCurrentPos(void);
+ void SpotlightCreate(void);
+ void SpotlightDestroy(void);
+
+protected:
+ void BecomeClawScanner( void ) { m_bIsClawScanner = true; }
+
+private:
+ bool MovingToInspectTarget( void );
+ virtual float GetGoalDistance( void );
+
+ bool m_bIsClawScanner; // Formerly the shield scanner.
+ bool m_bIsOpen; // Only for claw scanner
+
+ COutputEvent m_OnPhotographPlayer;
+ COutputEvent m_OnPhotographNPC;
+
+ bool OverrideMove(float flInterval);
+ void MoveToTarget(float flInterval, const Vector &MoveTarget);
+ void MoveToSpotlight(float flInterval);
+ void MoveToPhotograph(float flInterval);
+
+ // Attacks
+ bool m_bNoLight;
+ bool m_bPhotoTaken;
+
+ void AttackPreFlash(void);
+ void AttackFlash(void);
+ void AttackFlashBlind(void);
+
+ virtual void AttackDivebomb(void);
+
+ DEFINE_CUSTOM_AI;
+
+ // Custom interrupt conditions
+ enum
+ {
+ COND_CSCANNER_HAVE_INSPECT_TARGET = BaseClass::NEXT_CONDITION,
+ COND_CSCANNER_INSPECT_DONE,
+ COND_CSCANNER_CAN_PHOTOGRAPH,
+ COND_CSCANNER_SPOT_ON_TARGET,
+
+ NEXT_CONDITION,
+ };
+
+ // Custom schedules
+ enum
+ {
+ SCHED_CSCANNER_SPOTLIGHT_HOVER = BaseClass::NEXT_SCHEDULE,
+ SCHED_CSCANNER_SPOTLIGHT_INSPECT_POS,
+ SCHED_CSCANNER_SPOTLIGHT_INSPECT_CIT,
+ SCHED_CSCANNER_PHOTOGRAPH_HOVER,
+ SCHED_CSCANNER_PHOTOGRAPH,
+ SCHED_CSCANNER_ATTACK_FLASH,
+ SCHED_CSCANNER_MOVE_TO_INSPECT,
+ SCHED_CSCANNER_PATROL,
+
+ NEXT_SCHEDULE,
+ };
+
+ // Custom tasks
+ enum
+ {
+ TASK_CSCANNER_SET_FLY_PHOTO = BaseClass::NEXT_TASK,
+ TASK_CSCANNER_SET_FLY_SPOT,
+ TASK_CSCANNER_PHOTOGRAPH,
+ TASK_CSCANNER_ATTACK_PRE_FLASH,
+ TASK_CSCANNER_ATTACK_FLASH,
+ TASK_CSCANNER_SPOT_INSPECT_ON,
+ TASK_CSCANNER_SPOT_INSPECT_WAIT,
+ TASK_CSCANNER_SPOT_INSPECT_OFF,
+ TASK_CSCANNER_CLEAR_INSPECT_TARGET,
+ TASK_CSCANNER_GET_PATH_TO_INSPECT_TARGET,
+
+ NEXT_TASK,
+ };
+
+ DECLARE_DATADESC();
+};
+
+#endif // NPC_SCANNER_H