123 lines
4.8 KiB
C++
123 lines
4.8 KiB
C++
//========= 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
|