//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // //=============================================================================// #ifndef TF_VEHICLE_TANK_H #define TF_VEHICLE_TANK_H #ifdef _WIN32 #pragma once #endif #include "tf_basefourwheelvehicle.h" #include "vphysics/vehicles.h" // ------------------------------------------------------------------------ // // A wagon that players can build one object on the back of // ------------------------------------------------------------------------ // class CVehicleTank : public CBaseTFFourWheelVehicle { DECLARE_CLASS( CVehicleTank, CBaseTFFourWheelVehicle ); public: DECLARE_SERVERCLASS(); static CVehicleTank* Create(const Vector &vOrigin, const QAngle &vAngles); CVehicleTank(); virtual ~CVehicleTank(); virtual void Spawn(); virtual void Precache(); virtual void GetControlPanelInfo( int nPanelIndex, const char *&pPanelName ); virtual bool CanTakeEMPDamage( void ) { return true; } virtual bool ClientCommand( CBaseTFPlayer *pPlayer, const CCommand &args ); // Vehicle overrides virtual bool IsPassengerVisible( int nRole ) { return true; } virtual bool IsPassengerUsingStandardWeapons( int nRole ); protected: // Here's where we deal with weapons virtual void OnItemPostFrame( CBaseTFPlayer *pDriver ); private: void TurretThink(); void Fire(); // These are the angles where the client currently wants the tank to look. // The server smoothly interpolates to these. // Pitch is 0 when facing straight ahead and 90 when facing straight up. // Yaw is 0 when facing straight ahead and 90 when facing to the tank's left. float m_flClientYaw; float m_flClientPitch; // This is the pitch that the client sends - we use it directly. // This is the real yaw (which smoothly interpolates towards m_flClientYaw). CNetworkVar( float, m_flTurretYaw ); CNetworkVar( float, m_flTurretPitch ); // Tracks when we can fire the cannon. float m_flNextFireTime; }; #endif // TF_VEHICLE_TANK_H