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/hl2/npc_scanner.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/server/hl2/npc_scanner.h')
| -rw-r--r-- | game/server/hl2/npc_scanner.h | 215 |
1 files changed, 215 insertions, 0 deletions
diff --git a/game/server/hl2/npc_scanner.h b/game/server/hl2/npc_scanner.h new file mode 100644 index 0000000..f34eba3 --- /dev/null +++ b/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 |