diff options
| author | Jeffery Myers <[email protected]> | 2022-07-19 12:55:10 -0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2022-07-19 21:55:10 +0200 |
| commit | 39ead974a4f7615c5160649b3d48503e3a0e7936 (patch) | |
| tree | 88d79266c3ca2b0effa7a22360445a977707dc63 /examples | |
| parent | e9029d3d007e5dd05622c0569cf8be567d249e4b (diff) | |
| download | raylib-39ead974a4f7615c5160649b3d48503e3a0e7936.tar.gz raylib-39ead974a4f7615c5160649b3d48503e3a0e7936.zip | |
add mouse zoom example (#2583)
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/Makefile | 1 | ||||
| -rw-r--r-- | examples/core/core_2d_camera_mouse_zoom.c | 101 |
2 files changed, 102 insertions, 0 deletions
diff --git a/examples/Makefile b/examples/Makefile index 17ddafd0..063ad52c 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -375,6 +375,7 @@ CORE = \ core/core_input_gestures \ core/core_2d_camera \ core/core_2d_camera_platformer \ + core/core_2d_camera_mouse_zoom \ core/core_3d_camera_mode \ core/core_3d_camera_free \ core/core_3d_camera_first_person \ diff --git a/examples/core/core_2d_camera_mouse_zoom.c b/examples/core/core_2d_camera_mouse_zoom.c new file mode 100644 index 00000000..112d6152 --- /dev/null +++ b/examples/core/core_2d_camera_mouse_zoom.c @@ -0,0 +1,101 @@ +/******************************************************************************************* +* +* raylib [core] example - 2d camera mouse zoom +* +* This example has been created using raylib 1.5 (www.raylib.com) +* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) +* +* Copyright (c) 2022 Jeffery Myers +* +********************************************************************************************/ + + +#include "raylib.h" +#include "rlgl.h" +#include "raymath.h"; + + +//------------------------------------------------------------------------------------ +// Program main entry point +//------------------------------------------------------------------------------------ +int main () +{ + // Initialization + //-------------------------------------------------------------------------------------- + const int screenWidth = 800; + const int screenHeight = 450; + + InitWindow(screenWidth, screenHeight, "raylib [core] example - 2d camera mouse zoom"); + + Camera2D camera = { 0 }; + camera.zoom = 1; + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second + //-------------------------------------------------------------------------------------- + + // Main game loop + while (!WindowShouldClose()) + { + // translate based on right click + if (IsMouseButtonDown(MOUSE_BUTTON_RIGHT)) + { + Vector2 delta = GetMouseDelta(); + delta = Vector2Scale(delta, -1.0f / camera.zoom); + + camera.target = Vector2Add(camera.target, delta); + } + + // zoom based on wheel + float wheel = GetMouseWheelMove(); + if (wheel != 0) + { + // get the world point that is under the mouse + Vector2 mouseWorldPos = GetScreenToWorld2D(GetMousePosition(), camera); + + // set the offset to where the mouse is + camera.offset = GetMousePosition(); + + // set the target to match, so that the camera maps the world space point under the cursor to the screen space point under the cursor at any zoom + camera.target = mouseWorldPos; + + // zoom + const float zoomIncrement = 0.125f; + + camera.zoom += wheel * zoomIncrement; + if (camera.zoom < zoomIncrement) + camera.zoom = zoomIncrement; + } + + //---------------------------------------------------------------------------------- + + // Draw + //---------------------------------------------------------------------------------- + BeginDrawing(); + BeginDrawing(); + ClearBackground(BLACK); + + BeginMode2D(camera); + + // draw the 3d grid, rotated 90 degrees and centered around 0,0 just so we have something in the XY plane + rlPushMatrix(); + rlTranslatef(0, 25 * 50, 0); + rlRotatef(90, 1, 0, 0); + DrawGrid(100, 50); + rlPopMatrix(); + + // draw a thing + DrawCircle(100, 100, 50, YELLOW); + EndMode2D(); + + DrawText("Right drag to move, mouse wheel to zoom", 2, 2, 20, WHITE); + + EndDrawing(); + //---------------------------------------------------------------------------------- + } + + // De-Initialization + //-------------------------------------------------------------------------------------- + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- + return 0; +}
\ No newline at end of file |
