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 /vphysics/physics_environment.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'vphysics/physics_environment.h')
| -rw-r--r-- | vphysics/physics_environment.h | 176 |
1 files changed, 176 insertions, 0 deletions
diff --git a/vphysics/physics_environment.h b/vphysics/physics_environment.h new file mode 100644 index 0000000..075b91c --- /dev/null +++ b/vphysics/physics_environment.h @@ -0,0 +1,176 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#ifndef PHYSICS_WORLD_H +#define PHYSICS_WORLD_H +#pragma once + +#include "vphysics_interface.h" +#include "ivu_types.hxx" +#include "utlvector.h" + +class IVP_Environment; +class CSleepObjects; +class CPhysicsListenerCollision; +class CPhysicsListenerConstraint; +class IVP_Listener_Collision; +class IVP_Listener_Constraint; +class IVP_Listener_Object; +class IVP_Controller; +class CPhysicsFluidController; +class CCollisionSolver; +class CPhysicsObject; +class CDeleteQueue; +class IVPhysicsDebugOverlay; +struct constraint_limitedhingeparams_t; +struct vphysics_save_iphysicsobject_t; + +class CPhysicsEnvironment : public IPhysicsEnvironment +{ +public: + CPhysicsEnvironment( void ); + ~CPhysicsEnvironment( void ); + + virtual void SetDebugOverlay( CreateInterfaceFn debugOverlayFactory ); + virtual IVPhysicsDebugOverlay *GetDebugOverlay( void ); + + void SetGravity( const Vector& gravityVector ); + IPhysicsObject *CreatePolyObject( const CPhysCollide *pCollisionModel, int materialIndex, const Vector& position, const QAngle& angles, objectparams_t *pParams ); + IPhysicsObject *CreatePolyObjectStatic( const CPhysCollide *pCollisionModel, int materialIndex, const Vector& position, const QAngle& angles, objectparams_t *pParams ); + virtual unsigned int GetObjectSerializeSize( IPhysicsObject *pObject ) const; + virtual void SerializeObjectToBuffer( IPhysicsObject *pObject, unsigned char *pBuffer, unsigned int bufferSize ); + virtual IPhysicsObject *UnserializeObjectFromBuffer( void *pGameData, unsigned char *pBuffer, unsigned int bufferSize, bool enableCollisions ); + + + + IPhysicsSpring *CreateSpring( IPhysicsObject *pObjectStart, IPhysicsObject *pObjectEnd, springparams_t *pParams ); + IPhysicsFluidController *CreateFluidController( IPhysicsObject *pFluidObject, fluidparams_t *pParams ); + IPhysicsConstraint *CreateRagdollConstraint( IPhysicsObject *pReferenceObject, IPhysicsObject *pAttachedObject, IPhysicsConstraintGroup *pGroup, const constraint_ragdollparams_t &ragdoll ); + + virtual IPhysicsConstraint *CreateHingeConstraint( IPhysicsObject *pReferenceObject, IPhysicsObject *pAttachedObject, IPhysicsConstraintGroup *pGroup, const constraint_hingeparams_t &hinge ); + virtual IPhysicsConstraint *CreateLimitedHingeConstraint( IPhysicsObject *pReferenceObject, IPhysicsObject *pAttachedObject, IPhysicsConstraintGroup *pGroup, const constraint_limitedhingeparams_t &hinge ); + virtual IPhysicsConstraint *CreateFixedConstraint( IPhysicsObject *pReferenceObject, IPhysicsObject *pAttachedObject, IPhysicsConstraintGroup *pGroup, const constraint_fixedparams_t &fixed ); + virtual IPhysicsConstraint *CreateSlidingConstraint( IPhysicsObject *pReferenceObject, IPhysicsObject *pAttachedObject, IPhysicsConstraintGroup *pGroup, const constraint_slidingparams_t &sliding ); + virtual IPhysicsConstraint *CreateBallsocketConstraint( IPhysicsObject *pReferenceObject, IPhysicsObject *pAttachedObject, IPhysicsConstraintGroup *pGroup, const constraint_ballsocketparams_t &ballsocket ); + virtual IPhysicsConstraint *CreatePulleyConstraint( IPhysicsObject *pReferenceObject, IPhysicsObject *pAttachedObject, IPhysicsConstraintGroup *pGroup, const constraint_pulleyparams_t &pulley ); + virtual IPhysicsConstraint *CreateLengthConstraint( IPhysicsObject *pReferenceObject, IPhysicsObject *pAttachedObject, IPhysicsConstraintGroup *pGroup, const constraint_lengthparams_t &length ); + + virtual IPhysicsConstraintGroup *CreateConstraintGroup( const constraint_groupparams_t &group ); + virtual void DestroyConstraintGroup( IPhysicsConstraintGroup *pGroup ); + + void Simulate( float deltaTime ); + float GetSimulationTimestep() const; + void SetSimulationTimestep( float timestep ); + float GetSimulationTime() const; + float GetNextFrameTime() const; + bool IsInSimulation() const; + + virtual void DestroyObject( IPhysicsObject * ); + virtual void DestroySpring( IPhysicsSpring * ); + virtual void DestroyFluidController( IPhysicsFluidController * ); + virtual void DestroyConstraint( IPhysicsConstraint * ); + + virtual void SetCollisionEventHandler( IPhysicsCollisionEvent *pCollisionEvents ); + virtual void SetObjectEventHandler( IPhysicsObjectEvent *pObjectEvents ); + virtual void SetConstraintEventHandler( IPhysicsConstraintEvent *pConstraintEvents ); + + virtual IPhysicsShadowController *CreateShadowController( IPhysicsObject *pObject, bool allowTranslation, bool allowRotation ); + virtual void DestroyShadowController( IPhysicsShadowController * ); + virtual IPhysicsMotionController *CreateMotionController( IMotionEvent *pHandler ); + virtual void DestroyMotionController( IPhysicsMotionController *pController ); + virtual IPhysicsPlayerController *CreatePlayerController( IPhysicsObject *pObject ); + virtual void DestroyPlayerController( IPhysicsPlayerController *pController ); + virtual IPhysicsVehicleController *CreateVehicleController( IPhysicsObject *pVehicleBodyObject, const vehicleparams_t ¶ms, unsigned int nVehicleType, IPhysicsGameTrace *pGameTrace ); + virtual void DestroyVehicleController( IPhysicsVehicleController *pController ); + + virtual void SetQuickDelete( bool bQuick ) + { + m_deleteQuick = bQuick; + } + virtual bool ShouldQuickDelete() const { return m_deleteQuick; } + virtual void TraceBox( trace_t *ptr, const Vector &mins, const Vector &maxs, const Vector &start, const Vector &end ); + virtual void SetCollisionSolver( IPhysicsCollisionSolver *pCollisionSolver ); + virtual void GetGravity( Vector *pGravityVector ) const; + virtual int GetActiveObjectCount() const; + virtual void GetActiveObjects( IPhysicsObject **pOutputObjectList ) const; + virtual const IPhysicsObject **GetObjectList( int *pOutputObjectCount ) const; + virtual bool TransferObject( IPhysicsObject *pObject, IPhysicsEnvironment *pDestinationEnvironment ); + + IVP_Environment *GetIVPEnvironment( void ) { return m_pPhysEnv; } + void ClearDeadObjects( void ); + IVP_Controller *GetDragController() { return m_pDragController; } + const IVP_Controller *GetDragController() const { return m_pDragController; } + virtual void SetAirDensity( float density ); + virtual float GetAirDensity( void ) const; + virtual void ResetSimulationClock( void ); + virtual IPhysicsObject *CreateSphereObject( float radius, int materialIndex, const Vector &position, const QAngle &angles, objectparams_t *pParams, bool isStatic ); + virtual void CleanupDeleteList(); + virtual void EnableDeleteQueue( bool enable ) { m_queueDeleteObject = enable; } + // debug + virtual bool IsCollisionModelUsed( CPhysCollide *pCollide ) const; + + // trace against the physics world + virtual void TraceRay( const Ray_t &ray, unsigned int fMask, IPhysicsTraceFilter *pTraceFilter, trace_t *pTrace ); + virtual void SweepCollideable( const CPhysCollide *pCollide, const Vector &vecAbsStart, const Vector &vecAbsEnd, + const QAngle &vecAngles, unsigned int fMask, IPhysicsTraceFilter *pTraceFilter, trace_t *pTrace ); + + // performance tuning + virtual void GetPerformanceSettings( physics_performanceparams_t *pOutput ) const; + virtual void SetPerformanceSettings( const physics_performanceparams_t *pSettings ); + + // perf/cost statistics + virtual void ReadStats( physics_stats_t *pOutput ); + virtual void ClearStats(); + virtual void EnableConstraintNotify( bool bEnable ); + // debug + virtual void DebugCheckContacts(void); + + // Save/restore + bool Save( const physsaveparams_t ¶ms ); + void PreRestore( const physprerestoreparams_t ¶ms ); + bool Restore( const physrestoreparams_t ¶ms ); + void PostRestore(); + void PhantomAdd( CPhysicsObject *pObject ); + void PhantomRemove( CPhysicsObject *pObject ); + + void AddPlayerController( IPhysicsPlayerController *pController ); + void RemovePlayerController( IPhysicsPlayerController *pController ); + IPhysicsPlayerController *FindPlayerController( IPhysicsObject *pObject ); + + IPhysicsCollisionEvent *GetCollisionEventHandler(); + // a constraint is being disabled - report the game DLL as "broken" + void NotifyConstraintDisabled( IPhysicsConstraint *pConstraint ); + +private: + IVP_Environment *m_pPhysEnv; + IVP_Controller *m_pDragController; + IVPhysicsDebugOverlay *m_pDebugOverlay; // Interface to use for drawing debug overlays. + CUtlVector<IPhysicsObject *> m_objects; + CUtlVector<IPhysicsObject *> m_deadObjects; + CUtlVector<CPhysicsFluidController *> m_fluids; + CUtlVector<IPhysicsPlayerController *> m_playerControllers; + CSleepObjects *m_pSleepEvents; + CPhysicsListenerCollision *m_pCollisionListener; + CCollisionSolver *m_pCollisionSolver; + CPhysicsListenerConstraint *m_pConstraintListener; + CDeleteQueue *m_pDeleteQueue; + int m_lastObjectThisTick; + bool m_deleteQuick; + bool m_inSimulation; + bool m_queueDeleteObject; + bool m_fixedTimestep; + bool m_enableConstraintNotify; +}; + +extern IPhysicsEnvironment *CreatePhysicsEnvironment( void ); + +class IVP_Synapse_Friction; +class IVP_Real_Object; +extern IVP_Real_Object *GetOppositeSynapseObject( IVP_Synapse_Friction *pfriction ); +extern IPhysicsObjectPairHash *CreateObjectPairHash(); + +#endif // PHYSICS_WORLD_H |