summaryrefslogtreecommitdiff
path: root/game/server/episodic/ai_behavior_passenger_zombie.h
diff options
context:
space:
mode:
Diffstat (limited to 'game/server/episodic/ai_behavior_passenger_zombie.h')
-rw-r--r--game/server/episodic/ai_behavior_passenger_zombie.h97
1 files changed, 97 insertions, 0 deletions
diff --git a/game/server/episodic/ai_behavior_passenger_zombie.h b/game/server/episodic/ai_behavior_passenger_zombie.h
new file mode 100644
index 0000000..98b2ea0
--- /dev/null
+++ b/game/server/episodic/ai_behavior_passenger_zombie.h
@@ -0,0 +1,97 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: Zombies on cars!
+//
+//=============================================================================
+
+#ifndef AI_BEHAVIOR_PASSENGER_ZOMBIE_H
+#define AI_BEHAVIOR_PASSENGER_ZOMBIE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "ai_behavior_passenger.h"
+#include "ai_utils.h"
+#include "vehicle_base.h"
+
+extern impactdamagetable_t gZombiePassengerImpactDamageTable;
+
+class CAI_PassengerBehaviorZombie : public CAI_PassengerBehavior
+{
+ DECLARE_CLASS( CAI_PassengerBehaviorZombie, CAI_PassengerBehavior );
+ DECLARE_DATADESC()
+
+public:
+
+ CAI_PassengerBehaviorZombie( void );
+
+ enum
+ {
+ // Schedules
+ SCHED_PASSENGER_ZOMBIE_ENTER_VEHICLE = BaseClass::NEXT_SCHEDULE,
+ SCHED_PASSENGER_ZOMBIE_EXIT_VEHICLE,
+ SCHED_PASSENGER_ZOMBIE_MELEE_ATTACK1,
+ SCHED_PASSENGER_ZOMBIE_RANGE_ATTACK1,
+ SCHED_PASSENGER_ZOMBIE_ATTACH,
+ SCHED_PASSENGER_ZOMBIE_RUN_TO_VEHICLE,
+ NEXT_SCHEDULE,
+
+ // Tasks
+ TASK_PASSENGER_ZOMBIE_RANGE_ATTACK1 = BaseClass::NEXT_TASK,
+ TASK_PASSENGER_ZOMBIE_DISMOUNT,
+ TASK_PASSENGER_ZOMBIE_ATTACH,
+ NEXT_TASK,
+
+ // Conditions
+ COND_PASSENGER_ZOMBIE_CAN_ATTACH_TO_VEHICLE = BaseClass::NEXT_CONDITION,
+ NEXT_CONDITION
+ };
+
+ virtual const char *GetName( void ) { return "ZombiePassenger"; }
+ virtual string_t GetRoleName( void ) { return MAKE_STRING( "passenger_zombie" ); }
+ virtual int SelectSchedule( void );
+ virtual int TranslateSchedule( int scheduleType );
+ virtual void GatherConditions( void );
+ virtual void Event_Killed( const CTakeDamageInfo &info );
+ virtual void BuildScheduleTestBits( void );
+ virtual void RunTask( const Task_t *pTask );
+ virtual void StartTask( const Task_t *pTask );
+ virtual bool CanEnterVehicle( void );
+ virtual void ExitVehicle( void );
+ virtual void HandleAnimEvent( animevent_t *pEvent );
+ virtual Activity NPC_TranslateActivity( Activity activity );
+
+ virtual bool AttachToVehicle( void );
+
+ void SuppressAttack( float flDuration );
+
+ DEFINE_CUSTOM_SCHEDULE_PROVIDER;
+
+protected:
+
+ int SelectOutsideSchedule( void );
+ int SelectInsideSchedule( void );
+ virtual int FindExitSequence( void );
+ void StartDismount( void );
+ void FinishDismount( void );
+ virtual void CalculateBodyLean( void );
+ virtual void GatherVehicleStateConditions( void );
+ virtual int FindEntrySequence( bool bNearest = false );
+
+private:
+
+ void VehicleLeapAttackTouch( CBaseEntity *pOther );
+ void VehicleLeapAttack( void );
+ bool CanBeOnEnemyVehicle( void );
+ float GetEntryPointCost( const Vector &vecEntryPos );
+ bool EnemyInVehicle( void );
+ void GetAttachmentPoint( Vector *vecPoint );
+ bool CanJumpToAttachToVehicle( void );
+ //bool WithinAttachRange( void );
+
+ float m_flLastLateralLean;
+ float m_flLastVerticalLean;
+ float m_flNextLeapTime;
+};
+
+#endif // AI_BEHAVIOR_PASSENGER_ZOMBIE_H