diff options
| author | Jørgen P. Tjernø <[email protected]> | 2013-12-02 19:31:46 -0800 |
|---|---|---|
| committer | Jørgen P. Tjernø <[email protected]> | 2013-12-02 19:46:31 -0800 |
| commit | f56bb35301836e56582a575a75864392a0177875 (patch) | |
| tree | de61ddd39de3e7df52759711950b4c288592f0dc /mp/src/game/server/physics.h | |
| parent | Mark some more files as text. (diff) | |
| download | source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.tar.xz source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.zip | |
Fix line endings. WHAMMY.
Diffstat (limited to 'mp/src/game/server/physics.h')
| -rw-r--r-- | mp/src/game/server/physics.h | 378 |
1 files changed, 189 insertions, 189 deletions
diff --git a/mp/src/game/server/physics.h b/mp/src/game/server/physics.h index 7e85d477..541a1654 100644 --- a/mp/src/game/server/physics.h +++ b/mp/src/game/server/physics.h @@ -1,189 +1,189 @@ -//========= Copyright Valve Corporation, All rights reserved. ============//
-//
-// Purpose: This is the abstraction layer for the physics simulation system
-// Any calls to the external physics library (ipion) should be made through this
-// layer. Eventually, the physics system will probably become a DLL and made
-// accessible to the client & server side code.
-//
-// $Workfile: $
-// $Date: $
-// $NoKeywords: $
-//=============================================================================//
-
-#ifndef PHYSICS_H
-#define PHYSICS_H
-
-#ifdef _WIN32
-#pragma once
-#endif
-
-#include "physics_shared.h"
-
-class CBaseEntity;
-class IPhysicsMaterial;
-class IPhysicsConstraint;
-class IPhysicsSpring;
-class IPhysicsSurfaceProps;
-class CTakeDamageInfo;
-class ConVar;
-
-extern IPhysicsMaterial *g_Material;
-extern ConVar phys_pushscale;
-extern ConVar phys_timescale;
-
-struct objectparams_t;
-extern IPhysicsGameTrace *physgametrace;
-
-class IPhysicsCollisionSolver;
-class IPhysicsCollisionEvent;
-class IPhysicsObjectEvent;
-extern IPhysicsCollisionSolver * const g_pCollisionSolver;
-extern IPhysicsCollisionEvent * const g_pCollisionEventHandler;
-extern IPhysicsObjectEvent * const g_pObjectEventHandler;
-
-// HACKHACK: We treat anything >= 500kg as a special "large mass" that does more impact damage
-// and has special recovery on crushing/killing other objects
-// also causes screen shakes on impact with static/world objects
-const float VPHYSICS_LARGE_OBJECT_MASS = 500.0f;
-
-struct gamevcollisionevent_t : public vcollisionevent_t
-{
- Vector preVelocity[2];
- Vector postVelocity[2];
- AngularImpulse preAngularVelocity[2];
- CBaseEntity *pEntities[2];
-
- void Init( vcollisionevent_t *pEvent )
- {
- *((vcollisionevent_t *)this) = *pEvent;
- pEntities[0] = NULL;
- pEntities[1] = NULL;
- }
-};
-
-struct triggerevent_t
-{
- CBaseEntity *pTriggerEntity;
- IPhysicsObject *pTriggerPhysics;
- CBaseEntity *pEntity;
- IPhysicsObject *pObject;
- bool bStart;
-
- inline void Init( CBaseEntity *triggerEntity, IPhysicsObject *triggerPhysics, CBaseEntity *entity, IPhysicsObject *object, bool startTouch )
- {
- pTriggerEntity = triggerEntity;
- pTriggerPhysics= triggerPhysics;
- pEntity = entity;
- pObject = object;
- bStart = startTouch;
- }
- inline void Clear()
- {
- memset( this, 0, sizeof(*this) );
- }
-};
-
-// parse solid parameter overrides out of a string
-void PhysSolidOverride( solid_t &solid, string_t overrideScript );
-
-extern CEntityList *g_pShadowEntities;
-#ifdef PORTAL
-extern CEntityList *g_pShadowEntities_Main;
-#endif
-void PhysAddShadow( CBaseEntity *pEntity );
-void PhysRemoveShadow( CBaseEntity *pEntity );
-bool PhysHasShadow( CBaseEntity *pEntity );
-
-void PhysEnableFloating( IPhysicsObject *pObject, bool bEnable );
-
-void PhysCollisionSound( CBaseEntity *pEntity, IPhysicsObject *pPhysObject, int channel, int surfaceProps, int surfacePropsHit, float deltaTime, float speed );
-void PhysCollisionScreenShake( gamevcollisionevent_t *pEvent, int index );
-void PhysCollisionDust( gamevcollisionevent_t *pEvent, surfacedata_t *phit );
-#if HL2_EPISODIC
-void PhysCollisionWarpEffect( gamevcollisionevent_t *pEvent, surfacedata_t *phit );
-#endif
-void PhysBreakSound( CBaseEntity *pEntity, IPhysicsObject *pPhysObject, Vector vecOrigin );
-
-// plays the impact sound for a particular material
-void PhysicsImpactSound( CBaseEntity *pEntity, IPhysicsObject *pPhysObject, int channel, int surfaceProps, int surfacePropsHit, float volume, float impactSpeed );
-
-void PhysCallbackDamage( CBaseEntity *pEntity, const CTakeDamageInfo &info );
-void PhysCallbackDamage( CBaseEntity *pEntity, const CTakeDamageInfo &info, gamevcollisionevent_t &event, int hurtIndex );
-
-// Applies force impulses at a later time
-void PhysCallbackImpulse( IPhysicsObject *pPhysicsObject, const Vector &vecCenterForce, const AngularImpulse &vecCenterTorque );
-
-// Sets the velocity at a later time
-void PhysCallbackSetVelocity( IPhysicsObject *pPhysicsObject, const Vector &vecVelocity );
-
-// queue up a delete on this object
-void PhysCallbackRemove(IServerNetworkable *pRemove);
-
-bool PhysGetDamageInflictorVelocityStartOfFrame( IPhysicsObject *pInflictor, Vector &velocity, AngularImpulse &angVelocity );
-
-// force a physics entity to sleep immediately
-void PhysForceEntityToSleep( CBaseEntity *pEntity, IPhysicsObject *pObject );
-
-// teleport an entity to it's position relative to an object it's constrained to
-void PhysTeleportConstrainedEntity( CBaseEntity *pTeleportSource, IPhysicsObject *pObject0, IPhysicsObject *pObject1, const Vector &prevPosition, const QAngle &prevAngles, bool physicsRotate );
-
-void PhysGetListOfPenetratingEntities( CBaseEntity *pSearch, CUtlVector<CBaseEntity *> &list );
-bool PhysShouldCollide( IPhysicsObject *pObj0, IPhysicsObject *pObj1 );
-
-// returns true when processing a callback - so we can defer things that can't be done inside a callback
-bool PhysIsInCallback();
-bool PhysIsFinalTick();
-
-bool PhysGetTriggerEvent( triggerevent_t *pEvent, CBaseEntity *pTrigger );
-// note: pErrorEntity is used to report errors (object not found, more than one found). It can be NULL
-IPhysicsObject *FindPhysicsObjectByName( const char *pName, CBaseEntity *pErrorEntity );
-bool PhysFindOrAddVehicleScript( const char *pScriptName, struct vehicleparams_t *pParams, struct vehiclesounds_t *pSounds );
-void PhysFlushVehicleScripts();
-
-// this is called to flush all queues when the delete list is cleared
-void PhysOnCleanupDeleteList();
-
-struct masscenteroverride_t
-{
- enum align_type
- {
- ALIGN_POINT = 0,
- ALIGN_AXIS = 1,
- };
-
- void Defaults()
- {
- entityName = NULL_STRING;
- }
-
- void SnapToPoint( string_t name, const Vector &pointWS )
- {
- entityName = name;
- center = pointWS;
- axis.Init();
- alignType = ALIGN_POINT;
- }
-
- void SnapToAxis( string_t name, const Vector &axisStartWS, const Vector &unitAxisDirWS )
- {
- entityName = name;
- center = axisStartWS;
- axis = unitAxisDirWS;
- alignType = ALIGN_AXIS;
- }
-
- Vector center;
- Vector axis;
- int alignType;
- string_t entityName;
-};
-
-void PhysSetMassCenterOverride( masscenteroverride_t &override );
-// NOTE: this removes the entry from the table as well as retrieving it
-void PhysGetMassCenterOverride( CBaseEntity *pEntity, vcollide_t *pCollide, solid_t &solidOut );
-float PhysGetEntityMass( CBaseEntity *pEntity );
-void PhysSetEntityGameFlags( CBaseEntity *pEntity, unsigned short flags );
-
-void DebugDrawContactPoints(IPhysicsObject *pPhysics);
-
-#endif // PHYSICS_H
+//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: This is the abstraction layer for the physics simulation system +// Any calls to the external physics library (ipion) should be made through this +// layer. Eventually, the physics system will probably become a DLL and made +// accessible to the client & server side code. +// +// $Workfile: $ +// $Date: $ +// $NoKeywords: $ +//=============================================================================// + +#ifndef PHYSICS_H +#define PHYSICS_H + +#ifdef _WIN32 +#pragma once +#endif + +#include "physics_shared.h" + +class CBaseEntity; +class IPhysicsMaterial; +class IPhysicsConstraint; +class IPhysicsSpring; +class IPhysicsSurfaceProps; +class CTakeDamageInfo; +class ConVar; + +extern IPhysicsMaterial *g_Material; +extern ConVar phys_pushscale; +extern ConVar phys_timescale; + +struct objectparams_t; +extern IPhysicsGameTrace *physgametrace; + +class IPhysicsCollisionSolver; +class IPhysicsCollisionEvent; +class IPhysicsObjectEvent; +extern IPhysicsCollisionSolver * const g_pCollisionSolver; +extern IPhysicsCollisionEvent * const g_pCollisionEventHandler; +extern IPhysicsObjectEvent * const g_pObjectEventHandler; + +// HACKHACK: We treat anything >= 500kg as a special "large mass" that does more impact damage +// and has special recovery on crushing/killing other objects +// also causes screen shakes on impact with static/world objects +const float VPHYSICS_LARGE_OBJECT_MASS = 500.0f; + +struct gamevcollisionevent_t : public vcollisionevent_t +{ + Vector preVelocity[2]; + Vector postVelocity[2]; + AngularImpulse preAngularVelocity[2]; + CBaseEntity *pEntities[2]; + + void Init( vcollisionevent_t *pEvent ) + { + *((vcollisionevent_t *)this) = *pEvent; + pEntities[0] = NULL; + pEntities[1] = NULL; + } +}; + +struct triggerevent_t +{ + CBaseEntity *pTriggerEntity; + IPhysicsObject *pTriggerPhysics; + CBaseEntity *pEntity; + IPhysicsObject *pObject; + bool bStart; + + inline void Init( CBaseEntity *triggerEntity, IPhysicsObject *triggerPhysics, CBaseEntity *entity, IPhysicsObject *object, bool startTouch ) + { + pTriggerEntity = triggerEntity; + pTriggerPhysics= triggerPhysics; + pEntity = entity; + pObject = object; + bStart = startTouch; + } + inline void Clear() + { + memset( this, 0, sizeof(*this) ); + } +}; + +// parse solid parameter overrides out of a string +void PhysSolidOverride( solid_t &solid, string_t overrideScript ); + +extern CEntityList *g_pShadowEntities; +#ifdef PORTAL +extern CEntityList *g_pShadowEntities_Main; +#endif +void PhysAddShadow( CBaseEntity *pEntity ); +void PhysRemoveShadow( CBaseEntity *pEntity ); +bool PhysHasShadow( CBaseEntity *pEntity ); + +void PhysEnableFloating( IPhysicsObject *pObject, bool bEnable ); + +void PhysCollisionSound( CBaseEntity *pEntity, IPhysicsObject *pPhysObject, int channel, int surfaceProps, int surfacePropsHit, float deltaTime, float speed ); +void PhysCollisionScreenShake( gamevcollisionevent_t *pEvent, int index ); +void PhysCollisionDust( gamevcollisionevent_t *pEvent, surfacedata_t *phit ); +#if HL2_EPISODIC +void PhysCollisionWarpEffect( gamevcollisionevent_t *pEvent, surfacedata_t *phit ); +#endif +void PhysBreakSound( CBaseEntity *pEntity, IPhysicsObject *pPhysObject, Vector vecOrigin ); + +// plays the impact sound for a particular material +void PhysicsImpactSound( CBaseEntity *pEntity, IPhysicsObject *pPhysObject, int channel, int surfaceProps, int surfacePropsHit, float volume, float impactSpeed ); + +void PhysCallbackDamage( CBaseEntity *pEntity, const CTakeDamageInfo &info ); +void PhysCallbackDamage( CBaseEntity *pEntity, const CTakeDamageInfo &info, gamevcollisionevent_t &event, int hurtIndex ); + +// Applies force impulses at a later time +void PhysCallbackImpulse( IPhysicsObject *pPhysicsObject, const Vector &vecCenterForce, const AngularImpulse &vecCenterTorque ); + +// Sets the velocity at a later time +void PhysCallbackSetVelocity( IPhysicsObject *pPhysicsObject, const Vector &vecVelocity ); + +// queue up a delete on this object +void PhysCallbackRemove(IServerNetworkable *pRemove); + +bool PhysGetDamageInflictorVelocityStartOfFrame( IPhysicsObject *pInflictor, Vector &velocity, AngularImpulse &angVelocity ); + +// force a physics entity to sleep immediately +void PhysForceEntityToSleep( CBaseEntity *pEntity, IPhysicsObject *pObject ); + +// teleport an entity to it's position relative to an object it's constrained to +void PhysTeleportConstrainedEntity( CBaseEntity *pTeleportSource, IPhysicsObject *pObject0, IPhysicsObject *pObject1, const Vector &prevPosition, const QAngle &prevAngles, bool physicsRotate ); + +void PhysGetListOfPenetratingEntities( CBaseEntity *pSearch, CUtlVector<CBaseEntity *> &list ); +bool PhysShouldCollide( IPhysicsObject *pObj0, IPhysicsObject *pObj1 ); + +// returns true when processing a callback - so we can defer things that can't be done inside a callback +bool PhysIsInCallback(); +bool PhysIsFinalTick(); + +bool PhysGetTriggerEvent( triggerevent_t *pEvent, CBaseEntity *pTrigger ); +// note: pErrorEntity is used to report errors (object not found, more than one found). It can be NULL +IPhysicsObject *FindPhysicsObjectByName( const char *pName, CBaseEntity *pErrorEntity ); +bool PhysFindOrAddVehicleScript( const char *pScriptName, struct vehicleparams_t *pParams, struct vehiclesounds_t *pSounds ); +void PhysFlushVehicleScripts(); + +// this is called to flush all queues when the delete list is cleared +void PhysOnCleanupDeleteList(); + +struct masscenteroverride_t +{ + enum align_type + { + ALIGN_POINT = 0, + ALIGN_AXIS = 1, + }; + + void Defaults() + { + entityName = NULL_STRING; + } + + void SnapToPoint( string_t name, const Vector &pointWS ) + { + entityName = name; + center = pointWS; + axis.Init(); + alignType = ALIGN_POINT; + } + + void SnapToAxis( string_t name, const Vector &axisStartWS, const Vector &unitAxisDirWS ) + { + entityName = name; + center = axisStartWS; + axis = unitAxisDirWS; + alignType = ALIGN_AXIS; + } + + Vector center; + Vector axis; + int alignType; + string_t entityName; +}; + +void PhysSetMassCenterOverride( masscenteroverride_t &override ); +// NOTE: this removes the entry from the table as well as retrieving it +void PhysGetMassCenterOverride( CBaseEntity *pEntity, vcollide_t *pCollide, solid_t &solidOut ); +float PhysGetEntityMass( CBaseEntity *pEntity ); +void PhysSetEntityGameFlags( CBaseEntity *pEntity, unsigned short flags ); + +void DebugDrawContactPoints(IPhysicsObject *pPhysics); + +#endif // PHYSICS_H |