mirror of
https://github.com/celisej567/source-engine.git
synced 2026-01-05 22:09:59 +03:00
1
This commit is contained in:
237
game/server/physobj.h
Normal file
237
game/server/physobj.h
Normal file
@@ -0,0 +1,237 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
|
||||
#ifndef PHYSOBJ_H
|
||||
#define PHYSOBJ_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#ifndef PHYSICS_H
|
||||
#include "physics.h"
|
||||
#endif
|
||||
|
||||
#include "entityoutput.h"
|
||||
#include "func_break.h"
|
||||
#include "player_pickup.h"
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
//
|
||||
// CPhysBox -- physically simulated brush rectangular solid
|
||||
//
|
||||
// ---------------------------------------------------------------------
|
||||
// Physbox Spawnflags. Start at 0x01000 to avoid collision with CBreakable's
|
||||
#define SF_PHYSBOX_ASLEEP 0x01000
|
||||
#define SF_PHYSBOX_IGNOREUSE 0x02000
|
||||
#define SF_PHYSBOX_DEBRIS 0x04000
|
||||
#define SF_PHYSBOX_MOTIONDISABLED 0x08000
|
||||
#define SF_PHYSBOX_USEPREFERRED 0x10000
|
||||
#define SF_PHYSBOX_ENABLE_ON_PHYSCANNON 0x20000
|
||||
#define SF_PHYSBOX_NO_ROTORWASH_PUSH 0x40000 // The rotorwash doesn't push these
|
||||
#define SF_PHYSBOX_ENABLE_PICKUP_OUTPUT 0x80000
|
||||
#define SF_PHYSBOX_ALWAYS_PICK_UP 0x100000 // Physcannon can always pick this up, no matter what mass or constraints may apply.
|
||||
#define SF_PHYSBOX_NEVER_PICK_UP 0x200000 // Physcannon will never be able to pick this up.
|
||||
#define SF_PHYSBOX_NEVER_PUNT 0x400000 // Physcannon will never be able to punt this object.
|
||||
#define SF_PHYSBOX_PREVENT_PLAYER_TOUCH_ENABLE 0x800000 // If set, the player will not cause the object to enable its motion when bumped into
|
||||
|
||||
// UNDONE: Hook collisions into the physics system to generate touch functions and take damage on falls
|
||||
// UNDONE: Base class PhysBrush
|
||||
class CPhysBox : public CBreakable
|
||||
{
|
||||
DECLARE_CLASS( CPhysBox, CBreakable );
|
||||
|
||||
public:
|
||||
DECLARE_SERVERCLASS();
|
||||
|
||||
void Spawn ( void );
|
||||
bool CreateVPhysics();
|
||||
void Move( const Vector &force );
|
||||
virtual int ObjectCaps();
|
||||
virtual void Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value );
|
||||
|
||||
virtual int DrawDebugTextOverlays(void);
|
||||
|
||||
virtual void VPhysicsUpdate( IPhysicsObject *pPhysics );
|
||||
virtual void VPhysicsCollision( int index, gamevcollisionevent_t *pEvent );
|
||||
int OnTakeDamage( const CTakeDamageInfo &info );
|
||||
void EnableMotion( void );
|
||||
|
||||
bool CanBePickedUpByPhyscannon();
|
||||
|
||||
// IPlayerPickupVPhysics
|
||||
virtual void OnPhysGunPickup( CBasePlayer *pPhysGunUser, PhysGunPickup_t reason );
|
||||
virtual void OnPhysGunDrop( CBasePlayer *pPhysGunUser, PhysGunDrop_t Reason );
|
||||
|
||||
bool HasPreferredCarryAnglesForPlayer( CBasePlayer *pPlayer );
|
||||
virtual QAngle PreferredCarryAngles( void ) { return m_angPreferredCarryAngles; }
|
||||
|
||||
// inputs
|
||||
void InputWake( inputdata_t &inputdata );
|
||||
void InputSleep( inputdata_t &inputdata );
|
||||
void InputEnableMotion( inputdata_t &inputdata );
|
||||
void InputDisableMotion( inputdata_t &inputdata );
|
||||
void InputForceDrop( inputdata_t &inputdata );
|
||||
void InputDisableFloating( inputdata_t &inputdata );
|
||||
|
||||
DECLARE_DATADESC();
|
||||
|
||||
protected:
|
||||
int m_damageType;
|
||||
float m_massScale;
|
||||
string_t m_iszOverrideScript;
|
||||
int m_damageToEnableMotion;
|
||||
float m_flForceToEnableMotion;
|
||||
QAngle m_angPreferredCarryAngles;
|
||||
bool m_bNotSolidToWorld;
|
||||
|
||||
// Outputs
|
||||
COutputEvent m_OnDamaged;
|
||||
COutputEvent m_OnAwakened;
|
||||
COutputEvent m_OnMotionEnabled;
|
||||
COutputEvent m_OnPhysGunPickup;
|
||||
COutputEvent m_OnPhysGunPunt;
|
||||
COutputEvent m_OnPhysGunOnlyPickup;
|
||||
COutputEvent m_OnPhysGunDrop;
|
||||
COutputEvent m_OnPlayerUse;
|
||||
|
||||
CHandle<CBasePlayer> m_hCarryingPlayer; // Player who's carrying us
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
//
|
||||
// CPhysExplosion -- physically simulated explosion
|
||||
//
|
||||
// ---------------------------------------------------------------------
|
||||
class CPhysExplosion : public CPointEntity
|
||||
{
|
||||
public:
|
||||
DECLARE_CLASS( CPhysExplosion, CPointEntity );
|
||||
|
||||
void Spawn ( void );
|
||||
void Explode( CBaseEntity *pActivator, CBaseEntity *pCaller );
|
||||
|
||||
CBaseEntity *FindEntity( CBaseEntity *pEntity, CBaseEntity *pActivator, CBaseEntity *pCaller );
|
||||
|
||||
int DrawDebugTextOverlays(void);
|
||||
|
||||
// Input handlers
|
||||
void InputExplode( inputdata_t &inputdata );
|
||||
|
||||
DECLARE_DATADESC();
|
||||
private:
|
||||
|
||||
float GetRadius( void );
|
||||
|
||||
float m_damage;
|
||||
float m_radius;
|
||||
string_t m_targetEntityName;
|
||||
float m_flInnerRadius;
|
||||
|
||||
COutputEvent m_OnPushedPlayer;
|
||||
};
|
||||
|
||||
|
||||
//==================================================
|
||||
// CPhysImpact
|
||||
//==================================================
|
||||
|
||||
class CPhysImpact : public CPointEntity
|
||||
{
|
||||
public:
|
||||
DECLARE_CLASS( CPhysImpact, CPointEntity );
|
||||
|
||||
void Spawn( void );
|
||||
//void Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value );
|
||||
void Activate( void );
|
||||
|
||||
void InputImpact( inputdata_t &inputdata );
|
||||
|
||||
DECLARE_DATADESC();
|
||||
|
||||
private:
|
||||
|
||||
void PointAtEntity( void );
|
||||
|
||||
float m_damage;
|
||||
float m_distance;
|
||||
string_t m_directionEntityName;
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: A magnet that creates constraints between itself and anything it touches
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
struct magnetted_objects_t
|
||||
{
|
||||
IPhysicsConstraint *pConstraint;
|
||||
EHANDLE hEntity;
|
||||
|
||||
DECLARE_SIMPLE_DATADESC();
|
||||
};
|
||||
|
||||
class CPhysMagnet : public CBaseAnimating, public IPhysicsConstraintEvent
|
||||
{
|
||||
DECLARE_CLASS( CPhysMagnet, CBaseAnimating );
|
||||
public:
|
||||
DECLARE_DATADESC();
|
||||
DECLARE_SERVERCLASS();
|
||||
|
||||
CPhysMagnet();
|
||||
~CPhysMagnet();
|
||||
|
||||
void Spawn( void );
|
||||
void Precache( void );
|
||||
void Touch( CBaseEntity *pOther );
|
||||
void VPhysicsCollision( int index, gamevcollisionevent_t *pEvent );
|
||||
void DoMagnetSuck( CBaseEntity *pOther );
|
||||
void SetConstraintGroup( IPhysicsConstraintGroup *pGroup );
|
||||
|
||||
bool IsOn( void ) { return m_bActive; }
|
||||
int GetNumAttachedObjects( void );
|
||||
float GetTotalMassAttachedObjects( void );
|
||||
CBaseEntity *GetAttachedObject( int iIndex );
|
||||
|
||||
// Checking for hitting something
|
||||
void ResetHasHitSomething( void ) { m_bHasHitSomething = false; }
|
||||
bool HasHitSomething( void ) { return m_bHasHitSomething; }
|
||||
|
||||
// Inputs
|
||||
void InputToggle( inputdata_t &inputdata );
|
||||
void InputTurnOn( inputdata_t &inputdata );
|
||||
void InputTurnOff( inputdata_t &inputdata );
|
||||
|
||||
void InputConstraintBroken( inputdata_t &inputdata );
|
||||
|
||||
void DetachAll( void );
|
||||
|
||||
// IPhysicsConstraintEvent
|
||||
public:
|
||||
void ConstraintBroken( IPhysicsConstraint *pConstraint );
|
||||
|
||||
protected:
|
||||
// Outputs
|
||||
COutputEvent m_OnMagnetAttach;
|
||||
COutputEvent m_OnMagnetDetach;
|
||||
|
||||
// Keys
|
||||
float m_massScale;
|
||||
string_t m_iszOverrideScript;
|
||||
float m_forceLimit;
|
||||
float m_torqueLimit;
|
||||
|
||||
CUtlVector< magnetted_objects_t > m_MagnettedEntities;
|
||||
IPhysicsConstraintGroup *m_pConstraintGroup;
|
||||
|
||||
bool m_bActive;
|
||||
bool m_bHasHitSomething;
|
||||
float m_flTotalMass;
|
||||
float m_flRadius;
|
||||
float m_flNextSuckTime;
|
||||
int m_iMaxObjectsAttached;
|
||||
};
|
||||
|
||||
#endif // PHYSOBJ_H
|
||||
Reference in New Issue
Block a user