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/player_pickup.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/server/player_pickup.h')
| -rw-r--r-- | game/server/player_pickup.h | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/game/server/player_pickup.h b/game/server/player_pickup.h new file mode 100644 index 0000000..1b6d252 --- /dev/null +++ b/game/server/player_pickup.h @@ -0,0 +1,93 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: APIs for player pickup of physics objects +// +//=============================================================================// + +#ifndef PLAYER_PICKUP_H +#define PLAYER_PICKUP_H +#ifdef _WIN32 +#pragma once +#endif + +#ifdef HL2_DLL +// Needed for launch velocity +extern ConVar physcannon_minforce; +extern ConVar physcannon_maxforce; +#endif + +// Reasons behind a pickup +enum PhysGunPickup_t +{ + PICKED_UP_BY_CANNON, + PUNTED_BY_CANNON, + PICKED_UP_BY_PLAYER, // Picked up by +USE, not physgun. +}; + +// Reasons behind a drop +enum PhysGunDrop_t +{ + DROPPED_BY_PLAYER, + THROWN_BY_PLAYER, + DROPPED_BY_CANNON, + LAUNCHED_BY_CANNON, +}; + +enum PhysGunForce_t +{ + PHYSGUN_FORCE_DROPPED, // Dropped by +USE + PHYSGUN_FORCE_THROWN, // Thrown from +USE + PHYSGUN_FORCE_PUNTED, // Punted by cannon + PHYSGUN_FORCE_LAUNCHED, // Launched by cannon +}; + +void PlayerPickupObject( CBasePlayer *pPlayer, CBaseEntity *pObject ); +void Pickup_ForcePlayerToDropThisObject( CBaseEntity *pTarget ); + +void Pickup_OnPhysGunDrop( CBaseEntity *pDroppedObject, CBasePlayer *pPlayer, PhysGunDrop_t reason ); +void Pickup_OnPhysGunPickup( CBaseEntity *pPickedUpObject, CBasePlayer *pPlayer, PhysGunPickup_t reason = PICKED_UP_BY_CANNON ); +bool Pickup_OnAttemptPhysGunPickup( CBaseEntity *pPickedUpObject, CBasePlayer *pPlayer, PhysGunPickup_t reason = PICKED_UP_BY_CANNON ); +bool Pickup_GetPreferredCarryAngles( CBaseEntity *pObject, CBasePlayer *pPlayer, matrix3x4_t &localToWorld, QAngle &outputAnglesWorldSpace ); +bool Pickup_ForcePhysGunOpen( CBaseEntity *pObject, CBasePlayer *pPlayer ); +bool Pickup_ShouldPuntUseLaunchForces( CBaseEntity *pObject, PhysGunForce_t reason ); +AngularImpulse Pickup_PhysGunLaunchAngularImpulse( CBaseEntity *pObject, PhysGunForce_t reason ); +Vector Pickup_DefaultPhysGunLaunchVelocity( const Vector &vecForward, float flMass ); +Vector Pickup_PhysGunLaunchVelocity( CBaseEntity *pObject, const Vector &vecForward, PhysGunForce_t reason ); + +CBaseEntity *Pickup_OnFailedPhysGunPickup( CBaseEntity *pPickedUpObject, Vector vPhysgunPos ); + +abstract_class IPlayerPickupVPhysics +{ +public: + // Callbacks for the physgun/cannon picking up an entity + virtual bool OnAttemptPhysGunPickup( CBasePlayer *pPhysGunUser, PhysGunPickup_t reason = PICKED_UP_BY_CANNON ) = 0; + virtual CBaseEntity *OnFailedPhysGunPickup( Vector vPhysgunPos ) = 0; + virtual void OnPhysGunPickup( CBasePlayer *pPhysGunUser, PhysGunPickup_t reason = PICKED_UP_BY_CANNON ) = 0; + virtual void OnPhysGunDrop( CBasePlayer *pPhysGunUser, PhysGunDrop_t Reason ) = 0; + virtual bool HasPreferredCarryAnglesForPlayer( CBasePlayer *pPlayer = NULL ) = 0; + virtual QAngle PreferredCarryAngles( void ) = 0; + virtual bool ForcePhysgunOpen( CBasePlayer *pPlayer ) = 0; + virtual AngularImpulse PhysGunLaunchAngularImpulse() = 0; + virtual bool ShouldPuntUseLaunchForces( PhysGunForce_t reason ) = 0; + virtual Vector PhysGunLaunchVelocity( const Vector &vecForward, float flMass ) = 0; +}; + +class CDefaultPlayerPickupVPhysics : public IPlayerPickupVPhysics +{ +public: + virtual bool OnAttemptPhysGunPickup( CBasePlayer *pPhysGunUser, PhysGunPickup_t reason = PICKED_UP_BY_CANNON ) { return true; } + virtual CBaseEntity *OnFailedPhysGunPickup( Vector vPhysgunPos ) { return NULL; } + virtual void OnPhysGunPickup( CBasePlayer *pPhysGunUser, PhysGunPickup_t reason = PICKED_UP_BY_CANNON ) {} + virtual void OnPhysGunDrop( CBasePlayer *pPhysGunUser, PhysGunDrop_t reason ) {} + virtual bool HasPreferredCarryAnglesForPlayer( CBasePlayer *pPlayer ) { return false; } + virtual QAngle PreferredCarryAngles( void ) { return vec3_angle; } + virtual bool ForcePhysgunOpen( CBasePlayer *pPlayer ) { return false; } + virtual AngularImpulse PhysGunLaunchAngularImpulse() { return RandomAngularImpulse( -600, 600 ); } + virtual bool ShouldPuntUseLaunchForces( PhysGunForce_t reason ) { return false; } + virtual Vector PhysGunLaunchVelocity( const Vector &vecForward, float flMass ) + { + return Pickup_DefaultPhysGunLaunchVelocity( vecForward, flMass ); + } +}; + +#endif // PLAYER_PICKUP_H |