DECLARE_AUTO_LIST( IPhysicsPropAutoList );
class CPhysicsProp : public CBreakableProp, public IPhysicsPropAutoList
{
DECLARE_CLASS( CPhysicsProp, CBreakableProp );
DECLARE_SERVERCLASS();
public:
~CPhysicsProp();
CPhysicsProp( void )
{
}
void Spawn( void );
void Precache();
bool CreateVPhysics( void );
bool OverridePropdata( void );
virtual void VPhysicsUpdate( IPhysicsObject *pPhysics );
virtual void VPhysicsCollision( int index, gamevcollisionevent_t *pEvent );
void InputWake( inputdata_t &inputdata );
void InputSleep( inputdata_t &inputdata );
void InputEnableMotion( inputdata_t &inputdata );
void InputDisableMotion( inputdata_t &inputdata );
void InputDisableFloating( inputdata_t &inputdata );
void EnableMotion( void );
bool CanBePickedUpByPhyscannon( void );
void OnPhysGunPickup( CBasePlayer *pPhysGunUser, PhysGunPickup_t reason );
void OnPhysGunDrop( CBasePlayer *pPhysGunUser, PhysGunDrop_t reason );
bool GetPropDataAngles( const char *pKeyName, QAngle &vecAngles );
float GetCarryDistanceOffset( void );
int ObjectCaps();
void Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value );
void GetMassCenter( Vector *pMassCenter );
float GetMass() const;
void ClearFlagsThink( void );
virtual int OnTakeDamage( const CTakeDamageInfo &info );
int DrawDebugTextOverlays(void);
bool IsGib();
DECLARE_DATADESC();
// Specific interactions
void HandleAnyCollisionInteractions( int index, gamevcollisionevent_t *pEvent );
string_t GetPhysOverrideScript( void ) { return m_iszOverrideScript; }
float GetMassScale( void ) { return m_massScale; }
private:
// Compute impulse to apply to the enabled entity.
void ComputeEnablingImpulse( int index, gamevcollisionevent_t *pEvent );
COutputEvent m_MotionEnabled;
COutputEvent m_OnAwakened;
COutputEvent m_OnPhysGunPickup;
COutputEvent m_OnPhysGunPunt;
COutputEvent m_OnPhysGunOnlyPickup;
COutputEvent m_OnPhysGunDrop;
COutputEvent m_OnPlayerUse;
COutputEvent m_OnPlayerPickup;
COutputEvent m_OnOutOfWorld;
float m_massScale;
float m_inertiaScale;
int m_damageType;
string_t m_iszOverrideScript;
int m_damageToEnableMotion;
float m_flForceToEnableMotion;
bool m_bThrownByPlayer;
bool m_bFirstCollisionAfterLaunch;
protected:
CNetworkVar( bool, m_bAwake );
};
BEGIN_DATADESC( CPhysicsProp )
DEFINE_INPUTFUNC( FIELD_VOID, "EnableMotion", InputEnableMotion ),
DEFINE_INPUTFUNC( FIELD_VOID, "DisableMotion", InputDisableMotion ),
DEFINE_INPUTFUNC( FIELD_VOID, "Wake", InputWake ),
DEFINE_INPUTFUNC( FIELD_VOID, "Sleep", InputSleep ),
DEFINE_INPUTFUNC( FIELD_VOID, "DisableFloating", InputDisableFloating ),
DEFINE_FIELD( m_bAwake, FIELD_BOOLEAN ),
DEFINE_KEYFIELD( m_massScale, FIELD_FLOAT, "massscale" ),
DEFINE_KEYFIELD( m_inertiaScale, FIELD_FLOAT, "inertiascale" ),
DEFINE_KEYFIELD( m_damageType, FIELD_INTEGER, "Damagetype" ),
DEFINE_KEYFIELD( m_iszOverrideScript, FIELD_STRING, "overridescript" ),
DEFINE_KEYFIELD( m_damageToEnableMotion, FIELD_INTEGER, "damagetoenablemotion" ),
DEFINE_KEYFIELD( m_flForceToEnableMotion, FIELD_FLOAT, "forcetoenablemotion" ),
DEFINE_OUTPUT( m_OnAwakened, "OnAwakened" ),
DEFINE_OUTPUT( m_MotionEnabled, "OnMotionEnabled" ),
DEFINE_OUTPUT( m_OnPhysGunPickup, "OnPhysGunPickup" ),
DEFINE_OUTPUT( m_OnPhysGunOnlyPickup, "OnPhysGunOnlyPickup" ),
DEFINE_OUTPUT( m_OnPhysGunPunt, "OnPhysGunPunt" ),
DEFINE_OUTPUT( m_OnPhysGunDrop, "OnPhysGunDrop" ),
DEFINE_OUTPUT( m_OnPlayerUse, "OnPlayerUse" ),
DEFINE_OUTPUT( m_OnPlayerPickup, "OnPlayerPickup" ),
DEFINE_OUTPUT( m_OnOutOfWorld, "OnOutOfWorld" ),
DEFINE_FIELD( m_bThrownByPlayer, FIELD_BOOLEAN ),
DEFINE_FIELD( m_bFirstCollisionAfterLaunch, FIELD_BOOLEAN ),
DEFINE_THINKFUNC( ClearFlagsThink ),
END_DATADESC()
IMPLEMENT_SERVERCLASS_ST( CPhysicsProp, DT_PhysicsProp )
SendPropBool( SENDINFO( m_bAwake ) ),
END_SEND_TABLE()
class C_PhysicsProp : public C_BreakableProp
{
typedef C_BreakableProp BaseClass;
public:
DECLARE_CLIENTCLASS();
C_PhysicsProp();
~C_PhysicsProp();
virtual bool OnInternalDrawModel( ClientModelRenderInfo_t *pInfo );
protected:
// Networked vars.
bool m_bAwake;
bool m_bAwakeLastTime;
};
IMPLEMENT_CLIENTCLASS_DT(C_PhysicsProp, DT_PhysicsProp, CPhysicsProp)
RecvPropBool( RECVINFO( m_bAwake ) ),
END_RECV_TABLE()