| 
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -11,6 +11,8 @@ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#include "raylib.h" | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#define MAX_BUILDINGS   100 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			int main() | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Initialization | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -20,16 +22,31 @@ int main() | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    InitWindow(screenWidth, screenHeight, "raylib [core] example - 2d camera"); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Rectangle player = { 400, 280, 40, 40 }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Rectangle buildings[MAX_BUILDINGS] = { 0, 0, 0, 0 }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Color buildColors[MAX_BUILDINGS] = { 80, 80, 80, 255 }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    int spacing = 0; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    for (int i = 0; i < MAX_BUILDINGS; i++) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        buildings[i].width = GetRandomValue(50, 200); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        buildings[i].height = GetRandomValue(100, 800); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        buildings[i].y = screenHeight - 130 - buildings[i].height; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        buildings[i].x = -6000 + spacing; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        spacing += buildings[i].width; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        buildColors[i] = (Color){ GetRandomValue(200, 240), GetRandomValue(200, 240), GetRandomValue(200, 250), 255 }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Camera2D camera; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    camera.target = (Vector2){ player.x + 20, player.y + 20 }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    camera.offset = (Vector2){ 0, 0 }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    camera.target = (Vector2){ 400, 200 }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    camera.rotation = 0.0f; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    camera.zoom = 1.0f; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Rectangle player = { 400, 200, 40, 40 }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    camera.target = (Vector2){ player.x + 20, player.y + 20 }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    SetTargetFPS(60); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //-------------------------------------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -38,24 +55,36 @@ int main() | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Update | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        //---------------------------------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (IsKeyDown(KEY_RIGHT)) player.x -= 2; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        else if (IsKeyDown(KEY_LEFT)) player.x += 2; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        else if (IsKeyDown(KEY_UP)) player.y -= 2; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        else if (IsKeyDown(KEY_DOWN)) player.y += 2; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (IsKeyDown(KEY_RIGHT)) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            player.x += 2;              // Player movement | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            camera.offset.x -= 2;       // Camera displacement with player movement | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        else if (IsKeyDown(KEY_LEFT)) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            player.x -= 2;              // Player movement | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            camera.offset.x += 2;       // Camera displacement with player movement | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Camera target follows player | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        camera.target = (Vector2){ player.x + 20, player.y + 20 }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (IsKeyDown(KEY_R)) camera.rotation--; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        else if (IsKeyDown(KEY_F)) camera.rotation++; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Camera rotation controls | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (IsKeyDown(KEY_A)) camera.rotation--; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        else if (IsKeyDown(KEY_S)) camera.rotation++; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Camera controls | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (IsKeyDown(KEY_R)) camera.rotation--; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        else if (IsKeyDown(KEY_F)) camera.rotation++; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Limit camera rotation to 80 degrees (-40 to 40) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (camera.rotation > 40) camera.rotation = 40;          | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        else if (camera.rotation < -40) camera.rotation = -40; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Camera zoom controls | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        camera.zoom += ((float)GetMouseWheelMove()*0.05f); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (IsKeyPressed(KEY_Z))  | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (camera.zoom > 3.0f) camera.zoom = 3.0f; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        else if (camera.zoom < 0.1f) camera.zoom = 0.1f; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Camera reset (zoom and rotation) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (IsKeyPressed(KEY_R))  | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            camera.zoom = 1.0f; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            camera.rotation = 0.0f; | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -64,17 +93,38 @@ int main() | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Draw | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        //---------------------------------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        BeginDrawingEx(camera); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        BeginDrawing(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            ClearBackground(RAYWHITE); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            Begin2dMode(camera); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            DrawText("2D CAMERA TEST", 20, 20, 20, GRAY); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                DrawRectangle(-6000, 320, 13000, 8000, DARKGRAY); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                for (int i = 0; i < MAX_BUILDINGS; i++) DrawRectangleRec(buildings[i], buildColors[i]); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                DrawRectangleRec(player, RED); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                DrawRectangle(camera.target.x, -500, 1, screenHeight*4, GREEN); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                DrawRectangle(-500, camera.target.y, screenWidth*4, 1, GREEN); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            End2dMode(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			             | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            DrawText("SCREEN AREA", 640, 10, 20, RED); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			             | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            DrawRectangle(0, 0, screenWidth, 5, RED); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            DrawRectangle(0, 5, 5, screenHeight - 10, RED); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            DrawRectangle(screenWidth - 5, 5, 5, screenHeight - 10, RED); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            DrawRectangle(0, screenHeight - 5, screenWidth, 5, RED); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			             | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            DrawRectangle(0, 300, screenWidth, 50, GRAY); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            DrawRectangleRec(player, RED); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            DrawRectangle( 10, 10, 250, 113, Fade(SKYBLUE, 0.5f)); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            DrawRectangleLines( 10, 10, 250, 113, BLUE); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			             | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            DrawRectangle(camera.origin.x, 0, 1, screenHeight, GREEN); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            DrawRectangle(0, camera.origin.y, screenWidth, 1, GREEN); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            DrawText("Free 2d camera controls:", 20, 20, 10, BLACK); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            DrawText("- Right/Left to move Offset", 40, 40, 10, DARKGRAY); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            DrawText("- Mouse Wheel to Zoom in-out", 40, 60, 10, DARKGRAY); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            DrawText("- A / S to Rotate", 40, 80, 10, DARKGRAY); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            DrawText("- R to reset Zoom and Rotation", 40, 100, 10, DARKGRAY); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        EndDrawing(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        //---------------------------------------------------------------------------------- | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
				
				 | 
			
			 | 
			
			
 |