81 lines
1.6 KiB
C++
81 lines
1.6 KiB
C++
#ifndef PHYSICS_H
|
|
#define PHYSICS_H
|
|
|
|
#include "tier0/platform.h"
|
|
#include "trig.h"
|
|
|
|
#ifndef PHYSICS_OBJECT_DEFINED
|
|
struct BallShape_t
|
|
{
|
|
float m_fRadius;
|
|
};
|
|
|
|
struct CuboidShape_t
|
|
{
|
|
float m_fExtentX;
|
|
float m_fExtentY;
|
|
float m_fExtentZ;
|
|
};
|
|
|
|
struct TrianglesShape_t
|
|
{
|
|
float *m_pfPositions;
|
|
uint32_t m_nPositionCount;
|
|
uint32_t *m_puIndicies;
|
|
uint32_t m_nIndiciesCount;
|
|
};
|
|
|
|
enum EPhysicsBodyType
|
|
{
|
|
k_EPhysics_Static,
|
|
k_EPhysics_Dynamic,
|
|
k_EPhysics_KinematicPositionBased,
|
|
k_EPhysics_KinematicVelocityBased,
|
|
};
|
|
#endif
|
|
|
|
typedef void *HShape;
|
|
typedef void *HCollider;
|
|
|
|
|
|
abstract_class IPhysicsBody
|
|
{
|
|
public:
|
|
virtual void SetPosition( Vector vPosition ) = 0;
|
|
virtual void SetRotation( Quat vRotation ) = 0;
|
|
virtual Vector GetPosition() = 0;
|
|
virtual Quat GetRotation() = 0;
|
|
virtual void SetGravityScale( float fScale ) = 0;
|
|
};
|
|
|
|
abstract_class IPhysicsWorld
|
|
{
|
|
public:
|
|
virtual void Frame( float fDelta ) = 0;
|
|
|
|
virtual IPhysicsBody *CreateRigidBody( HCollider hCollider, EPhysicsBodyType eType ) = 0;
|
|
virtual void DestroyPhysicsBody( IPhysicsBody *pBody ) = 0;
|
|
|
|
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 HShape CreateTriangles( TrianglesShape_t shape ) = 0;
|
|
virtual void DestroyShape( HShape hShape ) = 0;
|
|
|
|
virtual HCollider CreateCollider( HShape hShape ) = 0;
|
|
|
|
virtual IPhysicsWorld *CreateWorld() = 0;
|
|
virtual void DestroyWorld( IPhysicsWorld *pWorld ) = 0;
|
|
};
|
|
|
|
#define PHYSICS_INTERFACE_VERSION "Physics001"
|
|
|
|
#endif
|