#ifndef PHYSICS_H #define PHYSICS_H #include "tier0/platform.h" #include "trig.h" struct BallShape_t { float m_fRadius; }; struct CuboidShape_t { float m_fExtentX; float m_fExtentY; float m_fExtentZ; }; typedef void *HShape; typedef void *HCollider; enum EPhysicsBodyType { k_EPhysics_Static, k_EPhysics_Dynamic, k_EPhysics_KinematicPositionBased, k_EPhysics_KinematicRotationBased, }; abstract_class IPhysicsBody { public: virtual void SetPosition( Vector vPosition ) = 0; virtual void SetRotation( Quat vRotation ) = 0; virtual void SetGravityScale( float fScale ) = 0; }; abstract_class IPhysicsWorld { public: virtual void SetGravity( float fGravity ) = 0; }; abstract_class IPhysics { public: virtual HShape CreateBall( BallShape_t ball ) = 0; virtual HShape CreateCube( CuboidShape_t ball ) = 0; virtual void DestroyShape( HShape hShape ) = 0; virtual HCollider CreateCollider( HShape hShape ) = 0; virtual IPhysicsWorld *CreateWorld() = 0; virtual void DestroyWorld( IPhysicsWorld *pWorld ) = 0; virtual IPhysicsBody *CreateRigidBody( HCollider hCollider, EPhysicsBodyType eType) = 0; virtual void DestroyPhysicsBody( IPhysicsBody *pBody ) = 0; }; #endif