From a5e1aff99bf362a3ebef2d4559e7529a36d935f3 Mon Sep 17 00:00:00 2001 From: raysan5 Date: Sat, 28 Mar 2020 18:36:30 +0100 Subject: [PATCH] [example] Integrate virtual mouse in main example --- examples/core/core_window_letterbox.c | 24 +++- examples/core/core_window_letterbox.png | Bin 17967 -> 23608 bytes .../core_window_letterbox_virtual_mouse.c | 113 ------------------ 3 files changed, 23 insertions(+), 114 deletions(-) delete mode 100644 examples/core/core_window_letterbox_virtual_mouse.c diff --git a/examples/core/core_window_letterbox.c b/examples/core/core_window_letterbox.c index fe67fe0a0..4402dd2a3 100644 --- a/examples/core/core_window_letterbox.c +++ b/examples/core/core_window_letterbox.c @@ -1,6 +1,6 @@ /******************************************************************************************* * -* raylib [core] example - window scale letterbox +* raylib [core] example - window scale letterbox (and virtual mouse) * * This example has been created using raylib 2.5 (www.raylib.com) * raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) @@ -16,6 +16,18 @@ #define max(a, b) ((a)>(b)? (a) : (b)) #define min(a, b) ((a)<(b)? (a) : (b)) +// Clamp Vector2 value with min and max and return a new vector2 +// NOTE: Required for virtual mouse, to clamp inside virtual game size +Vector2 ClampValue(Vector2 value, Vector2 min, Vector2 max) +{ + Vector2 result = value; + result.x = (result.x > max.x)? max.x : result.x; + result.x = (result.x < min.x)? min.x : result.x; + result.y = (result.y > max.y)? max.y : result.y; + result.y = (result.y < min.y)? min.y : result.y; + return result; +} + int main(void) { const int windowWidth = 800; @@ -52,6 +64,13 @@ int main(void) // Recalculate random colors for the bars for (int i = 0; i < 10; i++) colors[i] = (Color){ GetRandomValue(100, 250), GetRandomValue(50, 150), GetRandomValue(10, 100), 255 }; } + + // Update virtual mouse (clamped mouse value behind game screen) + Vector2 mouse = GetMousePosition(); + Vector2 virtualMouse = { 0 }; + virtualMouse.x = (mouse.x - (GetScreenWidth() - (gameScreenWidth*scale))*0.5f)/scale; + virtualMouse.y = (mouse.y - (GetScreenHeight() - (gameScreenHeight*scale))*0.5f)/scale; + virtualMouse = ClampValue(virtualMouse, (Vector2){ 0, 0 }, (Vector2){ gameScreenWidth, gameScreenHeight }); //---------------------------------------------------------------------------------- // Draw @@ -67,6 +86,9 @@ int main(void) for (int i = 0; i < 10; i++) DrawRectangle(0, (gameScreenHeight/10)*i, gameScreenWidth, gameScreenHeight/10, colors[i]); DrawText("If executed inside a window,\nyou can resize the window,\nand see the screen scaling!", 10, 25, 20, WHITE); + + DrawText(TextFormat("Default Mouse: [%i , %i]", (int)mouse.x, (int)mouse.y), 350, 25, 20, GREEN); + DrawText(TextFormat("Virtual Mouse: [%i , %i]", (int)virtualMouse.x, (int)virtualMouse.y), 350, 55, 20, YELLOW); EndTextureMode(); diff --git a/examples/core/core_window_letterbox.png b/examples/core/core_window_letterbox.png index 5acf2d7cc28aa8c2c465f71cf748b755fd8b042e..fbdbb8646d5f3db6317ed1e48d35b783be8c771b 100644 GIT binary patch delta 11334 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 OVDNPHb6Mw<&;$S@cYaL( diff --git a/examples/core/core_window_letterbox_virtual_mouse.c b/examples/core/core_window_letterbox_virtual_mouse.c deleted file mode 100644 index 37da10bec..000000000 --- a/examples/core/core_window_letterbox_virtual_mouse.c +++ /dev/null @@ -1,113 +0,0 @@ -/******************************************************************************************* -* -* raylib [core] example - window scale letterbox virtual mouse -* -* This example has been created using raylib 2.5 (www.raylib.com) -* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) -* -* Example contributed by Anata (@anatagawa) and reviewed by Ramon Santamaria (@raysan5) -* -* Copyright (c) 2019 Anata (@anatagawa) and Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#define max(a, b) ((a)>(b)? (a) : (b)) -#define min(a, b) ((a)<(b)? (a) : (b)) - -// Clamp Vector2 value with min and max and return a new vector2 -Vector2 ClampValue(Vector2 value, Vector2 min, Vector2 max) -{ - Vector2 result = value; - result.x = (result.x > max.x)? max.x : result.x; - result.x = (result.x < min.x)? min.x : result.x; - result.y = (result.y > max.y)? max.y : result.y; - result.y = (result.y < min.y)? min.y : result.y; - return result; -} - -int main(void) -{ - const int windowWidth = 800; - const int windowHeight = 450; - - // Enable config flags for resizable window and vertical synchro - SetConfigFlags(FLAG_WINDOW_RESIZABLE | FLAG_VSYNC_HINT); - InitWindow(windowWidth, windowHeight, "raylib [core] example - window scale letterbox"); - SetWindowMinSize(320, 240); - - int gameScreenWidth = 640; - int gameScreenHeight = 480; - - // Render texture initialization, used to hold the rendering result so we can easily resize it - RenderTexture2D target = LoadRenderTexture(gameScreenWidth, gameScreenHeight); - SetTextureFilter(target.texture, FILTER_BILINEAR); // Texture scale filter to use - - Color colors[10] = { 0 }; - for (int i = 0; i < 10; i++) colors[i] = (Color){ GetRandomValue(100, 250), GetRandomValue(50, 150), GetRandomValue(10, 100), 255 }; - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - // Compute required framebuffer scaling - float scale = min((float)GetScreenWidth()/gameScreenWidth, (float)GetScreenHeight()/gameScreenHeight); - - // Update virtual mouse - //---------------------------------------------------------------------------------- - Vector2 mouse = GetMousePosition(); - - mouse.x = (mouse.x - (GetScreenWidth() - (gameScreenWidth*scale))*0.5f)/scale; - mouse.y = (mouse.y - (GetScreenHeight() - (gameScreenHeight*scale))*0.5f)/scale; - - // Clamp mouse value behind gamescreen - mouse = ClampValue(mouse, (Vector2){ 0, 0 }, (Vector2){ gameScreenWidth, gameScreenHeight }); - //---------------------------------------------------------------------------------- - - if (IsKeyPressed(KEY_SPACE)) - { - // Recalculate random colors for the bars - for (int i = 0; i < 10; i++) colors[i] = (Color){ GetRandomValue(100, 250), GetRandomValue(50, 150), GetRandomValue(10, 100), 255 }; - } - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - ClearBackground(BLACK); - - // Draw everything in the render texture, note this will not be rendered on screen, yet - BeginTextureMode(target); - - ClearBackground(RAYWHITE); // Clear render texture background color - - for (int i = 0; i < 10; i++) DrawRectangle(0, (gameScreenHeight/10)*i, gameScreenWidth, gameScreenHeight/10, colors[i]); - - DrawText("If executed inside a window,\nyou can resize the window,\nand see the screen scaling!", 10, 25, 20, WHITE); - DrawText( TextFormat("Virtual Mouse : %.0f , %.0f", mouse.x, mouse.y), 350, 25, 20, YELLOW); - - EndTextureMode(); - - // Draw RenderTexture2D to window, properly scaled - DrawTexturePro(target.texture, (Rectangle){ 0.0f, 0.0f, (float)target.texture.width, (float)-target.texture.height }, - (Rectangle){ (GetScreenWidth() - ((float)gameScreenWidth*scale))*0.5, (GetScreenHeight() - ((float)gameScreenHeight*scale))*0.5, - (float)gameScreenWidth*scale, (float)gameScreenHeight*scale }, (Vector2){ 0, 0 }, 0.0f, WHITE); - - EndDrawing(); - //-------------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadRenderTexture(target); // Unload render texture - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -}