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/client/tf2/c_vehicle_tank.cpp | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/client/tf2/c_vehicle_tank.cpp')
| -rw-r--r-- | game/client/tf2/c_vehicle_tank.cpp | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/game/client/tf2/c_vehicle_tank.cpp b/game/client/tf2/c_vehicle_tank.cpp new file mode 100644 index 0000000..be29039 --- /dev/null +++ b/game/client/tf2/c_vehicle_tank.cpp @@ -0,0 +1,150 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +//=============================================================================// + +#include "cbase.h" +#include "c_basefourwheelvehicle.h" +#include "tf_movedata.h" +#include "ObjectControlPanel.h" +#include <vgui_controls/Label.h> +#include <vgui_controls/Button.h> +#include "vgui_rotation_slider.h" +#include <vgui/ISurface.h> +#include "vgui_basepanel.h" +#include "ground_line.h" +#include "hud_minimap.h" +#include "vgui_bitmapimage.h" +#include "view.h" +#include "c_basetempentity.h" +#include "particles_simple.h" +#include "in_buttons.h" + + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +class C_VehicleTank : public C_BaseTFFourWheelVehicle +{ + DECLARE_CLASS( C_VehicleTank, C_BaseTFFourWheelVehicle ); +public: + DECLARE_CLIENTCLASS(); + + C_VehicleTank(); + + + virtual void ClientThink(); + + virtual void OnItemPostFrame( CBaseTFPlayer *pDriver ); + +// C_BaseEntity overrides. +public: + virtual void GetBoneControllers(float controllers[MAXSTUDIOBONECTRLS]); + +private: + C_VehicleTank( const C_VehicleTank & ); // not defined, not accessible + + float m_flClientYaw; + float m_flClientPitch; + + // Sent by the server. This is what we render with. + float m_flTurretYaw; + float m_flTurretPitch; +}; + + +IMPLEMENT_CLIENTCLASS_DT( C_VehicleTank, DT_VehicleTank, CVehicleTank ) + RecvPropFloat( RECVINFO( m_flTurretYaw ) ), + RecvPropFloat( RECVINFO( m_flTurretPitch ) ) +END_RECV_TABLE() + + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- + +C_VehicleTank::C_VehicleTank() +{ + m_flClientYaw = 0; + m_flClientPitch = 0; + m_flTurretYaw = 0; + m_flTurretPitch = 0; +} + + +void C_VehicleTank::ClientThink() +{ + if ( GetPassenger( VEHICLE_ROLE_DRIVER ) == C_BasePlayer::GetLocalPlayer() ) + { + // Cast a ray out of the view to see where the player is looking. + trace_t trace; + UTIL_TraceLine( + MainViewOrigin(), + MainViewOrigin() + MainViewForward() * 100000, + MASK_OPAQUE, NULL, + COLLISION_GROUP_NONE, + &trace ); + + if ( trace.fraction < 1 ) + { + // Figure out what angles our turret needs to be at in order to hit the target. + + Vector vFireOrigin; + QAngle dummy; + GetAttachment( LookupAttachment( "barrel" ), vFireOrigin, dummy ); + + // Get a direction vector that points at the target. + Vector vTo = trace.endpos - vFireOrigin; + + // Transform it into the tank's local space. + matrix3x4_t tankToWorld; + AngleMatrix( GetAbsAngles(), tankToWorld ); + + Vector vLocalTo; + VectorITransform( vTo, tankToWorld, vLocalTo ); + + // Now figure out what the angles are in local space. + QAngle localAngles; + VectorAngles( vLocalTo, localAngles ); + + // Make the angles adhere to the definition in CVehicleTank's header. + m_flClientYaw = localAngles[YAW] - 90; + m_flClientPitch = anglemod( -localAngles[PITCH] ); + + + char cmd[512]; + Q_snprintf( cmd, sizeof( cmd ), "TurretAngles %.2f %.2f", m_flClientYaw, m_flClientPitch ); + SendClientCommand( cmd ); + } + } + + BaseClass::ClientThink(); +} + + +void C_VehicleTank::GetBoneControllers( float controllers[MAXSTUDIOBONECTRLS]) +{ + BaseClass::GetBoneControllers( controllers ); + + controllers[0] = anglemod( m_flTurretYaw ) / 360.0; + controllers[1] = anglemod( m_flTurretPitch ) / 360.0; +} + +//----------------------------------------------------------------------------- +// Here's where we deal with weapons +//----------------------------------------------------------------------------- +void C_VehicleTank::OnItemPostFrame( CBaseTFPlayer *pDriver ) +{ + if ( GetPassengerRole(pDriver) != VEHICLE_ROLE_DRIVER ) + return; + + if ( pDriver->m_nButtons & IN_ATTACK ) + { + } + else if ( pDriver->m_nButtons & (IN_ATTACK2 | IN_SPEED) ) + { + BaseClass::OnItemPostFrame( pDriver ); + } +} + |