mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-09-01 15:09:19 +00:00
upload "kind" alien swarm
This commit is contained in:
@@ -0,0 +1,280 @@
|
||||
#ifndef _INLCUDED_ASW_BUZZER_H
|
||||
#define _INLCUDED_ASW_BUZZER_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "ai_basenpc_physicsflyer.h"
|
||||
#include "Sprite.h"
|
||||
#include "SpriteTrail.h"
|
||||
#include "player_pickup.h"
|
||||
#include "iasw_spawnable_npc.h"
|
||||
#include "asw_lag_compensation.h"
|
||||
#include "asw_shareddefs.h"
|
||||
|
||||
// Start with the engine off and folded up.
|
||||
#define SF_ASW_BUZZER_NO_DAMAGE_EFFECTS (1 << 17)
|
||||
#define SF_ASW_BUZZER_USE_AIR_NODES (1 << 18)
|
||||
#define SF_ASW_BUZZER_NO_DANGER_SOUNDS (1 << 20)
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Attachment points.
|
||||
//-----------------------------------------------------------------------------
|
||||
#define ASW_BUZZER_GIB_HEALTH 30
|
||||
#define ASW_BUZZER_INACTIVE_HEALTH 25
|
||||
#define ASW_BUZZER_MAX_SPEED 300
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Movement parameters.
|
||||
//-----------------------------------------------------------------------------
|
||||
#define ASW_BUZZER_WAYPOINT_DISTANCE 25 // Distance from waypoint that counts as arrival.
|
||||
|
||||
class CSprite;
|
||||
class CSoundPatch;
|
||||
class CASW_AI_Senses;
|
||||
struct envelopePoint_t;
|
||||
|
||||
class CASW_Buzzer : public CAI_BasePhysicsFlyingBot, public IASW_Spawnable_NPC
|
||||
{
|
||||
DECLARE_CLASS( CASW_Buzzer, CAI_BasePhysicsFlyingBot );
|
||||
DECLARE_SERVERCLASS();
|
||||
|
||||
public:
|
||||
CASW_Buzzer();
|
||||
virtual ~CASW_Buzzer();
|
||||
|
||||
Class_T Classify( void ) { return (Class_T) CLASS_ASW_BUZZER; }
|
||||
|
||||
bool CorpseGib( const CTakeDamageInfo &info );
|
||||
void Event_Dying(void);
|
||||
void Event_Killed( const CTakeDamageInfo &info );
|
||||
int OnTakeDamage_Alive( const CTakeDamageInfo &info );
|
||||
int OnTakeDamage_Dying( const CTakeDamageInfo &info );
|
||||
void TraceAttack( const CTakeDamageInfo &info, const Vector &vecDir, trace_t *ptr);
|
||||
void ASWTraceBleed( float flDamage, const Vector &vecDir, trace_t *ptr, int bitsDamageType );
|
||||
void TranslateNavGoal( CBaseEntity *pEnemy, Vector &chasePosition );
|
||||
float GetDefaultNavGoalTolerance();
|
||||
virtual void Freeze( float flFreezeAmount, CBaseEntity *pFreezer, Ray_t *pFreezeRay );
|
||||
virtual bool ShouldBecomeStatue( void );
|
||||
|
||||
void OnStateChange( NPC_STATE OldState, NPC_STATE NewState );
|
||||
|
||||
virtual bool CreateVPhysics( void );
|
||||
|
||||
virtual void DeathSound( const CTakeDamageInfo &info );
|
||||
virtual void PainSound( const CTakeDamageInfo &info );
|
||||
virtual bool ShouldGib( const CTakeDamageInfo &info );
|
||||
|
||||
Activity NPC_TranslateActivity( Activity baseAct );
|
||||
virtual int TranslateSchedule( int scheduleType );
|
||||
int MeleeAttack1Conditions ( float flDot, float flDist );
|
||||
|
||||
bool OverrideMove(float flInterval);
|
||||
void MoveToTarget(float flInterval, const Vector &MoveTarget);
|
||||
virtual void TurnHeadToTarget( float flInterval, const Vector &moveTarget );
|
||||
void MoveExecute_Alive(float flInterval);
|
||||
void MoveExecute_Dead(float flInterval);
|
||||
int MoveCollisionMask(void);
|
||||
|
||||
void TurnHeadRandomly( float flInterval );
|
||||
|
||||
|
||||
void StartEngine( bool fStartSound );
|
||||
|
||||
virtual Vector BodyTarget( const Vector &posSrc, bool bNoisy = true ) { return WorldSpaceCenter(); }
|
||||
|
||||
virtual float GetHeadTurnRate( void ) { return 45.0f; } // Degrees per second
|
||||
|
||||
void CheckCollisions(float flInterval);
|
||||
virtual void GatherEnemyConditions( CBaseEntity *pEnemy );
|
||||
void PlayFlySound(void);
|
||||
virtual void StopLoopingSounds(void);
|
||||
|
||||
void Precache(void);
|
||||
void RunTask( const Task_t *pTask );
|
||||
void Spawn(void);
|
||||
virtual void OnRestore();
|
||||
void Activate();
|
||||
void StartTask( const Task_t *pTask );
|
||||
|
||||
void BladesInit();
|
||||
void SoundInit( void );
|
||||
void StartEye( void );
|
||||
|
||||
bool HandleInteraction(int interactionType, void* data, CBaseCombatCharacter* sourceEnt);
|
||||
|
||||
void PostNPCInit( void );
|
||||
|
||||
void GatherConditions();
|
||||
void PrescheduleThink( void );
|
||||
|
||||
void FlapWings(float flInterval);
|
||||
|
||||
void Slice( CBaseEntity *pHitEntity, float flInterval, trace_t &tr );
|
||||
void Bump( CBaseEntity *pHitEntity, float flInterval, trace_t &tr );
|
||||
void Splash( const Vector &vecSplashPos );
|
||||
|
||||
float ManhackMaxSpeed( void );
|
||||
virtual void VPhysicsShadowCollision( int index, gamevcollisionevent_t *pEvent );
|
||||
void VPhysicsCollision( int index, gamevcollisionevent_t *pEvent );
|
||||
void HitPhysicsObject( CBaseEntity *pOther );
|
||||
virtual void ClampMotorForces( Vector &linear, AngularImpulse &angular );
|
||||
|
||||
void InputDisableSwarm( inputdata_t &inputdata );
|
||||
|
||||
virtual bool AllowedToIgnite( void ) { return true; }
|
||||
|
||||
float GetMaxEnginePower();
|
||||
|
||||
virtual void InputPowerdown( inputdata_t &inputdata )
|
||||
{
|
||||
m_iHealth = 0;
|
||||
}
|
||||
|
||||
enum BuzzerConditions
|
||||
{
|
||||
COND_ASW_BUZZER_START_ATTACK = BaseClass::NEXT_CONDITION, // We are able to do a bombing run on the current enemy.
|
||||
NEXT_CONDITION,
|
||||
};
|
||||
|
||||
DEFINE_CUSTOM_AI;
|
||||
|
||||
DECLARE_DATADESC();
|
||||
|
||||
// IASW_Spawnable_NPC implementation
|
||||
CHandle<CASW_Base_Spawner> m_hSpawner;
|
||||
virtual void SetAlienOrders(AlienOrder_t Orders, Vector vecOrderSpot, CBaseEntity* pOrderObject);
|
||||
AlienOrder_t GetAlienOrders();
|
||||
virtual void ClearAlienOrders();
|
||||
virtual int SelectAlienOrdersSchedule();
|
||||
virtual void OnMovementComplete();
|
||||
virtual int SelectSchedule();
|
||||
virtual void IgnoreMarines(bool bIgnoreMarines);
|
||||
|
||||
AlienOrder_t m_AlienOrders;
|
||||
Vector m_vecAlienOrderSpot;
|
||||
EHANDLE m_AlienOrderObject;
|
||||
bool m_bIgnoreMarines;
|
||||
bool m_bFailedMoveTo;
|
||||
|
||||
virtual void SetHealthByDifficultyLevel();
|
||||
|
||||
void SetSpawner(CASW_Base_Spawner* spawner);
|
||||
CAI_BaseNPC* GetNPC() { return this; }
|
||||
virtual bool CanStartBurrowed() { return false; }
|
||||
virtual void StartBurrowed() { }
|
||||
virtual void SetUnburrowActivity( string_t iszActivityName ) { }
|
||||
virtual void SetUnburrowIdleActivity( string_t iszActivityName ) { }
|
||||
virtual void MoveAside() { }
|
||||
virtual void ASW_Ignite( float flFlameLifetime, float flSize, CBaseEntity *pAttacker, CBaseEntity *pDamagingWeapon = NULL );
|
||||
virtual void ElectroStun( float flStunTime );
|
||||
virtual void Extinguish();
|
||||
CNetworkVar(bool, m_bOnFire);
|
||||
virtual void OnSwarmSensed(int iDistance);
|
||||
virtual void OnSwarmSenseEntity(CBaseEntity* pEnt) { }
|
||||
virtual void SetHoldoutAlien() { m_bHoldoutAlien = true; }
|
||||
virtual bool IsHoldoutAlien() { return m_bHoldoutAlien; }
|
||||
|
||||
void NPCInit();
|
||||
CAI_Senses* CreateSenses();
|
||||
CASW_AI_Senses* GetASWSenses();
|
||||
void SetDistSwarmSense( float flDistSense );
|
||||
|
||||
virtual void Ignite( float flFlameLifetime, bool bNPCOnly = true, float flSize = 0.0f, bool bCalledByLevelDesigner = false );
|
||||
void MoanSound( envelopePoint_t *pEnvelope, int iEnvelopeSize );
|
||||
|
||||
virtual void NPCThink();
|
||||
CASW_Lag_Compensation m_LagCompensation;
|
||||
|
||||
private:
|
||||
|
||||
bool IsInEffectiveTargetZone( CBaseEntity *pTarget );
|
||||
void MaintainGroundHeight( void );
|
||||
|
||||
void StartBurst( const Vector &vecDirection );
|
||||
void StopBurst( bool bInterruptSchedule = false );
|
||||
|
||||
void ShowHostile( bool hostile = true );
|
||||
|
||||
bool IsFlyingActivity( Activity baseAct );
|
||||
|
||||
// Computes the slice bounce velocity
|
||||
void ComputeSliceBounceVelocity( CBaseEntity *pHitEntity, trace_t &tr );
|
||||
|
||||
// Take damage from a vehicle:
|
||||
void TakeDamageFromVehicle( int index, gamevcollisionevent_t *pEvent );
|
||||
|
||||
// Take damage from physics impacts
|
||||
void TakeDamageFromPhysicsImpact( int index, gamevcollisionevent_t *pEvent );
|
||||
|
||||
void StartLoitering( const Vector &vecLoiterPosition );
|
||||
void StopLoitering() { m_vecLoiterPosition = vec3_invalid; m_fTimeNextLoiterPulse = gpGlobals->curtime; }
|
||||
bool IsLoitering() { return m_vecLoiterPosition != vec3_invalid; }
|
||||
void Loiter();
|
||||
|
||||
//
|
||||
// Movement variables.
|
||||
//
|
||||
|
||||
Vector m_vForceVelocity; // Someone forced me to move
|
||||
|
||||
Vector m_vTargetBanking;
|
||||
|
||||
Vector m_vForceMoveTarget; // Will fly here
|
||||
float m_fForceMoveTime; // If time is less than this
|
||||
Vector m_vSwarmMoveTarget; // Will fly here
|
||||
float m_fSwarmMoveTime; // If time is less than this
|
||||
float m_fEnginePowerScale; // scale all thrust by this amount (usually 1.0!)
|
||||
|
||||
float m_flNextEngineSoundTime;
|
||||
float m_flEngineStallTime;
|
||||
|
||||
float m_flNextBurstTime;
|
||||
float m_flBurstDuration;
|
||||
Vector m_vecBurstDirection;
|
||||
|
||||
float m_flWaterSuspendTime;
|
||||
int m_nLastSpinSound;
|
||||
|
||||
float m_flLastDamageTime;
|
||||
|
||||
// physics influence
|
||||
CHandle<CBasePlayer> m_hPhysicsAttacker;
|
||||
float m_flLastPhysicsInfluenceTime;
|
||||
|
||||
bool m_bDirtyPitch; // indicates whether we want the sound pitch updated.(sjb)
|
||||
bool m_bShowingHostile;
|
||||
|
||||
bool m_bBladesActive;
|
||||
float m_flWingFlapSpeed;
|
||||
|
||||
int m_iPanel1;
|
||||
int m_iPanel2;
|
||||
int m_iPanel3;
|
||||
int m_iPanel4;
|
||||
|
||||
int m_nLastWaterLevel;
|
||||
bool m_bDoSwarmBehavior;
|
||||
bool m_bGib;
|
||||
|
||||
bool m_bHeld;
|
||||
Vector m_vecLoiterPosition;
|
||||
float m_fTimeNextLoiterPulse;
|
||||
float m_fSuicideTime;
|
||||
|
||||
float m_fNextPainSound;
|
||||
CSoundPatch *m_pMoanSound;
|
||||
float m_flMoanPitch;
|
||||
float m_flNextMoanSound;
|
||||
bool m_bHoldoutAlien;
|
||||
|
||||
CNetworkVar( int, m_nEnginePitch1 );
|
||||
CNetworkVar( float, m_flEnginePitch1Time );
|
||||
|
||||
// moving slow from stun grenades
|
||||
float m_fHurtSlowMoveTime;
|
||||
float m_flElectroStunSlowMoveTime;
|
||||
CNetworkVar(bool, m_bElectroStunned);
|
||||
};
|
||||
|
||||
#endif //_INLCUDED_ASW_BUZZER_H
|
||||
Reference in New Issue
Block a user