| 
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -13,12 +13,15 @@ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#define PHYSAC_IMPLEMENTATION | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#include "physac.h" | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#include <pthread.h> | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#define FORCE_AMOUNT        5.0f | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#define FORCE_RADIUS        150 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#define LINE_LENGTH         75 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#define TRIANGLE_LENGTH     12 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			void* PhysicsThread(void *arg); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			int main() | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Initialization | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -61,6 +64,10 @@ int main() | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    PhysicBody topWall = CreatePhysicBody((Vector2){ screenWidth/2, -25 }, 0.0f, (Vector2){ screenWidth, 50 }); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    PhysicBody bottomWall = CreatePhysicBody((Vector2){ screenWidth/2, screenHeight + 25 }, 0.0f, (Vector2){ screenWidth, 50 }); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Create physics thread | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    pthread_t tid; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    pthread_create(&tid, NULL, &PhysicsThread, NULL); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    SetTargetFPS(60); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //-------------------------------------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -69,7 +76,6 @@ int main() | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Update | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        //---------------------------------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        UpdatePhysics();    // Update all created physic objects | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Update mouse position value | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        mousePosition = GetMousePosition(); | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -174,10 +180,32 @@ int main() | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // De-Initialization | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //-------------------------------------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    pthread_cancel(tid);    // Destroy physics thread | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    ClosePhysics();       // Unitialize physics module | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    CloseWindow();        // Close window and OpenGL context | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //-------------------------------------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return 0; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			void* PhysicsThread(void *arg) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Initialize time variables | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    double currentTime = GetTime(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    double previousTime = currentTime; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Physics update loop | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    while (!WindowShouldClose())  | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        currentTime = GetTime(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        double deltaTime = (double)(currentTime - previousTime); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        previousTime = currentTime; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Delta time value needs to be inverse multiplied by physics time step value (1/target fps) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        UpdatePhysics(deltaTime/PHYSICS_TIMESTEP); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return NULL; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} |