diff options
| author | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
|---|---|---|
| committer | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
| commit | 39ed87570bdb2f86969d4be821c94b722dc71179 (patch) | |
| tree | abc53757f75f40c80278e87650ea92808274aa59 /mp/src/game/client/hl2/c_vehicle_cannon.cpp | |
| download | source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.tar.xz source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.zip | |
First version of the SOurce SDK 2013
Diffstat (limited to 'mp/src/game/client/hl2/c_vehicle_cannon.cpp')
| -rw-r--r-- | mp/src/game/client/hl2/c_vehicle_cannon.cpp | 187 |
1 files changed, 187 insertions, 0 deletions
diff --git a/mp/src/game/client/hl2/c_vehicle_cannon.cpp b/mp/src/game/client/hl2/c_vehicle_cannon.cpp new file mode 100644 index 00000000..703bc271 --- /dev/null +++ b/mp/src/game/client/hl2/c_vehicle_cannon.cpp @@ -0,0 +1,187 @@ +//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+#include "cbase.h"
+#include "hud.h"
+#include <vgui_controls/Controls.h>
+#include <Color.h>
+#include "c_vehicle_crane.h"
+#include "view.h"
+#include "vehicle_viewblend_shared.h"
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include "tier0/memdbgon.h"
+
+int ScreenTransform( const Vector& point, Vector& screen );
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+class C_PropCannon : public C_BaseAnimating, public IClientVehicle
+{
+
+ DECLARE_CLASS( C_PropCannon, C_BaseAnimating );
+
+public:
+
+ DECLARE_CLIENTCLASS();
+ DECLARE_DATADESC();
+
+ C_PropCannon();
+
+ void PreDataUpdate( DataUpdateType_t updateType );
+
+public:
+
+ // IClientVehicle overrides.
+ virtual void GetVehicleViewPosition( int nRole, Vector *pOrigin, QAngle *pAngles, float *pFOV = NULL );
+ virtual void GetVehicleFOV( float &flFOV ) { flFOV = 0.0f; }
+ virtual void DrawHudElements();
+ virtual bool IsPassengerUsingStandardWeapons( int nRole = VEHICLE_ROLE_DRIVER ) { return false; }
+ virtual void UpdateViewAngles( C_BasePlayer *pLocalPlayer, CUserCmd *pCmd ) {}
+ virtual C_BaseCombatCharacter *GetPassenger( int nRole );
+ virtual int GetPassengerRole( C_BaseCombatCharacter *pPassenger );
+ virtual void GetVehicleClipPlanes( float &flZNear, float &flZFar ) const;
+ virtual int GetPrimaryAmmoType() const { return -1; }
+ virtual int GetPrimaryAmmoCount() const { return -1; }
+ virtual int GetPrimaryAmmoClip() const { return -1; }
+ virtual bool PrimaryAmmoUsesClips() const { return false; }
+ virtual int GetJoystickResponseCurve() const { return 0; }
+
+public:
+
+ // C_BaseEntity overrides.
+ virtual IClientVehicle* GetClientVehicle() { return this; }
+ virtual C_BaseEntity *GetVehicleEnt() { return this; }
+ virtual void SetupMove( C_BasePlayer *player, CUserCmd *ucmd, IMoveHelper *pHelper, CMoveData *move ) {}
+ virtual void ProcessMovement( C_BasePlayer *pPlayer, CMoveData *pMoveData ) {}
+ virtual void FinishMove( C_BasePlayer *player, CUserCmd *ucmd, CMoveData *move ) {}
+ virtual bool IsPredicted() const { return false; }
+ virtual void ItemPostFrame( C_BasePlayer *pPlayer ) {}
+ virtual bool IsSelfAnimating() { return false; };
+ virtual void GetRenderBounds( Vector& theMins, Vector& theMaxs );
+
+private:
+
+ CHandle<C_BasePlayer> m_hPlayer;
+ CHandle<C_BasePlayer> m_hPrevPlayer;
+
+ bool m_bEnterAnimOn;
+ bool m_bExitAnimOn;
+ Vector m_vecEyeExitEndpoint;
+
+ Vector m_vecOldShadowDir;
+
+ ViewSmoothingData_t m_ViewSmoothingData;
+};
+
+
+IMPLEMENT_CLIENTCLASS_DT(C_PropCannon, DT_PropCannon, CPropCannon)
+ RecvPropEHandle( RECVINFO(m_hPlayer) ),
+ RecvPropBool( RECVINFO( m_bEnterAnimOn ) ),
+ RecvPropBool( RECVINFO( m_bExitAnimOn ) ),
+ RecvPropVector( RECVINFO( m_vecEyeExitEndpoint ) ),
+END_RECV_TABLE()
+
+
+BEGIN_DATADESC( C_PropCannon )
+ DEFINE_EMBEDDED( m_ViewSmoothingData ),
+END_DATADESC()
+
+
+#define ROLL_CURVE_ZERO 5 // roll less than this is clamped to zero
+#define ROLL_CURVE_LINEAR 45 // roll greater than this is copied out
+
+#define PITCH_CURVE_ZERO 10 // pitch less than this is clamped to zero
+#define PITCH_CURVE_LINEAR 45 // pitch greater than this is copied out
+ // spline in between
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+C_PropCannon::C_PropCannon( void )
+{
+ memset( &m_ViewSmoothingData, 0, sizeof( m_ViewSmoothingData ) );
+ m_ViewSmoothingData.pVehicle = this;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+// Input : updateType -
+//-----------------------------------------------------------------------------
+void C_PropCannon::PreDataUpdate( DataUpdateType_t updateType )
+{
+ BaseClass::PreDataUpdate( updateType );
+
+ m_hPrevPlayer = m_hPlayer;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+C_BaseCombatCharacter *C_PropCannon::GetPassenger( int nRole )
+{
+ if ( nRole == VEHICLE_ROLE_DRIVER )
+ return m_hPlayer.Get();
+
+ return NULL;
+}
+
+//-----------------------------------------------------------------------------
+// Returns the role of the passenger
+//-----------------------------------------------------------------------------
+int C_PropCannon::GetPassengerRole( C_BaseCombatCharacter *pPassenger )
+{
+ if ( m_hPlayer.Get() == pPassenger )
+ return VEHICLE_ROLE_DRIVER;
+
+ return VEHICLE_ROLE_NONE;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Modify the player view/camera while in a vehicle
+//-----------------------------------------------------------------------------
+void C_PropCannon::GetVehicleViewPosition( int nRole, Vector *pAbsOrigin, QAngle *pAbsAngles, float *pFOV /*=NULL*/ )
+{
+ SharedVehicleViewSmoothing( m_hPlayer,
+ pAbsOrigin, pAbsAngles,
+ m_bEnterAnimOn, m_bExitAnimOn,
+ m_vecEyeExitEndpoint,
+ &m_ViewSmoothingData,
+ pFOV );
+}
+
+
+//-----------------------------------------------------------------------------
+// Futzes with the clip planes
+//-----------------------------------------------------------------------------
+void C_PropCannon::GetVehicleClipPlanes( float &flZNear, float &flZFar ) const
+{
+ // FIXME: Need something a better long-term, this fixes the buggy.
+ flZNear = 6;
+}
+
+
+//-----------------------------------------------------------------------------
+// Renders hud elements
+//-----------------------------------------------------------------------------
+void C_PropCannon::DrawHudElements( )
+{
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+// Input : theMins -
+// theMaxs -
+//-----------------------------------------------------------------------------
+void C_PropCannon::GetRenderBounds( Vector &theMins, Vector &theMaxs )
+{
+ // This is kind of hacky:( Add 660.0 to the y coordinate of the bounding box to
+ // allow for the full extension of the crane arm.
+ BaseClass::GetRenderBounds( theMins, theMaxs );
+ theMaxs.y += 660.0f;
+}
+
|