aboutsummaryrefslogtreecommitdiff
path: root/src/physac.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/physac.h')
-rw-r--r--src/physac.h58
1 files changed, 30 insertions, 28 deletions
diff --git a/src/physac.h b/src/physac.h
index 9e1b0b88..b948e4ce 100644
--- a/src/physac.h
+++ b/src/physac.h
@@ -1,6 +1,6 @@
/**********************************************************************************************
*
-* [physac] raylib physics engine module - Basic functions to apply physics to 2D objects
+* [physac] raylib physics module - Basic functions to apply physics to 2D objects
*
* Copyright (c) 2015 Victor Fisac and Ramon Santamaria
*
@@ -31,62 +31,64 @@
//----------------------------------------------------------------------------------
// Types and Structures Definition
+// NOTE: Below types are required for PHYSAC_STANDALONE usage
//----------------------------------------------------------------------------------
-// Collider types
+
+// Vector2 type
+typedef struct Vector2 {
+ float x;
+ float y;
+} Vector2;
+
typedef enum { COLLIDER_CIRCLE, COLLIDER_RECTANGLE, COLLIDER_CAPSULE } ColliderType;
-// Transform struct
typedef struct Transform {
Vector2 position;
float rotation;
Vector2 scale;
} Transform;
-// Rigidbody struct
typedef struct Rigidbody {
- bool enabled;
+ bool enabled; // Acts as kinematic state (collisions are calculated anyway)
float mass;
Vector2 acceleration;
Vector2 velocity;
- bool isGrounded;
- bool isContact; // Avoid freeze player when touching floor
bool applyGravity;
- float friction; // 0.0f to 1.0f
- float bounciness; // 0.0f to 1.0f
+ bool isGrounded;
+ float friction; // Normalized value
+ float bounciness; // Normalized value
} Rigidbody;
-// Collider struct
typedef struct Collider {
bool enabled;
ColliderType type;
- Rectangle bounds; // Used for COLLIDER_RECTANGLE and COLLIDER_CAPSULE
- int radius; // Used for COLLIDER_CIRCLE and COLLIDER_CAPSULE
+ Rectangle bounds; // Used for COLLIDER_RECTANGLE and COLLIDER_CAPSULE
+ int radius; // Used for COLLIDER_CIRCLE and COLLIDER_CAPSULE
} Collider;
+typedef struct PhysicObject {
+ unsigned int id;
+ Transform transform;
+ Rigidbody rigidbody;
+ Collider collider;
+ bool enabled;
+} PhysicObject;
+
#ifdef __cplusplus
extern "C" { // Prevents name mangling of functions
#endif
//----------------------------------------------------------------------------------
-// Module Functions Declarations
+// Module Functions Declaration
//----------------------------------------------------------------------------------
-void InitPhysics(int maxPhysicElements); // Initialize all internal physics values
-void UnloadPhysics(); // Unload physic elements arrays
-
-void AddRigidbody(int index, Rigidbody rigidbody); // Initialize a new rigidbody with parameters to internal index slot
-void AddCollider(int index, Collider collider); // Initialize a new Collider with parameters to internal index slot
-
-void ApplyPhysics(int index, Vector2 *position); // Apply physics to internal rigidbody, physics calculations are applied to position pointer parameter
-void SetRigidbodyEnabled(int index, bool state); // Set enabled state to a defined rigidbody
-void SetRigidbodyVelocity(int index, Vector2 velocity); // Set velocity of rigidbody (without considering of mass value)
-void SetRigidbodyAcceleration(int index, Vector2 acceleration); // Set acceleration of rigidbody (without considering of mass value)
-void AddRigidbodyForce(int index, Vector2 force); // Set rigidbody force (considering mass value)
-void AddForceAtPosition(Vector2 position, float intensity, float radius); // Add a force to all enabled rigidbodies at a position
+void UpdatePhysics(); // Update physic objects, calculating physic behaviours and collisions detection
+void ClosePhysics(); // Unitialize all physic objects and empty the objects pool
-void SetColliderEnabled(int index, bool state); // Set enabled state to a defined collider
+PhysicObject *CreatePhysicObject(Vector2 position, float rotation, Vector2 scale); // Create a new physic object dinamically, initialize it and add to pool
+void DestroyPhysicObject(PhysicObject *pObj); // Destroy a specific physic object and take it out of the list
-Rigidbody GetRigidbody(int index); // Returns the internal rigidbody data defined by index parameter
-Collider GetCollider(int index); // Returns the internal collider data defined by index parameter
+Rectangle TransformToRectangle(Transform transform); // Convert Transform data type to Rectangle (position and scale)
+void DrawPhysicObjectInfo(PhysicObject *pObj, Vector2 position, int fontSize); // Draw physic object information at screen position
#ifdef __cplusplus
}