//======== (C) Copyright 2001 Charles G. Cleveland All rights reserved. ========= // // The copyright to the contents herein is the property of Charles G. Cleveland. // The contents may be used and/or copied only with the written permission of // Charles G. Cleveland, or in accordance with the terms and conditions stipulated in // the agreement/contract under which the contents have been supplied. // // Purpose: Base NS turret, used for all types of automated enemy detection // // $Workfile: AvHTurret.h$ // $Date: 2002/11/22 21:24:59 $ // //------------------------------------------------------------------------------- // $Log: AvHTurret.h,v $ // Revision 1.8 2002/11/22 21:24:59 Flayra // - Fixed turret factory abuse, where turrets became active after recycling the nearby turret factory before turret was fully contructed. // - Fixed bug where siege turrets became re-activated after building a regular turret factory nearby. // // Revision 1.7 2002/11/06 01:39:21 Flayra // - Turrets now need an active turret factory to be active // // Revision 1.6 2002/08/16 02:49:00 Flayra // - New damage model // // Revision 1.5 2002/07/23 17:34:07 Flayra // - Turrets track range in 2D, turrets can not require LOS if desired (for siege) // // Revision 1.4 2002/07/01 21:23:01 Flayra // - Added generic vertical FOV to allow alien turrets to shoot very high and low // // Revision 1.3 2002/06/03 17:02:22 Flayra // - Experimented with pushable/buildable siege turrets // // Revision 1.2 2002/05/28 18:11:59 Flayra // - Put in slower, randomish rate of fire for turrets for sound variance and drama, don't play ping if no ping sound specified (crashing with offensive tower) // // Revision 1.1 2002/05/23 02:32:57 Flayra // - Post-crash checkin. Restored @Backup from around 4/16. Contains changes for last four weeks of development. // //=============================================================================== #ifndef AVH_TURRET_H #define AVH_TURRET_H #include "mod/AvHBaseBuildable.h" #include "util/Quat.h" //#include "mod/AvHPushableBuildable.h" // This class behaves like CSentry does, but clean and extensible, and with a base class of AvHBaseBuildable //class AvHTurret : public AvHPushableBuildable//public AvHBaseBuildable class AvHTurret : public AvHBaseBuildable { public: AvHTurret(AvHTechID inTechID, AvHMessageID inMessageID, char* inClassName, int inUser3); virtual void CheckEnabledState(); virtual char* GetActiveSound() const; virtual char* GetAlertSound() const; virtual char* GetPingSound() const; virtual int GetDamageType() const; virtual int GetActiveAnimation() const; virtual int GetDeployAnimation() const; virtual bool GetEnabledState() const; virtual int GetIdle1Animation() const; virtual int GetIdle2Animation() const; virtual int GetKilledAnimation() const; virtual bool GetRequiresLOS() const; virtual int GetPointValue(void) const; virtual int GetSetEnabledAnimation() const; virtual int GetSpawnAnimation() const; virtual int GetTakeDamageAnimation() const; virtual int GetVerticalFOV() const; virtual bool GetIsValidTarget(CBaseEntity* inEntity) const; CBaseEntity* FindBestEnemy(); virtual int IRelationship(CBaseEntity* inTarget); virtual void SetNextAttack(); // Must override these virtual int GetXYRange() const = 0; virtual void Shoot(const Vector &vecSrc, const Vector &vecDirToEnemy, const Vector& inVecEnemyVelocity) = 0; virtual void Ping(void); virtual int MoveTurret(void); virtual bool GetBaseClassAnimatesTurret() const; virtual void ResetEntity(); virtual void SetHasBeenBuilt(); virtual void SetEnabledState(bool inState, bool inForce = false); virtual void Spawn(); protected: virtual float GetRateOfFire() const; virtual void UpdateEnemy(); void TurretUpdate(); void Init(); void Setup(); BOOL FInViewCone(CBaseEntity* inEntity); BOOL FInViewCone(Vector* inOrigin); EXPORT void ActiveThink(void); EXPORT void SearchThink(void); EHANDLE m_hEnemy; float m_flFieldOfView; float mTimeOfLastAttack; float mTimeOfNextAttack; float mTimeOfLastUpdateEnemy; // turn rate in radians float m_fTurnRate; // movement Quat mCurQuat; Quat mGoalQuat; float mNextPingTime; bool mEnabled; }; #endif