aboutsummaryrefslogtreecommitdiff
path: root/src/physics.h
diff options
context:
space:
mode:
authorvictorfisac <victorfisac@gmail.com>2015-12-21 21:12:35 +0100
committervictorfisac <victorfisac@gmail.com>2015-12-21 21:12:35 +0100
commite683fe88b9ab0fde76521a0367cdff4c229ac60c (patch)
treef51d6412b2064c555dcb1426d1775fb3b2d49558 /src/physics.h
parent1bcb5ddd505e5c4bdac6f254e931e9c3145be88d (diff)
downloadraylib-e683fe88b9ab0fde76521a0367cdff4c229ac60c.tar.gz
raylib-e683fe88b9ab0fde76521a0367cdff4c229ac60c.zip
Added physics engine-module and example
- Added new physics engine-module with four new data types: Physics, Transform, Rigidbody and Collider. This library contains functions to apply physics calculations to a position vector calculating collisions automatically. - Fixed some writing mistakes of lighting module.
Diffstat (limited to 'src/physics.h')
-rw-r--r--src/physics.h99
1 files changed, 99 insertions, 0 deletions
diff --git a/src/physics.h b/src/physics.h
new file mode 100644
index 00000000..211f31a2
--- /dev/null
+++ b/src/physics.h
@@ -0,0 +1,99 @@
+/**********************************************************************************************
+*
+* raylib physics engine module - Basic functions to apply physics to 2D objects
+*
+* Copyright (c) 2015 Victor Fisac and Ramon Santamaria
+*
+* This software is provided "as-is", without any express or implied warranty. In no event
+* will the authors be held liable for any damages arising from the use of this software.
+*
+* Permission is granted to anyone to use this software for any purpose, including commercial
+* applications, and to alter it and redistribute it freely, subject to the following restrictions:
+*
+* 1. The origin of this software must not be misrepresented; you must not claim that you
+* wrote the original software. If you use this software in a product, an acknowledgment
+* in the product documentation would be appreciated but is not required.
+*
+* 2. Altered source versions must be plainly marked as such, and must not be misrepresented
+* as being the original software.
+*
+* 3. This notice may not be removed or altered from any source distribution.
+*
+**********************************************************************************************/
+
+#ifndef PHYSICS_H
+#define PHYSICS_H
+
+//----------------------------------------------------------------------------------
+// Defines and Macros
+//----------------------------------------------------------------------------------
+// ...
+
+//----------------------------------------------------------------------------------
+// Types and Structures Definition
+//----------------------------------------------------------------------------------
+typedef enum { RectangleCollider, CircleCollider } ColliderType;
+
+// Physics struct
+typedef struct Physics {
+ bool enabled;
+ bool debug; // Should be used by programmer for testing purposes
+ Vector2 gravity;
+} Physics;
+
+// Transform struct
+typedef struct Transform {
+ Vector2 position;
+ float rotation;
+ Vector2 scale;
+} Transform;
+
+// Rigidbody struct
+typedef struct Rigidbody {
+ bool enabled;
+ 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
+} Rigidbody;
+
+// Collider struct
+typedef struct Collider {
+ bool enabled;
+ ColliderType type;
+ Rectangle bounds; // Just used for RectangleCollider type
+ int radius; // Just used for CircleCollider type
+} Collider;
+
+#ifdef __cplusplus
+extern "C" { // Prevents name mangling of functions
+#endif
+
+//----------------------------------------------------------------------------------
+// Module Functions Declaration
+//----------------------------------------------------------------------------------
+void InitPhysics(); // Initialize all internal physics values
+void SetPhysics(Physics settings); // Set physics settings values using Physics data type to overwrite internal physics settings
+
+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 AddRigidbodyForce(int index, Vector2 force); // Set rigidbody force (considering mass value)
+
+void SetColliderEnabled(int index, bool state); // Set enabled state to a defined collider
+
+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
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // PHYSICS_H \ No newline at end of file