diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/server/hl2/vehicle_viewcontroller.cpp | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/server/hl2/vehicle_viewcontroller.cpp')
| -rw-r--r-- | game/server/hl2/vehicle_viewcontroller.cpp | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/game/server/hl2/vehicle_viewcontroller.cpp b/game/server/hl2/vehicle_viewcontroller.cpp new file mode 100644 index 0000000..19e0263 --- /dev/null +++ b/game/server/hl2/vehicle_viewcontroller.cpp @@ -0,0 +1,180 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: This is a bastardization of the vehicle code for the choreography +// group who want to have smooth view lerping code out of a keyframed +// controlled player viewpoint. +// +// $NoKeywords: $ +//=============================================================================// + +#include "cbase.h" +#include "vehicle_base.h" +#include "hl2_player.h" + +// memdbgon must be the last include file in a .cpp file!!! +#include "tier0/memdbgon.h" + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +class CPropVehicleViewController : public CPropVehicleDriveable +{ + DECLARE_CLASS( CPropVehicleViewController, CPropVehicleDriveable ); +public: + DECLARE_DATADESC(); + + // CBaseEntity + void Spawn( void ); + void Think(void); + + // CPropVehicle + virtual void SetupMove( CBasePlayer *player, CUserCmd *ucmd, IMoveHelper *pHelper, CMoveData *move ); + virtual void EnterVehicle( CBasePlayer *pPlayer ); + virtual void ExitVehicle( int nRole ); + + // Inputs to force the player in/out of the vehicle + void InputForcePlayerIn( inputdata_t &inputdata ); + void InputForcePlayerOut( inputdata_t &inputdata ); +}; + +BEGIN_DATADESC( CPropVehicleViewController ) + DEFINE_INPUTFUNC( FIELD_STRING, "ForcePlayerIn", InputForcePlayerIn ), + DEFINE_INPUTFUNC( FIELD_VOID, "ForcePlayerOut", InputForcePlayerOut ), +END_DATADESC() + +LINK_ENTITY_TO_CLASS( vehicle_viewcontroller, CPropVehicleViewController ); + +//------------------------------------------------ +// Spawn +//------------------------------------------------ +void CPropVehicleViewController::Spawn( void ) +{ + BaseClass::Spawn(); + AddSolidFlags( FSOLID_NOT_STANDABLE ); +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CPropVehicleViewController::Think(void) +{ + BaseClass::Think(); + + SetSimulationTime( gpGlobals->curtime ); + SetNextThink( gpGlobals->curtime ); + SetAnimatedEveryTick( true ); + + StudioFrameAdvance(); + + // If the exit anim has finished, move the player to the right spot and stop animating + if ( IsSequenceFinished() && (m_bExitAnimOn || m_bEnterAnimOn) ) + { + // If we're exiting and have had the tau cannon removed, we don't want to reset the animation + GetServerVehicle()->HandleEntryExitFinish( m_bExitAnimOn, false ); + m_bExitAnimOn = false; + m_bEnterAnimOn = false; + } +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CPropVehicleViewController::SetupMove( CBasePlayer *player, CUserCmd *ucmd, IMoveHelper *pHelper, CMoveData *move ) +{ + // Does nothing, because this vehicle doesn't drive +} + +//----------------------------------------------------------------------------- +// Purpose: +// NOTE: Doesn't call the base call enter vehicle on purpose! +//----------------------------------------------------------------------------- +void CPropVehicleViewController::EnterVehicle( CBasePlayer *pPlayer ) +{ + if ( !pPlayer ) + return; + + m_hPlayer = pPlayer; + + pPlayer->SetViewOffset( vec3_origin ); + pPlayer->ShowCrosshair( false ); + m_playerOn.FireOutput( pPlayer, this, 0 ); + + // Start Thinking + SetNextThink( gpGlobals->curtime ); + + m_VehiclePhysics.GetVehicle()->OnVehicleEnter(); + + // Stop the player sprint and flashlight. + CHL2_Player *pHL2Player = dynamic_cast<CHL2_Player*>( pPlayer ); + if ( pHL2Player ) + { + if ( pHL2Player->IsSprinting() ) + { + pHL2Player->StopSprinting(); + } + + if ( pHL2Player->FlashlightIsOn() ) + { + pHL2Player->FlashlightTurnOff(); + } + } +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CPropVehicleViewController::ExitVehicle( int nRole ) +{ + BaseClass::ExitVehicle( nRole ); + m_bEnterAnimOn = false; +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CPropVehicleViewController::InputForcePlayerIn( inputdata_t &inputdata ) +{ + CBasePlayer *pPlayer = UTIL_PlayerByIndex(1); + if ( !pPlayer ) + return; + + ResetUseKey( pPlayer ); + + // Get the entry animation from the input + int iEntryAnim = ACTIVITY_NOT_AVAILABLE; + if ( inputdata.value.StringID() != NULL_STRING ) + { + iEntryAnim = LookupSequence( inputdata.value.String() ); + if ( iEntryAnim == ACTIVITY_NOT_AVAILABLE ) + { + Warning("vehicle_viewcontroller %s could not find specified entry animation %s\n", STRING(GetEntityName()), inputdata.value.String() ); + return; + } + } + + // Make sure we successfully got in the vehicle + if ( pPlayer->GetInVehicle( GetServerVehicle(), VEHICLE_ROLE_DRIVER ) == false ) + { + // The player was unable to enter the vehicle and the output has failed + Assert( 0 ); + return; + } + + // Setup the "enter" vehicle sequence + SetCycle( 0 ); + m_flAnimTime = gpGlobals->curtime; + ResetSequence( iEntryAnim ); + ResetClientsideFrame(); + m_bEnterAnimOn = true; +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CPropVehicleViewController::InputForcePlayerOut( inputdata_t &inputdata ) +{ + if ( !GetDriver() ) + return; + + GetServerVehicle()->HandlePassengerExit( m_hPlayer ); +} |