You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
188 lines
6.2 KiB
188 lines
6.2 KiB
5 years ago
|
//========= 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;
|
||
|
}
|
||
|
|