e683fe88b9
- 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.
99 lines
4.3 KiB
C
99 lines
4.3 KiB
C
/**********************************************************************************************
|
|
*
|
|
* 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
|