summaryrefslogtreecommitdiffhomepage
path: root/examples
diff options
context:
space:
mode:
authorJeffery Myers <[email protected]>2022-07-19 12:55:10 -0700
committerGitHub <[email protected]>2022-07-19 21:55:10 +0200
commit39ead974a4f7615c5160649b3d48503e3a0e7936 (patch)
tree88d79266c3ca2b0effa7a22360445a977707dc63 /examples
parente9029d3d007e5dd05622c0569cf8be567d249e4b (diff)
downloadraylib-39ead974a4f7615c5160649b3d48503e3a0e7936.tar.gz
raylib-39ead974a4f7615c5160649b3d48503e3a0e7936.zip
add mouse zoom example (#2583)
Diffstat (limited to 'examples')
-rw-r--r--examples/Makefile1
-rw-r--r--examples/core/core_2d_camera_mouse_zoom.c101
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