summaryrefslogtreecommitdiff
path: root/vphysics/physics_environment.h
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /vphysics/physics_environment.h
downloadarchived-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.h176
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 &params, 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 &params );
+ void PreRestore( const physprerestoreparams_t &params );
+ bool Restore( const physrestoreparams_t &params );
+ 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