|
|
@ -125,11 +125,72 @@ |
|
|
|
} Vector2; |
|
|
|
#endif |
|
|
|
|
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
// Data Types Structure Definition |
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
|
|
|
|
typedef enum PhysicsShapeType { PHYSICS_CIRCLE, PHYSICS_POLYGON } PhysicsShapeType; |
|
|
|
|
|
|
|
// Previously defined to be used in PhysicsShape struct as circular dependencies |
|
|
|
typedef struct PhysicsBodyData *PhysicsBody; |
|
|
|
|
|
|
|
// Matrix2x2 type (used for polygon shape rotation matrix) |
|
|
|
typedef struct Matrix2x2 { |
|
|
|
float m00; |
|
|
|
float m01; |
|
|
|
float m10; |
|
|
|
float m11; |
|
|
|
} Matrix2x2; |
|
|
|
|
|
|
|
typedef struct PolygonData { |
|
|
|
unsigned int vertexCount; // Current used vertex and normals count |
|
|
|
Vector2 positions[PHYSAC_MAX_VERTICES]; // Polygon vertex positions vectors |
|
|
|
Vector2 normals[PHYSAC_MAX_VERTICES]; // Polygon vertex normals vectors |
|
|
|
} PolygonData; |
|
|
|
|
|
|
|
typedef struct PhysicsShape { |
|
|
|
PhysicsShapeType type; // Physics shape type (circle or polygon) |
|
|
|
PhysicsBody body; // Shape physics body reference |
|
|
|
float radius; // Circle shape radius (used for circle shapes) |
|
|
|
Matrix2x2 transform; // Vertices transform matrix 2x2 |
|
|
|
PolygonData vertexData; // Polygon shape vertices position and normals data (just used for polygon shapes) |
|
|
|
} PhysicsShape; |
|
|
|
|
|
|
|
typedef struct PhysicsBodyData { |
|
|
|
unsigned int id; // Reference unique identifier |
|
|
|
bool enabled; // Enabled dynamics state (collisions are calculated anyway) |
|
|
|
Vector2 position; // Physics body shape pivot |
|
|
|
Vector2 velocity; // Current linear velocity applied to position |
|
|
|
Vector2 force; // Current linear force (reset to 0 every step) |
|
|
|
float angularVelocity; // Current angular velocity applied to orient |
|
|
|
float torque; // Current angular force (reset to 0 every step) |
|
|
|
float orient; // Rotation in radians |
|
|
|
float inertia; // Moment of inertia |
|
|
|
float inverseInertia; // Inverse value of inertia |
|
|
|
float mass; // Physics body mass |
|
|
|
float inverseMass; // Inverse value of mass |
|
|
|
float staticFriction; // Friction when the body has not movement (0 to 1) |
|
|
|
float dynamicFriction; // Friction when the body has movement (0 to 1) |
|
|
|
float restitution; // Restitution coefficient of the body (0 to 1) |
|
|
|
bool useGravity; // Apply gravity force to dynamics |
|
|
|
bool isGrounded; // Physics grounded on other body state |
|
|
|
bool freezeOrient; // Physics rotation constraint |
|
|
|
PhysicsShape shape; // Physics body shape information (type, radius, vertices, normals) |
|
|
|
} PhysicsBodyData; |
|
|
|
|
|
|
|
typedef struct PhysicsManifoldData { |
|
|
|
unsigned int id; // Reference unique identifier |
|
|
|
PhysicsBody bodyA; // Manifold first physics body reference |
|
|
|
PhysicsBody bodyB; // Manifold second physics body reference |
|
|
|
float penetration; // Depth of penetration from collision |
|
|
|
Vector2 normal; // Normal direction vector from 'a' to 'b' |
|
|
|
Vector2 contacts[2]; // Points of contact during collision |
|
|
|
unsigned int contactsCount; // Current collision number of contacts |
|
|
|
float restitution; // Mixed restitution during collision |
|
|
|
float dynamicFriction; // Mixed dynamic friction during collision |
|
|
|
float staticFriction; // Mixed static friction during collision |
|
|
|
} PhysicsManifoldData, *PhysicsManifold; |
|
|
|
|
|
|
|
#if defined(__cplusplus) |
|
|
|
extern "C" { // Prevents name mangling of functions |
|
|
|
#endif |
|
|
@ -221,67 +282,6 @@ PHYSACDEF void ClosePhysics(void); |
|
|
|
#define PHYSAC_K 1.0f/3.0f |
|
|
|
#define PHYSAC_VECTOR_ZERO (Vector2){ 0.0f, 0.0f } |
|
|
|
|
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
// Data Types Structure Definition |
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
|
|
|
|
// Matrix2x2 type (used for polygon shape rotation matrix) |
|
|
|
typedef struct Matrix2x2 { |
|
|
|
float m00; |
|
|
|
float m01; |
|
|
|
float m10; |
|
|
|
float m11; |
|
|
|
} Matrix2x2; |
|
|
|
|
|
|
|
typedef struct PolygonData { |
|
|
|
unsigned int vertexCount; // Current used vertex and normals count |
|
|
|
Vector2 positions[PHYSAC_MAX_VERTICES]; // Polygon vertex positions vectors |
|
|
|
Vector2 normals[PHYSAC_MAX_VERTICES]; // Polygon vertex normals vectors |
|
|
|
} PolygonData; |
|
|
|
|
|
|
|
typedef struct PhysicsShape { |
|
|
|
PhysicsShapeType type; // Physics shape type (circle or polygon) |
|
|
|
PhysicsBody body; // Shape physics body reference |
|
|
|
float radius; // Circle shape radius (used for circle shapes) |
|
|
|
Matrix2x2 transform; // Vertices transform matrix 2x2 |
|
|
|
PolygonData vertexData; // Polygon shape vertices position and normals data (just used for polygon shapes) |
|
|
|
} PhysicsShape; |
|
|
|
|
|
|
|
typedef struct PhysicsBodyData { |
|
|
|
unsigned int id; // Reference unique identifier |
|
|
|
bool enabled; // Enabled dynamics state (collisions are calculated anyway) |
|
|
|
Vector2 position; // Physics body shape pivot |
|
|
|
Vector2 velocity; // Current linear velocity applied to position |
|
|
|
Vector2 force; // Current linear force (reset to 0 every step) |
|
|
|
float angularVelocity; // Current angular velocity applied to orient |
|
|
|
float torque; // Current angular force (reset to 0 every step) |
|
|
|
float orient; // Rotation in radians |
|
|
|
float inertia; // Moment of inertia |
|
|
|
float inverseInertia; // Inverse value of inertia |
|
|
|
float mass; // Physics body mass |
|
|
|
float inverseMass; // Inverse value of mass |
|
|
|
float staticFriction; // Friction when the body has not movement (0 to 1) |
|
|
|
float dynamicFriction; // Friction when the body has movement (0 to 1) |
|
|
|
float restitution; // Restitution coefficient of the body (0 to 1) |
|
|
|
bool useGravity; // Apply gravity force to dynamics |
|
|
|
bool isGrounded; // Physics grounded on other body state |
|
|
|
bool freezeOrient; // Physics rotation constraint |
|
|
|
PhysicsShape shape; // Physics body shape information (type, radius, vertices, normals) |
|
|
|
} PhysicsBodyData; |
|
|
|
|
|
|
|
typedef struct PhysicsManifoldData { |
|
|
|
unsigned int id; // Reference unique identifier |
|
|
|
PhysicsBody bodyA; // Manifold first physics body reference |
|
|
|
PhysicsBody bodyB; // Manifold second physics body reference |
|
|
|
float penetration; // Depth of penetration from collision |
|
|
|
Vector2 normal; // Normal direction vector from 'a' to 'b' |
|
|
|
Vector2 contacts[2]; // Points of contact during collision |
|
|
|
unsigned int contactsCount; // Current collision number of contacts |
|
|
|
float restitution; // Mixed restitution during collision |
|
|
|
float dynamicFriction; // Mixed dynamic friction during collision |
|
|
|
float staticFriction; // Mixed static friction during collision |
|
|
|
} PhysicsManifoldData, *PhysicsManifold; |
|
|
|
|
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
// Global Variables Definition |
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|