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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 literal 0 HcmV?d00001 diff --git a/projects/VS2022/examples/core_camera_2d_split_screen.vcxproj b/projects/VS2022/examples/core_camera_2d_split_screen.vcxproj new file mode 100644 index 000000000..1efc58a65 --- /dev/null +++ b/projects/VS2022/examples/core_camera_2d_split_screen.vcxproj @@ -0,0 +1,387 @@ + + + + + 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} + + + + + +