mirror of
				https://github.com/raysan5/raylib.git
				synced 2025-11-04 01:34:19 +00:00 
			
		
		
		
	@@ -3,9 +3,12 @@
 | 
			
		||||
*   Physac - Physics demo
 | 
			
		||||
*
 | 
			
		||||
*   NOTE: Physac requires multi-threading, when InitPhysics() a second thread is created to manage physics calculations.
 | 
			
		||||
*   The file pthreadGC2.dll is required to run the program; you can find it in 'src\external'
 | 
			
		||||
*
 | 
			
		||||
*   Copyright (c) 2016 Victor Fisac
 | 
			
		||||
*   Use the following code to compile (-static -lpthread):
 | 
			
		||||
*   gcc -o $(NAME_PART).exe $(FILE_NAME) -s $(RAYLIB_DIR)\raylib\raylib_icon -static -lraylib -lpthread 
 | 
			
		||||
*   -lglfw3 -lopengl32 -lgdi32 -lopenal32 -lwinmm -std=c99 -Wl,--subsystem,windows -Wl,-allow-multiple-definition
 | 
			
		||||
*   
 | 
			
		||||
*   Copyright (c) 2017 Victor Fisac
 | 
			
		||||
*
 | 
			
		||||
********************************************************************************************/
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -3,9 +3,12 @@
 | 
			
		||||
*   Physac - Physics friction
 | 
			
		||||
*
 | 
			
		||||
*   NOTE: Physac requires multi-threading, when InitPhysics() a second thread is created to manage physics calculations.
 | 
			
		||||
*   The file pthreadGC2.dll is required to run the program; you can find it in 'src\external'
 | 
			
		||||
*
 | 
			
		||||
*   Copyright (c) 2016 Victor Fisac
 | 
			
		||||
*   Use the following code to compile (-static -lpthread):
 | 
			
		||||
*   gcc -o $(NAME_PART).exe $(FILE_NAME) -s $(RAYLIB_DIR)\raylib\raylib_icon -static -lraylib -lpthread 
 | 
			
		||||
*   -lglfw3 -lopengl32 -lgdi32 -lopenal32 -lwinmm -std=c99 -Wl,--subsystem,windows -Wl,-allow-multiple-definition
 | 
			
		||||
*   
 | 
			
		||||
*   Copyright (c) 2017 Victor Fisac
 | 
			
		||||
*
 | 
			
		||||
********************************************************************************************/
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -3,9 +3,12 @@
 | 
			
		||||
*   Physac - Physics movement
 | 
			
		||||
*
 | 
			
		||||
*   NOTE: Physac requires multi-threading, when InitPhysics() a second thread is created to manage physics calculations.
 | 
			
		||||
*   The file pthreadGC2.dll is required to run the program; you can find it in 'src\external'
 | 
			
		||||
*
 | 
			
		||||
*   Copyright (c) 2016 Victor Fisac
 | 
			
		||||
*   Use the following code to compile (-static -lpthread):
 | 
			
		||||
*   gcc -o $(NAME_PART).exe $(FILE_NAME) -s $(RAYLIB_DIR)\raylib\raylib_icon -static -lraylib -lpthread 
 | 
			
		||||
*   -lglfw3 -lopengl32 -lgdi32 -lopenal32 -lwinmm -std=c99 -Wl,--subsystem,windows -Wl,-allow-multiple-definition
 | 
			
		||||
*   
 | 
			
		||||
*   Copyright (c) 2017 Victor Fisac
 | 
			
		||||
*
 | 
			
		||||
********************************************************************************************/
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -3,9 +3,12 @@
 | 
			
		||||
*   Physac - Physics restitution
 | 
			
		||||
*
 | 
			
		||||
*   NOTE: Physac requires multi-threading, when InitPhysics() a second thread is created to manage physics calculations.
 | 
			
		||||
*   The file pthreadGC2.dll is required to run the program; you can find it in 'src\external'
 | 
			
		||||
*
 | 
			
		||||
*   Copyright (c) 2016 Victor Fisac
 | 
			
		||||
*   Use the following code to compile (-static -lpthread):
 | 
			
		||||
*   gcc -o $(NAME_PART).exe $(FILE_NAME) -s $(RAYLIB_DIR)\raylib\raylib_icon -static -lraylib -lpthread 
 | 
			
		||||
*   -lglfw3 -lopengl32 -lgdi32 -lopenal32 -lwinmm -std=c99 -Wl,--subsystem,windows -Wl,-allow-multiple-definition
 | 
			
		||||
*   
 | 
			
		||||
*   Copyright (c) 2017 Victor Fisac
 | 
			
		||||
*
 | 
			
		||||
********************************************************************************************/
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -3,9 +3,12 @@
 | 
			
		||||
*   Physac - Body shatter
 | 
			
		||||
*
 | 
			
		||||
*   NOTE: Physac requires multi-threading, when InitPhysics() a second thread is created to manage physics calculations.
 | 
			
		||||
*   The file pthreadGC2.dll is required to run the program; you can find it in 'src\external'
 | 
			
		||||
*
 | 
			
		||||
*   Copyright (c) 2016 Victor Fisac
 | 
			
		||||
*   Use the following code to compile (-static -lpthread):
 | 
			
		||||
*   gcc -o $(NAME_PART).exe $(FILE_NAME) -s $(RAYLIB_DIR)\raylib\raylib_icon -static -lraylib -lpthread 
 | 
			
		||||
*   -lglfw3 -lopengl32 -lgdi32 -lopenal32 -lwinmm -std=c99 -Wl,--subsystem,windows -Wl,-allow-multiple-definition
 | 
			
		||||
*   
 | 
			
		||||
*   Copyright (c) 2017 Victor Fisac
 | 
			
		||||
*
 | 
			
		||||
********************************************************************************************/
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										87
									
								
								src/physac.h
									
									
									
									
									
								
							
							
						
						
									
										87
									
								
								src/physac.h
									
									
									
									
									
								
							@@ -38,13 +38,20 @@
 | 
			
		||||
*       You can define your own malloc/free implementation replacing stdlib.h malloc()/free() functions.
 | 
			
		||||
*       Otherwise it will include stdlib.h and use the C standard library malloc()/free() function.
 | 
			
		||||
*
 | 
			
		||||
*
 | 
			
		||||
*   NOTE: Physac requires multi-threading, when InitPhysics() a second thread is created to manage physics calculations.
 | 
			
		||||
*
 | 
			
		||||
*   Use the following code to compile (-static -lpthread):
 | 
			
		||||
*   gcc -o $(NAME_PART).exe $(FILE_NAME) -s $(RAYLIB_DIR)\raylib\raylib_icon -static -lraylib -lpthread 
 | 
			
		||||
*   -lglfw3 -lopengl32 -lgdi32 -lopenal32 -lwinmm -std=c99 -Wl,--subsystem,windows -Wl,-allow-multiple-definition
 | 
			
		||||
*
 | 
			
		||||
*   VERY THANKS TO:
 | 
			
		||||
*       Ramón Santamaria (@raysan5)
 | 
			
		||||
*
 | 
			
		||||
*
 | 
			
		||||
*   LICENSE: zlib/libpng
 | 
			
		||||
*
 | 
			
		||||
*   Copyright (c) 2016 Victor Fisac
 | 
			
		||||
*   Copyright (c) 2017 Victor Fisac
 | 
			
		||||
*
 | 
			
		||||
*   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.
 | 
			
		||||
@@ -361,70 +368,6 @@ PHYSACDEF PhysicsBody CreatePhysicsBodyCircle(Vector2 pos, float radius, float d
 | 
			
		||||
{
 | 
			
		||||
    PhysicsBody newBody = CreatePhysicsBodyPolygon(pos, radius, PHYSAC_CIRCLE_VERTICES, density);
 | 
			
		||||
    return newBody;
 | 
			
		||||
 | 
			
		||||
    /*PhysicsBody newBody = (PhysicsBody)PHYSAC_MALLOC(sizeof(PhysicsBodyData));
 | 
			
		||||
    usedMemory += sizeof(PhysicsBodyData);
 | 
			
		||||
 | 
			
		||||
    int newId = -1;
 | 
			
		||||
    for (int i = 0; i < PHYSAC_MAX_BODIES; i++)
 | 
			
		||||
    {
 | 
			
		||||
        int currentId = i;
 | 
			
		||||
 | 
			
		||||
        // Check if current id already exist in other physics body
 | 
			
		||||
        for (int k = 0; k < physicsBodiesCount; k++)
 | 
			
		||||
        {
 | 
			
		||||
            if (bodies[k]->id == currentId)
 | 
			
		||||
            {
 | 
			
		||||
                currentId++;
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // If it is not used, use it as new physics body id
 | 
			
		||||
        if (currentId == i)
 | 
			
		||||
        {
 | 
			
		||||
            newId = i;
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (newId != -1)
 | 
			
		||||
    {
 | 
			
		||||
        // Initialize new body with generic values
 | 
			
		||||
        newBody->id = newId;
 | 
			
		||||
        newBody->enabled = true;
 | 
			
		||||
        newBody->position = pos;    
 | 
			
		||||
        newBody->velocity = (Vector2){ 0 };
 | 
			
		||||
        newBody->force = (Vector2){ 0 };
 | 
			
		||||
        newBody->angularVelocity = 0;
 | 
			
		||||
        newBody->torque = 0;
 | 
			
		||||
        newBody->orient = 0;
 | 
			
		||||
        newBody->mass = PHYSAC_PI*radius*radius*density;
 | 
			
		||||
        newBody->inverseMass = ((newBody->mass != 0.0f) ? 1.0f/newBody->mass : 0.0f);
 | 
			
		||||
        newBody->inertia = newBody->mass*radius*radius;
 | 
			
		||||
        newBody->inverseInertia = ((newBody->inertia != 0.0f) ? 1.0f/newBody->inertia : 0.0f);
 | 
			
		||||
        newBody->staticFriction = 0;
 | 
			
		||||
        newBody->dynamicFriction = 0;
 | 
			
		||||
        newBody->restitution = 0;
 | 
			
		||||
        newBody->useGravity = true;
 | 
			
		||||
        newBody->freezeOrient = false;
 | 
			
		||||
        newBody->shape.type = PHYSICS_CIRCLE;
 | 
			
		||||
        newBody->shape.body = newBody;
 | 
			
		||||
        newBody->shape.radius = radius;
 | 
			
		||||
 | 
			
		||||
        // Add new body to bodies pointers array and update bodies count
 | 
			
		||||
        bodies[physicsBodiesCount] = newBody;
 | 
			
		||||
        physicsBodiesCount++;
 | 
			
		||||
 | 
			
		||||
        #if defined(PHYSAC_DEBUG)
 | 
			
		||||
            printf("[PHYSAC] created circle physics body id %i\n", newBody->id);
 | 
			
		||||
        #endif
 | 
			
		||||
    }
 | 
			
		||||
    #if defined(PHYSAC_DEBUG)
 | 
			
		||||
        else printf("[PHYSAC] new physics body creation failed because there is any available id to use\n");
 | 
			
		||||
    #endif
 | 
			
		||||
 | 
			
		||||
    return newBody;*/
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Creates a new rectangle physics body with generic parameters
 | 
			
		||||
@@ -1130,6 +1073,7 @@ static void *PhysicsLoop(void *arg)
 | 
			
		||||
// Physics steps calculations (dynamics, collisions and position corrections)
 | 
			
		||||
static void PhysicsStep(void)
 | 
			
		||||
{
 | 
			
		||||
    // Update current steps count
 | 
			
		||||
    stepsCount++;
 | 
			
		||||
 | 
			
		||||
    // Clear previous generated collisions information
 | 
			
		||||
@@ -1139,6 +1083,13 @@ static void PhysicsStep(void)
 | 
			
		||||
        if (manifold != NULL) DestroyPhysicsManifold(manifold);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    // Reset physics bodies grounded state
 | 
			
		||||
    for (int i = 0; i < physicsBodiesCount; i++)
 | 
			
		||||
    {
 | 
			
		||||
        PhysicsBody body = bodies[i];
 | 
			
		||||
        body->isGrounded = false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Generate new collision information
 | 
			
		||||
    for (int i = 0; i < physicsBodiesCount; i++)
 | 
			
		||||
    {
 | 
			
		||||
@@ -1348,8 +1299,8 @@ static void SolvePhysicsManifold(PhysicsManifold manifold)
 | 
			
		||||
        default: break;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    // Update physics body grounded state if normal direction is downside
 | 
			
		||||
    manifold->bodyB->isGrounded = (manifold->normal.y < 0);
 | 
			
		||||
    // Update physics body grounded state if normal direction is down and grounded state is not set yet in previous manifolds
 | 
			
		||||
    if (!manifold->bodyB->isGrounded) manifold->bodyB->isGrounded = (manifold->normal.y < 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Solves collision between two circle shape physics bodies
 | 
			
		||||
@@ -1388,7 +1339,7 @@ static void SolveCircleToCircle(PhysicsManifold manifold)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Update physics body grounded state if normal direction is down
 | 
			
		||||
    if (manifold->normal.y < 0) bodyA->isGrounded = true;
 | 
			
		||||
    if (!bodyA->isGrounded) bodyA->isGrounded = (manifold->normal.y < 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Solves collision between a circle to a polygon shape physics bodies
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										15
									
								
								src/raylib.h
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								src/raylib.h
									
									
									
									
									
								
							@@ -98,13 +98,13 @@
 | 
			
		||||
#define RAD2DEG (180.0f/PI)
 | 
			
		||||
 | 
			
		||||
// raylib Config Flags
 | 
			
		||||
#define FLAG_SHOW_LOGO              1       // Set this flag to show raylib logo at startup
 | 
			
		||||
#define FLAG_FULLSCREEN_MODE        2       // Set this flag to run program in fullscreen
 | 
			
		||||
#define FLAG_WINDOW_RESIZABLE       4       // Set this flag to allow resizable window
 | 
			
		||||
#define FLAG_WINDOW_DECORATED       8       // Set this flag to show window decoration (frame and buttons)
 | 
			
		||||
#define FLAG_WINDOW_TRANSPARENT    16       // Set this flag to allow transparent window
 | 
			
		||||
#define FLAG_MSAA_4X_HINT          32       // Set this flag to try enabling MSAA 4X
 | 
			
		||||
#define FLAG_VSYNC_HINT            64       // Set this flag to try enabling V-Sync on GPU
 | 
			
		||||
#define FLAG_SHOW_LOGO              1       // Set to show raylib logo at startup
 | 
			
		||||
#define FLAG_FULLSCREEN_MODE        2       // Set to run program in fullscreen
 | 
			
		||||
#define FLAG_WINDOW_RESIZABLE       4       // Set to allow resizable window
 | 
			
		||||
#define FLAG_WINDOW_DECORATED       8       // Set to show window decoration (frame and buttons)
 | 
			
		||||
#define FLAG_WINDOW_TRANSPARENT    16       // Set to allow transparent window
 | 
			
		||||
#define FLAG_MSAA_4X_HINT          32       // Set to try enabling MSAA 4X
 | 
			
		||||
#define FLAG_VSYNC_HINT            64       // Set to try enabling V-Sync on GPU
 | 
			
		||||
 | 
			
		||||
// Keyboard Function Keys
 | 
			
		||||
#define KEY_SPACE            32
 | 
			
		||||
@@ -763,6 +763,7 @@ RLAPI void DrawPixel(int posX, int posY, Color color);
 | 
			
		||||
RLAPI void DrawPixelV(Vector2 position, Color color);                                                    // Draw a pixel (Vector version)
 | 
			
		||||
RLAPI void DrawLine(int startPosX, int startPosY, int endPosX, int endPosY, Color color);                // Draw a line
 | 
			
		||||
RLAPI void DrawLineV(Vector2 startPos, Vector2 endPos, Color color);                                     // Draw a line (Vector version)
 | 
			
		||||
RLAPI void DrawLineEx(Vector2 startPos, Vector2 endPos, float thick, Color color);                       // Draw a line defining thickness
 | 
			
		||||
RLAPI void DrawCircle(int centerX, int centerY, float radius, Color color);                              // Draw a color-filled circle
 | 
			
		||||
RLAPI void DrawCircleGradient(int centerX, int centerY, float radius, Color color1, Color color2);       // Draw a gradient-filled circle
 | 
			
		||||
RLAPI void DrawCircleV(Vector2 center, float radius, Color color);                                       // Draw a color-filled circle (Vector version)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										30
									
								
								src/shapes.c
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								src/shapes.c
									
									
									
									
									
								
							@@ -103,6 +103,36 @@ void DrawLineV(Vector2 startPos, Vector2 endPos, Color color)
 | 
			
		||||
    rlEnd();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Draw a line defining thickness
 | 
			
		||||
void DrawLineEx(Vector2 startPos, Vector2 endPos, float thick, Color color)
 | 
			
		||||
{
 | 
			
		||||
    float dx = endPos.x - startPos.x;
 | 
			
		||||
    float dy = endPos.y - startPos.y;
 | 
			
		||||
    
 | 
			
		||||
    float d = sqrtf(dx*dx + dy*dy);
 | 
			
		||||
    float angle = asinf(dy/d);
 | 
			
		||||
    
 | 
			
		||||
    rlEnableTexture(GetDefaultTexture().id);
 | 
			
		||||
 | 
			
		||||
    rlPushMatrix();
 | 
			
		||||
        rlTranslatef((float)startPos.x, (float)startPos.y, 0);
 | 
			
		||||
        rlRotatef(-RAD2DEG*angle, 0, 0, 1);
 | 
			
		||||
        rlTranslatef(0, -thick/2.0f, 0);
 | 
			
		||||
 | 
			
		||||
        rlBegin(RL_QUADS);
 | 
			
		||||
            rlColor4ub(color.r, color.g, color.b, color.a);
 | 
			
		||||
            rlNormal3f(0.0f, 0.0f, 1.0f);
 | 
			
		||||
 | 
			
		||||
            rlVertex2f(0.0f, 0.0f);
 | 
			
		||||
            rlVertex2f(0.0f, thick);
 | 
			
		||||
            rlVertex2f(d, thick);
 | 
			
		||||
            rlVertex2f(d, 0.0f);
 | 
			
		||||
        rlEnd();
 | 
			
		||||
    rlPopMatrix();
 | 
			
		||||
 | 
			
		||||
    rlDisableTexture();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Draw a color-filled circle
 | 
			
		||||
void DrawCircle(int centerX, int centerY, float radius, Color color)
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user