From 2d5d0c2999717ea28924d6cdd47bab014478cc32 Mon Sep 17 00:00:00 2001 From: Gabriel dos Santos Sanches Date: Fri, 8 Sep 2023 12:22:12 +0200 Subject: [PATCH] examples: core: adds 2D camera two player split screen (#3298) --- examples/Makefile | 1 + examples/Makefile.Web | 1 + examples/README.md | 1 + examples/core/core_camera_2d_split_screen.c | 137 +++++++ examples/core/core_camera_2d_split_screen.png | Bin 0 -> 20010 bytes .../core_camera_2d_split_screen.vcxproj | 387 ++++++++++++++++++ 6 files changed, 527 insertions(+) create mode 100644 examples/core/core_camera_2d_split_screen.c create mode 100644 examples/core/core_camera_2d_split_screen.png create mode 100644 projects/VS2022/examples/core_camera_2d_split_screen.vcxproj diff --git a/examples/Makefile b/examples/Makefile index 338fe168c..911743938 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -386,6 +386,7 @@ CORE = \ core/core_window_letterbox \ core/core_window_should_close \ core/core_split_screen \ + core/core_camera_2d_split_screen \ core/core_smooth_pixelperfect \ core/core_custom_frame_control diff --git a/examples/Makefile.Web b/examples/Makefile.Web index 518fab918..44ace4ee4 100644 --- a/examples/Makefile.Web +++ b/examples/Makefile.Web @@ -361,6 +361,7 @@ CORE = \ core/core_window_letterbox \ core/core_window_should_close \ core/core_split_screen \ + core/core_camera_2d_split_screen \ core/core_smooth_pixelperfect \ core/core_custom_frame_control \ core/core_loading_thread diff --git a/examples/README.md b/examples/README.md index 8399d677d..35acaa25a 100644 --- a/examples/README.md +++ b/examples/README.md @@ -54,6 +54,7 @@ Examples using raylib core platform functionality like window creation, inputs, | 28 | [core_smooth_pixelperfect](core/core_smooth_pixelperfect.c) | core_smooth_pixelperfect | ⭐️⭐️⭐️☆ | 3.7 | **4.0** | [Giancamillo Alessandroni](https://github.com/NotManyIdeasDev) | | 29 | [core_split_screen](core/core_split_screen.c) | core_split_screen | ⭐️⭐️⭐️⭐️ | 3.7 | **4.0** | [Jeffery Myers](https://github.com/JeffM2501) | | 30 | [core_window_should_close](core/core_window_should_close.c) | core_window_should_close | ⭐️⭐️☆☆ | **4.2** | **4.2** | [Ray](https://github.com/raysan5) | +| 31 | [core_camera_2d_split_screen](core/core_camera_2d_split_screen.c) | core_camera_2d_split_screen | ⭐️⭐️⭐️⭐️ | **4.5** | **4.5** | [Jeffery Myers](https://github.com/JeffM2501) | ### category: shapes diff --git a/examples/core/core_camera_2d_split_screen.c b/examples/core/core_camera_2d_split_screen.c new file mode 100644 index 000000000..5f5059569 --- /dev/null +++ b/examples/core/core_camera_2d_split_screen.c @@ -0,0 +1,137 @@ +/******************************************************************************************* +* +* raylib [core] example - split screen +* +* Addapted from the Split Screen example (https://github.com/raysan5/raylib/blob/master/examples/core/core_split_screen.c) +* +* Example originally created with raylib 4.5, last time updated with raylib 4.5 +* +* Example contributed by Jeffery Myers (@JeffM2501) and reviewed by Ramon Santamaria (@raysan5) +* +* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, +* BSD-like license that allows static linking with closed source software +* +* Copyright (c) 2021-2023 Jeffery Myers (@JeffM2501) +* +********************************************************************************************/ + +#include "raylib.h" + +#include + +#define PLAYER_SIZE 40 + +//------------------------------------------------------------------------------------ +// Program main entry point +//------------------------------------------------------------------------------------ +int main(void) +{ + // Initialization + //-------------------------------------------------------------------------------------- + const int screenWidth = 800; + const int screenHeight = 440; + + InitWindow(screenWidth, screenHeight, "raylib [core] example - camera 2D split screen"); + + Rectangle player1 = { 200, 200, PLAYER_SIZE, PLAYER_SIZE }; + Rectangle player2 = { 250, 200, PLAYER_SIZE, PLAYER_SIZE }; + + Camera2D camera1 = { 0 }; + camera1.target = (Vector2){ player1.x, player1.y }; + camera1.offset = (Vector2){ 200.0f, 200.0f }; + camera1.rotation = 0.0f; + camera1.zoom = 1.0f; + + Camera2D camera2 = { 0 }; + camera2.target = (Vector2){ player2.x, player2.y }; + camera2.offset = (Vector2){ 200.0f, 200.0f }; + camera2.rotation = 0.0f; + camera2.zoom = 1.0f; + + RenderTexture screenCamera1 = LoadRenderTexture(screenWidth / 2, screenHeight); + RenderTexture screenCamera2 = LoadRenderTexture(screenWidth / 2, screenHeight); + + // Build a flipped rectangle the size of the split view to use for drawing later + Rectangle splitScreenRect = { 0.0f, 0.0f, (float)screenCamera1.texture.width, (float)-screenCamera1.texture.height }; + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second + //-------------------------------------------------------------------------------------- + void DrawScene(void) { + for (int i = 0; i < screenWidth/PLAYER_SIZE + 1; i++) + { + DrawLineV((Vector2){PLAYER_SIZE*i, 0}, (Vector2){PLAYER_SIZE*i, screenHeight}, LIGHTGRAY); + } + + for (int i = 0; i < screenHeight/PLAYER_SIZE + 1; i++) + { + DrawLineV((Vector2){0, PLAYER_SIZE*i}, (Vector2){screenWidth, PLAYER_SIZE*i}, LIGHTGRAY); + } + + for (int i = 0; i < screenWidth/PLAYER_SIZE; i++) + { + for (int j = 0; j < screenHeight/PLAYER_SIZE; j++) + { + char coordinate_str[8]; + snprintf(coordinate_str, sizeof(coordinate_str), "%d,%d", i, j); + DrawText(coordinate_str, 10 + PLAYER_SIZE*i, 10 + PLAYER_SIZE*j, 10, LIGHTGRAY); + } + } + + DrawRectangleRec(player1, RED); + DrawRectangleRec(player2, BLUE); + } + + // Main game loop + while (!WindowShouldClose()) // Detect window close button or ESC key + { + // Update + //---------------------------------------------------------------------------------- + if (IsKeyDown(KEY_S)) player1.y += 3; + else if (IsKeyDown(KEY_W)) player1.y -= 3; + if (IsKeyDown(KEY_D)) player1.x += 3; + else if (IsKeyDown(KEY_A)) player1.x -= 3; + + if (IsKeyDown(KEY_UP)) player2.y += 3; + else if (IsKeyDown(KEY_DOWN)) player2.y -= 3; + if (IsKeyDown(KEY_RIGHT)) player2.x += 3; + else if (IsKeyDown(KEY_LEFT)) player2.x -= 3; + + camera1.target = (Vector2){ player1.x, player1.y }; + camera2.target = (Vector2){ player2.x, player2.y }; + + // Draw + //---------------------------------------------------------------------------------- + BeginTextureMode(screenCamera1); + ClearBackground(RAYWHITE); + BeginMode2D(camera1); + DrawScene(); + EndMode2D(); + DrawText("PLAYER1 W/S/A/D to move", 10, 10, 15, RED); + EndTextureMode(); + + BeginTextureMode(screenCamera2); + ClearBackground(RAYWHITE); + BeginMode2D(camera2); + DrawScene(); + EndMode2D(); + DrawText("PLAYER2 UP/DOWN/LEFT/RIGHT to move", 10, 10, 15, BLUE); + EndTextureMode(); + + // Draw both views render textures to the screen side by side + BeginDrawing(); + ClearBackground(BLACK); + DrawTextureRec(screenCamera1.texture, splitScreenRect, (Vector2){ 0, 0 }, WHITE); + DrawTextureRec(screenCamera2.texture, splitScreenRect, (Vector2){ screenWidth/2.0f, 0 }, WHITE); + EndDrawing(); + } + + // De-Initialization + //-------------------------------------------------------------------------------------- + UnloadRenderTexture(screenCamera1); // Unload render texture + UnloadRenderTexture(screenCamera2); // Unload render texture + + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- + + return 0; +} diff --git a/examples/core/core_camera_2d_split_screen.png b/examples/core/core_camera_2d_split_screen.png new file mode 100644 index 0000000000000000000000000000000000000000..ed5aaa58bfc2bb8124098d2b5c583961414bc218 GIT binary patch literal 20010 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 + + + + Debug.DLL + Win32 + + + Debug.DLL + x64 + + + Debug + Win32 + + + Debug + x64 + + + Release.DLL + Win32 + + + Release.DLL + x64 + + + Release + Win32 + + + Release + x64 + + + + {946A1700-C7AA-46F0-AEF2-67C98B5722AC} + Win32Proj + core_camera_2d_split_screen + 10.0 + core_camera_2d_split_screen + + + + Application + true + $(DefaultPlatformToolset) + Unicode + + + Application + true + $(DefaultPlatformToolset) + Unicode + + + Application + true + $(DefaultPlatformToolset) + Unicode + + + Application + true + $(DefaultPlatformToolset) + Unicode + + + Application + false + $(DefaultPlatformToolset) + true + Unicode + + + Application + false + $(DefaultPlatformToolset) + true + Unicode + + + Application + false + $(DefaultPlatformToolset) + true + Unicode + + + Application + false + $(DefaultPlatformToolset) + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + true + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + true + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + true + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + $(SolutionDir)..\..\examples\core + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\core + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\core + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\core + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\core + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\core + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\core + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\core + WindowsLocalDebugger + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) + CompileAsC + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + + + Console + true + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) + CompileAsC + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + /FS %(AdditionalOptions) + + + Console + true + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) + CompileAsC + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + + + Console + true + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" + Copy Debug DLL to output directory + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) + CompileAsC + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + + + Console + true + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" + Copy Debug DLL to output directory + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + CompileAsC + true + + + Console + true + true + true + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + CompileAsC + true + + + Console + true + true + true + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + CompileAsC + true + + + Console + true + true + true + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + + + xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" + + + Copy Release DLL to output directory + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + CompileAsC + true + + + Console + true + true + true + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + + + xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" + + + Copy Release DLL to output directory + + + + + + + + {e89d61ac-55de-4482-afd4-df7242ebc859} + + + + + +