From 74ce90ce671fbcd0d31e26d7b13d142b8425de60 Mon Sep 17 00:00:00 2001
From: Magnus Oblerion <82583559+oblerion@users.noreply.github.com>
Date: Sun, 6 Oct 2024 15:47:47 +0200
Subject: [PATCH] [example] Input virtual controls example (#4342)
* Add files via upload
* Update core_input_gamepad_virtual.c
* Add files via upload
* Update and rename core_input_gamepad_virtual.c to core_virtual_Dpad.c
* Update and rename core_virtual_Dpad.c to core_input_virtual_controls.c
* Delete examples/core/core_input_gamepad_virtual.png
* Add files via upload
* Update Makefile
* Update Makefile.Web
* Update README.md
* Update README.md
* Create core_input_virtual_controls.vcxproj
* Delete projects/VS2022/examples/core_input_virtual_controls.vcxproj
---
examples/Makefile | 1 +
examples/Makefile.Web | 1 +
examples/README.md | 245 +++++++++---------
examples/core/core_input_virtual_controls.c | 123 +++++++++
examples/core/core_input_virtual_controls.png | Bin 0 -> 9604 bytes
5 files changed, 248 insertions(+), 122 deletions(-)
create mode 100644 examples/core/core_input_virtual_controls.c
create mode 100644 examples/core/core_input_virtual_controls.png
diff --git a/examples/Makefile b/examples/Makefile
index c172584270cf..01c8e45d7d05 100644
--- a/examples/Makefile
+++ b/examples/Makefile
@@ -492,6 +492,7 @@ CORE = \
core/core_input_mouse \
core/core_input_mouse_wheel \
core/core_input_multitouch \
+ core/core_input_virtual_controls \
core/core_loading_thread \
core/core_random_sequence \
core/core_random_values \
diff --git a/examples/Makefile.Web b/examples/Makefile.Web
index bd48c2a4aad8..b176217ae9ed 100644
--- a/examples/Makefile.Web
+++ b/examples/Makefile.Web
@@ -359,6 +359,7 @@ CORE = \
core/core_input_mouse \
core/core_input_mouse_wheel \
core/core_input_multitouch \
+ core/core_input_virtual_controls \
core/core_loading_thread \
core/core_random_sequence \
core/core_random_values \
diff --git a/examples/README.md b/examples/README.md
index d573ff23ef54..ee528d04999a 100644
--- a/examples/README.md
+++ b/examples/README.md
@@ -31,31 +31,32 @@ Examples using raylib core platform functionality like window creation, inputs,
| 05 | [core_input_gamepad](core/core_input_gamepad.c) | | ⭐️☆☆☆ | 1.1 | **4.2** | [Ray](https://github.com/raysan5) |
| 06 | [core_input_multitouch](core/core_input_multitouch.c) | | ⭐️☆☆☆ | 2.1 | 2.5 | [Berni](https://github.com/Berni8k) |
| 07 | [core_input_gestures](core/core_input_gestures.c) | | ⭐️⭐️☆☆ | 1.4 | **4.2** | [Ray](https://github.com/raysan5) |
-| 08 | [core_2d_camera](core/core_2d_camera.c) | | ⭐️⭐️☆☆ | 1.5 | 3.0 | [Ray](https://github.com/raysan5) |
-| 09 | [core_2d_camera_mouse_zoom](core/core_2d_camera_mouse_zoom.c) | | ⭐️⭐️☆☆ | **4.2** | **4.2** | [Jeffery Myers](https://github.com/JeffM2501) |
-| 10 | [core_2d_camera_platformer](core/core_2d_camera_platformer.c) | | ⭐️⭐️⭐️☆ | 2.5 | 3.0 | [avyy](https://github.com/avyy) |
-| 11 | [core_2d_camera_split_screen](core/core_2d_camera_split_screen.c) | | ⭐️⭐️⭐️⭐️ | **4.5** | **4.5** | [Gabriel dos Santos Sanches](https://github.com/gabrielssanches) |
-| 12 | [core_3d_camera_mode](core/core_3d_camera_mode.c) | | ⭐️☆☆☆ | 1.0 | 1.0 | [Ray](https://github.com/raysan5) |
-| 13 | [core_3d_camera_free](core/core_3d_camera_free.c) | | ⭐️☆☆☆ | 1.3 | 1.3 | [Ray](https://github.com/raysan5) |
-| 14 | [core_3d_camera_first_person](core/core_3d_camera_first_person.c) | | ⭐️⭐️☆☆ | 1.3 | 1.3 | [Ray](https://github.com/raysan5) |
-| 15 | [core_3d_camera:split_screen](core/core_3d_camera_split_screen.c) | | ⭐️⭐️⭐️⭐️ | 3.7 | **4.0** | [Jeffery Myers](https://github.com/JeffM2501) |
-| 16 | [core_3d_picking](core/core_3d_picking.c) | | ⭐️⭐️☆☆ | 1.3 | **4.0** | [Ray](https://github.com/raysan5) |
-| 17 | [core_world_screen](core/core_world_screen.c) | | ⭐️⭐️☆☆ | 1.3 | 1.4 | [Ray](https://github.com/raysan5) |
-| 18 | [core_custom_logging](core/core_custom_logging.c) | | ⭐️⭐️⭐️☆ | 2.5 | 2.5 | [Pablo Marcos Oltra](https://github.com/pamarcos) |
-| 19 | [core_window_flags](core/core_window_flags.c) | | ⭐️⭐️⭐️☆ | 3.5 | 3.5 | [Ray](https://github.com/raysan5) |
-| 20 | [core_window_letterbox](core/core_window_letterbox.c) | | ⭐️⭐️☆☆ | 2.5 | **4.0** | [Anata](https://github.com/anatagawa) |
-| 21 | [core_window_should_close](core/core_window_should_close.c) | | ⭐️☆☆☆ | **4.2** | **4.2** | [Ray](https://github.com/raysan5) |
-| 22 | [core_drop_files](core/core_drop_files.c) | | ⭐️⭐️☆☆ | 1.3 | **4.2** | [Ray](https://github.com/raysan5) |
-| 23 | [core_random_values](core/core_random_values.c) | | ⭐️☆☆☆ | 1.1 | 1.1 | [Ray](https://github.com/raysan5) |
-| 24 | [core_storage_values](core/core_storage_values.c) | | ⭐️⭐️☆☆ | 1.4 | **4.2** | [Ray](https://github.com/raysan5) |
-| 25 | [core_vr_simulator](core/core_vr_simulator.c) | | ⭐️⭐️⭐️☆ | 2.5 | **4.0** | [Ray](https://github.com/raysan5) |
-| 26 | [core_loading_thread](core/core_loading_thread.c) | | ⭐️⭐️⭐️☆ | 2.5 | 3.0 | [Ray](https://github.com/raysan5) |
-| 27 | [core_scissor_test](core/core_scissor_test.c) | | ⭐️☆☆☆ | 2.5 | 3.0 | [Chris Dill](https://github.com/MysteriousSpace) |
-| 28 | [core_basic_screen_manager](core/core_basic_screen_manager.c) | | ⭐️☆☆☆ | **4.0** | **4.0** | [Ray](https://github.com/raysan5) |
-| 29 | [core_custom_frame_control](core/core_custom_frame_control.c) | | ⭐️⭐️⭐️⭐️ | **4.0** | **4.0** | [Ray](https://github.com/raysan5) |
-| 30 | [core_smooth_pixelperfect](core/core_smooth_pixelperfect.c) | | ⭐️⭐️⭐️☆ | 3.7 | **4.0** | [Giancamillo Alessandroni](https://github.com/NotManyIdeasDev) |
-| 31 | [core_window_should_close](core/core_window_should_close.c) | | ⭐️⭐️☆☆ | **4.2** | **4.2** | [Ray](https://github.com/raysan5) |
-| 32 | [core_random_sequence](core/core_random_sequence.c) | | ⭐️☆☆☆ | **5.0** | **5.0** | [REDl3east](https://github.com/REDl3east) |
+| 08 | [core_input_virtual_controls](core/core_input_virtual_controls.c) | | ⭐️⭐️☆☆ | **5.0** | **5.0** | [oblerion](https://github.com/oblerion) |
+| 09 | [core_2d_camera](core/core_2d_camera.c) | | ⭐️⭐️☆☆ | 1.5 | 3.0 | [Ray](https://github.com/raysan5) |
+| 10 | [core_2d_camera_mouse_zoom](core/core_2d_camera_mouse_zoom.c) | | ⭐️⭐️☆☆ | **4.2** | **4.2** | [Jeffery Myers](https://github.com/JeffM2501) |
+| 11 | [core_2d_camera_platformer](core/core_2d_camera_platformer.c) | | ⭐️⭐️⭐️☆ | 2.5 | 3.0 | [avyy](https://github.com/avyy) |
+| 12 | [core_2d_camera_split_screen](core/core_2d_camera_split_screen.c) | | ⭐️⭐️⭐️⭐️ | **4.5** | **4.5** | [Gabriel dos Santos Sanches](https://github.com/gabrielssanches) |
+| 13 | [core_3d_camera_mode](core/core_3d_camera_mode.c) | | ⭐️☆☆☆ | 1.0 | 1.0 | [Ray](https://github.com/raysan5) |
+| 14 | [core_3d_camera_free](core/core_3d_camera_free.c) | | ⭐️☆☆☆ | 1.3 | 1.3 | [Ray](https://github.com/raysan5) |
+| 15 | [core_3d_camera_first_person](core/core_3d_camera_first_person.c) | | ⭐️⭐️☆☆ | 1.3 | 1.3 | [Ray](https://github.com/raysan5) |
+| 16 | [core_3d_camera:split_screen](core/core_3d_camera_split_screen.c) | | ⭐️⭐️⭐️⭐️ | 3.7 | **4.0** | [Jeffery Myers](https://github.com/JeffM2501) |
+| 17 | [core_3d_picking](core/core_3d_picking.c) | | ⭐️⭐️☆☆ | 1.3 | **4.0** | [Ray](https://github.com/raysan5) |
+| 18 | [core_world_screen](core/core_world_screen.c) | | ⭐️⭐️☆☆ | 1.3 | 1.4 | [Ray](https://github.com/raysan5) |
+| 19 | [core_custom_logging](core/core_custom_logging.c) | | ⭐️⭐️⭐️☆ | 2.5 | 2.5 | [Pablo Marcos Oltra](https://github.com/pamarcos) |
+| 20 | [core_window_flags](core/core_window_flags.c) | | ⭐️⭐️⭐️☆ | 3.5 | 3.5 | [Ray](https://github.com/raysan5) |
+| 21 | [core_window_letterbox](core/core_window_letterbox.c) | | ⭐️⭐️☆☆ | 2.5 | **4.0** | [Anata](https://github.com/anatagawa) |
+| 22 | [core_window_should_close](core/core_window_should_close.c) | | ⭐️☆☆☆ | **4.2** | **4.2** | [Ray](https://github.com/raysan5) |
+| 23 | [core_drop_files](core/core_drop_files.c) | | ⭐️⭐️☆☆ | 1.3 | **4.2** | [Ray](https://github.com/raysan5) |
+| 24 | [core_random_values](core/core_random_values.c) | | ⭐️☆☆☆ | 1.1 | 1.1 | [Ray](https://github.com/raysan5) |
+| 25 | [core_storage_values](core/core_storage_values.c) | | ⭐️⭐️☆☆ | 1.4 | **4.2** | [Ray](https://github.com/raysan5) |
+| 26 | [core_vr_simulator](core/core_vr_simulator.c) | | ⭐️⭐️⭐️☆ | 2.5 | **4.0** | [Ray](https://github.com/raysan5) |
+| 27 | [core_loading_thread](core/core_loading_thread.c) | | ⭐️⭐️⭐️☆ | 2.5 | 3.0 | [Ray](https://github.com/raysan5) |
+| 28 | [core_scissor_test](core/core_scissor_test.c) | | ⭐️☆☆☆ | 2.5 | 3.0 | [Chris Dill](https://github.com/MysteriousSpace) |
+| 29 | [core_basic_screen_manager](core/core_basic_screen_manager.c) | | ⭐️☆☆☆ | **4.0** | **4.0** | [Ray](https://github.com/raysan5) |
+| 30 | [core_custom_frame_control](core/core_custom_frame_control.c) | | ⭐️⭐️⭐️⭐️ | **4.0** | **4.0** | [Ray](https://github.com/raysan5) |
+| 31 | [core_smooth_pixelperfect](core/core_smooth_pixelperfect.c) | | ⭐️⭐️⭐️☆ | 3.7 | **4.0** | [Giancamillo Alessandroni](https://github.com/NotManyIdeasDev) |
+| 32 | [core_window_should_close](core/core_window_should_close.c) | | ⭐️⭐️☆☆ | **4.2** | **4.2** | [Ray](https://github.com/raysan5) |
+| 33 | [core_random_sequence](core/core_random_sequence.c) | | ⭐️☆☆☆ | **5.0** | **5.0** | [REDl3east](https://github.com/REDl3east) |
### category: shapes
@@ -63,22 +64,22 @@ Examples using raylib shapes drawing functionality, provided by raylib [shapes](
| ## | example | image | difficulty
level | version
created | last version
updated | original
developer |
|----|----------|--------|:-------------------:|:------------------:|:------------------:|:----------|
-| 31 | [shapes_basic_shapes](shapes/shapes_basic_shapes.c) | | ⭐️☆☆☆ | 1.0 | **4.0** | [Ray](https://github.com/raysan5) |
-| 32 | [shapes_bouncing_ball](shapes/shapes_bouncing_ball.c) | | ⭐️☆☆☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) |
-| 33 | [shapes_colors_palette](shapes/shapes_colors_palette.c) | | ⭐️⭐️☆☆ | 1.0 | 2.5 | [Ray](https://github.com/raysan5) |
-| 34 | [shapes_logo_raylib](shapes/shapes_logo_raylib.c) | | ⭐️☆☆☆ | 1.0 | 1.0 | [Ray](https://github.com/raysan5) |
-| 35 | [shapes_logo_raylib_anim](shapes/shapes_logo_raylib_anim.c) | | ⭐️⭐️☆☆ | 2.5 | **4.0** | [Ray](https://github.com/raysan5) |
-| 36 | [shapes_rectangle_scaling](shapes/shapes_rectangle_scaling.c) | | ⭐️⭐️☆☆ | 2.5 | 2.5 | [Vlad Adrian](https://github.com/demizdor) |
-| 37 | [shapes_lines_bezier](shapes/shapes_lines_bezier.c) | | ⭐️☆☆☆ | 1.7 | 1.7 | [Ray](https://github.com/raysan5) |
-| 38 | [shapes_collision_area](shapes/shapes_collision_area.c) | | ⭐️⭐️☆☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) |
-| 39 | [shapes_following_eyes](shapes/shapes_following_eyes.c) | | ⭐️⭐️☆☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) |
-| 40 | [shapes_easings_ball_anim](shapes/shapes_easings_ball_anim.c) | | ⭐️⭐️☆☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) |
-| 41 | [shapes_easings_box_anim](shapes/shapes_easings_box_anim.c) | | ⭐️⭐️☆☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) |
-| 42 | [shapes_easings_rectangle_array](shapes/shapes_easings_rectangle_array.c) | | ⭐️⭐️⭐️☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) |
-| 43 | [shapes_draw_ring](shapes/shapes_draw_ring.c) | | ⭐️⭐️⭐️☆ | 2.5 | 2.5 | [Vlad Adrian](https://github.com/demizdor) |
-| 44 | [shapes_draw_circle_sector](shapes/shapes_draw_circle_sector.c) | | ⭐️⭐️⭐️☆ | 2.5 | 2.5 | [Vlad Adrian](https://github.com/demizdor) |
-| 45 | [shapes_draw_rectangle_rounded](shapes/shapes_draw_rectangle_rounded.c) | | ⭐️⭐️⭐️☆ | 2.5 | 2.5 | [Vlad Adrian](https://github.com/demizdor) |
-| 46 | [shapes_top_down_lights](shapes/shapes_top_down_lights.c) | | ⭐️⭐️⭐️⭐️ | **4.2** | **4.2** | [Jeffery Myers](https://github.com/JeffM2501) |
+| 34 | [shapes_basic_shapes](shapes/shapes_basic_shapes.c) | | ⭐️☆☆☆ | 1.0 | **4.0** | [Ray](https://github.com/raysan5) |
+| 35 | [shapes_bouncing_ball](shapes/shapes_bouncing_ball.c) | | ⭐️☆☆☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) |
+| 36 | [shapes_colors_palette](shapes/shapes_colors_palette.c) | | ⭐️⭐️☆☆ | 1.0 | 2.5 | [Ray](https://github.com/raysan5) |
+| 37 | [shapes_logo_raylib](shapes/shapes_logo_raylib.c) | | ⭐️☆☆☆ | 1.0 | 1.0 | [Ray](https://github.com/raysan5) |
+| 38 | [shapes_logo_raylib_anim](shapes/shapes_logo_raylib_anim.c) | | ⭐️⭐️☆☆ | 2.5 | **4.0** | [Ray](https://github.com/raysan5) |
+| 39 | [shapes_rectangle_scaling](shapes/shapes_rectangle_scaling.c) | | ⭐️⭐️☆☆ | 2.5 | 2.5 | [Vlad Adrian](https://github.com/demizdor) |
+| 40 | [shapes_lines_bezier](shapes/shapes_lines_bezier.c) | | ⭐️☆☆☆ | 1.7 | 1.7 | [Ray](https://github.com/raysan5) |
+| 41 | [shapes_collision_area](shapes/shapes_collision_area.c) | | ⭐️⭐️☆☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) |
+| 42 | [shapes_following_eyes](shapes/shapes_following_eyes.c) | | ⭐️⭐️☆☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) |
+| 43 | [shapes_easings_ball_anim](shapes/shapes_easings_ball_anim.c) | | ⭐️⭐️☆☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) |
+| 44 | [shapes_easings_box_anim](shapes/shapes_easings_box_anim.c) | | ⭐️⭐️☆☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) |
+| 45 | [shapes_easings_rectangle_array](shapes/shapes_easings_rectangle_array.c) | | ⭐️⭐️⭐️☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) |
+| 46 | [shapes_draw_ring](shapes/shapes_draw_ring.c) | | ⭐️⭐️⭐️☆ | 2.5 | 2.5 | [Vlad Adrian](https://github.com/demizdor) |
+| 47 | [shapes_draw_circle_sector](shapes/shapes_draw_circle_sector.c) | | ⭐️⭐️⭐️☆ | 2.5 | 2.5 | [Vlad Adrian](https://github.com/demizdor) |
+| 48 | [shapes_draw_rectangle_rounded](shapes/shapes_draw_rectangle_rounded.c) | | ⭐️⭐️⭐️☆ | 2.5 | 2.5 | [Vlad Adrian](https://github.com/demizdor) |
+| 49 | [shapes_top_down_lights](shapes/shapes_top_down_lights.c) | | ⭐️⭐️⭐️⭐️ | **4.2** | **4.2** | [Jeffery Myers](https://github.com/JeffM2501) |
### category: textures
@@ -86,28 +87,28 @@ Examples using raylib textures functionality, including image/textures loading/g
| ## | example | image | difficulty
level | version
created | last version
updated | original
developer |
|----|----------|--------|:-------------------:|:------------------:|:------------------:|:----------|
-| 47 | [textures_logo_raylib](textures/textures_logo_raylib.c) | | ⭐️☆☆☆ | 1.0 | 1.0 | [Ray](https://github.com/raysan5) |
-| 48 | [textures_srcrec_dstrec](textures/textures_srcrec_dstrec.c) | | ⭐️⭐️⭐️☆ | 1.3 | 1.3 | [Ray](https://github.com/raysan5) |
-| 49 | [textures_image_drawing](textures/textures_image_drawing.c) | | ⭐️⭐️☆☆ | 1.4 | 1.4 | [Ray](https://github.com/raysan5) |
-| 50 | [textures_image_generation](textures/textures_image_generation.c) | | ⭐️⭐️☆☆ | 1.8 | 1.8 | [Ray](https://github.com/raysan5) |
-| 51 | [textures_image_loading](textures/textures_image_loading.c) | | ⭐️☆☆☆ | 1.3 | 1.3 | [Ray](https://github.com/raysan5) |
-| 52 | [textures_image_processing](textures/textures_image_processing.c) | | ⭐️⭐️⭐️☆ | 1.4 | 3.5 | [Ray](https://github.com/raysan5) |
-| 53 | [textures_image_text](textures/textures_image_text.c) | | ⭐️⭐️☆☆ | 1.8 | **4.0** | [Ray](https://github.com/raysan5) |
-| 54 | [textures_to_image](textures/textures_to_image.c) | | ⭐️☆☆☆ | 1.3 | **4.0** | [Ray](https://github.com/raysan5) |
-| 55 | [textures_raw_data](textures/textures_raw_data.c) | | ⭐️⭐️⭐️☆ | 1.3 | 3.5 | [Ray](https://github.com/raysan5) |
-| 56 | [textures_particles_blending](textures/textures_particles_blending.c) | | ⭐️☆☆☆ | 1.7 | 3.5 | [Ray](https://github.com/raysan5) |
-| 57 | [textures_npatch_drawing](textures/textures_npatch_drawing.c) | | ⭐️⭐️⭐️☆ | 2.0 | 2.5 | [Jorge A. Gomes](https://github.com/overdev) |
-| 58 | [textures_background_scrolling](textures/textures_background_scrolling.c) | | ⭐️☆☆☆ | 2.0 | 2.5 | [Ray](https://github.com/raysan5) |
-| 59 | [textures_sprite_anim](textures/textures_sprite_anim.c) | | ⭐️⭐️☆☆ | 1.3 | 1.3 | [Ray](https://github.com/raysan5) |
-| 60 | [textures_sprite_button](textures/textures_sprite_button.c) | | ⭐️⭐️☆☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) |
-| 61 | [textures_sprite_explosion](textures/textures_sprite_explosion.c) | | ⭐️⭐️☆☆ | 2.5 | 3.5 | [Ray](https://github.com/raysan5) |
-| 62 | [textures_bunnymark](textures/textures_bunnymark.c) | | ⭐️⭐️⭐️☆ | 1.6 | 2.5 | [Ray](https://github.com/raysan5) |
-| 63 | [textures_mouse_painting](textures/textures_mouse_painting.c) | | ⭐️⭐️⭐️☆ | 3.0 | 3.0 | [Chris Dill](https://github.com/MysteriousSpace) |
-| 64 | [textures_blend_modes](textures/textures_blend_modes.c) | | ⭐️☆☆☆ | 3.5 | 3.5 | [Karlo Licudine](https://github.com/accidentalrebel) |
-| 65 | [textures_draw_tiled](textures/textures_draw_tiled.c) | | ⭐️⭐️⭐️☆ | 3.0 | **4.2** | [Vlad Adrian](https://github.com/demizdor) |
-| 66 | [textures_polygon](textures/textures_polygon.c) | | ⭐️☆☆☆ | 3.7 | 3.7 | [Chris Camacho](https://github.com/codifies) |
-| 67 | [textures_fog_of_war](textures/textures_fog_of_war.c) | | ⭐️⭐️⭐️☆ | **4.2** | **4.2** | [Ray](https://github.com/raysan5) |
-| 68 | [textures_gif_player](textures/textures_gif_player.c) | | ⭐️⭐️⭐️☆ | **4.2** | **4.2** | [Ray](https://github.com/raysan5) |
+| 50 | [textures_logo_raylib](textures/textures_logo_raylib.c) | | ⭐️☆☆☆ | 1.0 | 1.0 | [Ray](https://github.com/raysan5) |
+| 51 | [textures_srcrec_dstrec](textures/textures_srcrec_dstrec.c) | | ⭐️⭐️⭐️☆ | 1.3 | 1.3 | [Ray](https://github.com/raysan5) |
+| 52 | [textures_image_drawing](textures/textures_image_drawing.c) | | ⭐️⭐️☆☆ | 1.4 | 1.4 | [Ray](https://github.com/raysan5) |
+| 53 | [textures_image_generation](textures/textures_image_generation.c) | | ⭐️⭐️☆☆ | 1.8 | 1.8 | [Ray](https://github.com/raysan5) |
+| 54 | [textures_image_loading](textures/textures_image_loading.c) | | ⭐️☆☆☆ | 1.3 | 1.3 | [Ray](https://github.com/raysan5) |
+| 55 | [textures_image_processing](textures/textures_image_processing.c) | | ⭐️⭐️⭐️☆ | 1.4 | 3.5 | [Ray](https://github.com/raysan5) |
+| 56 | [textures_image_text](textures/textures_image_text.c) | | ⭐️⭐️☆☆ | 1.8 | **4.0** | [Ray](https://github.com/raysan5) |
+| 57 | [textures_to_image](textures/textures_to_image.c) | | ⭐️☆☆☆ | 1.3 | **4.0** | [Ray](https://github.com/raysan5) |
+| 58 | [textures_raw_data](textures/textures_raw_data.c) | | ⭐️⭐️⭐️☆ | 1.3 | 3.5 | [Ray](https://github.com/raysan5) |
+| 59 | [textures_particles_blending](textures/textures_particles_blending.c) | | ⭐️☆☆☆ | 1.7 | 3.5 | [Ray](https://github.com/raysan5) |
+| 60 | [textures_npatch_drawing](textures/textures_npatch_drawing.c) | | ⭐️⭐️⭐️☆ | 2.0 | 2.5 | [Jorge A. Gomes](https://github.com/overdev) |
+| 61 | [textures_background_scrolling](textures/textures_background_scrolling.c) | | ⭐️☆☆☆ | 2.0 | 2.5 | [Ray](https://github.com/raysan5) |
+| 62 | [textures_sprite_anim](textures/textures_sprite_anim.c) | | ⭐️⭐️☆☆ | 1.3 | 1.3 | [Ray](https://github.com/raysan5) |
+| 63 | [textures_sprite_button](textures/textures_sprite_button.c) | | ⭐️⭐️☆☆ | 2.5 | 2.5 | [Ray](https://github.com/raysan5) |
+| 64 | [textures_sprite_explosion](textures/textures_sprite_explosion.c) | | ⭐️⭐️☆☆ | 2.5 | 3.5 | [Ray](https://github.com/raysan5) |
+| 65 | [textures_bunnymark](textures/textures_bunnymark.c) | | ⭐️⭐️⭐️☆ | 1.6 | 2.5 | [Ray](https://github.com/raysan5) |
+| 66 | [textures_mouse_painting](textures/textures_mouse_painting.c) | | ⭐️⭐️⭐️☆ | 3.0 | 3.0 | [Chris Dill](https://github.com/MysteriousSpace) |
+| 67 | [textures_blend_modes](textures/textures_blend_modes.c) | | ⭐️☆☆☆ | 3.5 | 3.5 | [Karlo Licudine](https://github.com/accidentalrebel) |
+| 68 | [textures_draw_tiled](textures/textures_draw_tiled.c) | | ⭐️⭐️⭐️☆ | 3.0 | **4.2** | [Vlad Adrian](https://github.com/demizdor) |
+| 69 | [textures_polygon](textures/textures_polygon.c) | | ⭐️☆☆☆ | 3.7 | 3.7 | [Chris Camacho](https://github.com/codifies) |
+| 70 | [textures_fog_of_war](textures/textures_fog_of_war.c) | | ⭐️⭐️⭐️☆ | **4.2** | **4.2** | [Ray](https://github.com/raysan5) |
+| 71 | [textures_gif_player](textures/textures_gif_player.c) | | ⭐️⭐️⭐️☆ | **4.2** | **4.2** | [Ray](https://github.com/raysan5) |
### category: text
@@ -115,18 +116,18 @@ Examples using raylib text functionality, including sprite fonts loading/generat
| ## | example | image | difficulty
level | version
created | last version
updated | original
developer |
|----|----------|--------|:-------------------:|:------------------:|:------------------:|:----------|
-| 69 | [text_raylib_fonts](text/text_raylib_fonts.c) | | ⭐️☆☆☆ | 1.7 | 3.7 | [Ray](https://github.com/raysan5) |
-| 70 | [text_font_spritefont](text/text_font_spritefont.c) | | ⭐️☆☆☆ | 1.0 | 1.0 | [Ray](https://github.com/raysan5) |
-| 71 | [text_font_filters](text/text_font_filters.c) | | ⭐️⭐️☆☆ | 1.3 | **4.2** | [Ray](https://github.com/raysan5) |
-| 72 | [text_font_loading](text/text_font_loading.c) | | ⭐️☆☆☆ | 1.4 | 3.0 | [Ray](https://github.com/raysan5) |
-| 73 | [text_font_sdf](text/text_font_sdf.c) | | ⭐️⭐️⭐️☆ | 1.3 | **4.0** | [Ray](https://github.com/raysan5) |
-| 74 | [text_format_text](text/text_format_text.c) | | ⭐️☆☆☆ | 1.1 | 3.0 | [Ray](https://github.com/raysan5) |
-| 75 | [text_input_box](text/text_input_box.c) | | ⭐️⭐️☆☆ | 1.7 | 3.5 | [Ray](https://github.com/raysan5) |
-| 76 | [text_writing_anim](text/text_writing_anim.c) | | ⭐️⭐️☆☆ | 1.4 | 1.4 | [Ray](https://github.com/raysan5) |
-| 77 | [text_rectangle_bounds](text/text_rectangle_bounds.c) | | ⭐️⭐️⭐️⭐️ | 2.5 | **4.0** | [Vlad Adrian](https://github.com/demizdor) |
-| 78 | [text_unicode](text/text_unicode.c) | | ⭐️⭐️⭐️⭐️ | 2.5 | **4.0** | [Vlad Adrian](https://github.com/demizdor) |
-| 79 | [text_draw_3d](text/text_draw_3d.c) | | ⭐️⭐️⭐️⭐️ | 3.5 | **4.0** | [Vlad Adrian](https://github.com/demizdor) |
-| 80 | [text_codepoints_loading](text/text_codepoints_loading.c) | | ⭐️⭐️⭐️☆ | **4.2** | **4.2** | [Ray](https://github.com/raysan5) |
+| 72 | [text_raylib_fonts](text/text_raylib_fonts.c) | | ⭐️☆☆☆ | 1.7 | 3.7 | [Ray](https://github.com/raysan5) |
+| 73 | [text_font_spritefont](text/text_font_spritefont.c) | | ⭐️☆☆☆ | 1.0 | 1.0 | [Ray](https://github.com/raysan5) |
+| 74 | [text_font_filters](text/text_font_filters.c) | | ⭐️⭐️☆☆ | 1.3 | **4.2** | [Ray](https://github.com/raysan5) |
+| 75 | [text_font_loading](text/text_font_loading.c) | | ⭐️☆☆☆ | 1.4 | 3.0 | [Ray](https://github.com/raysan5) |
+| 76 | [text_font_sdf](text/text_font_sdf.c) | | ⭐️⭐️⭐️☆ | 1.3 | **4.0** | [Ray](https://github.com/raysan5) |
+| 77 | [text_format_text](text/text_format_text.c) | | ⭐️☆☆☆ | 1.1 | 3.0 | [Ray](https://github.com/raysan5) |
+| 78 | [text_input_box](text/text_input_box.c) | | ⭐️⭐️☆☆ | 1.7 | 3.5 | [Ray](https://github.com/raysan5) |
+| 79 | [text_writing_anim](text/text_writing_anim.c) | | ⭐️⭐️☆☆ | 1.4 | 1.4 | [Ray](https://github.com/raysan5) |
+| 80 | [text_rectangle_bounds](text/text_rectangle_bounds.c) | | ⭐️⭐️⭐️⭐️ | 2.5 | **4.0** | [Vlad Adrian](https://github.com/demizdor) |
+| 81 | [text_unicode](text/text_unicode.c) | | ⭐️⭐️⭐️⭐️ | 2.5 | **4.0** | [Vlad Adrian](https://github.com/demizdor) |
+| 82 | [text_draw_3d](text/text_draw_3d.c) | | ⭐️⭐️⭐️⭐️ | 3.5 | **4.0** | [Vlad Adrian](https://github.com/demizdor) |
+| 83 | [text_codepoints_loading](text/text_codepoints_loading.c) | | ⭐️⭐️⭐️☆ | **4.2** | **4.2** | [Ray](https://github.com/raysan5) |
### category: models
@@ -134,25 +135,25 @@ Examples using raylib models functionality, including models loading/generation
| ## | example | image | difficulty
level | version
created | last version
updated | original
developer |
|----|----------|--------|:-------------------:|:------------------:|:------------------:|:----------|
-| 81 | [models_animation](models/models_animation.c) | | ⭐️⭐️☆☆ | 2.5 | 3.5 | [culacant](https://github.com/culacant) |
-| 82 | [models_billboard](models/models_billboard.c) | | ⭐️⭐️⭐️☆ | 1.3 | 3.5 | [Ray](https://github.com/raysan5) |
-| 83 | [models_box_collisions](models/models_box_collisions.c) | | ⭐️☆☆☆ | 1.3 | 3.5 | [Ray](https://github.com/raysan5) |
-| 84 | [models_cubicmap](models/models_cubicmap.c) | | ⭐️⭐️☆☆ | 1.8 | 3.5 | [Ray](https://github.com/raysan5) |
-| 85 | [models_first_person_maze](models/models_first_person_maze.c) | | ⭐️⭐️☆☆ | 2.5 | 3.5 | [Ray](https://github.com/raysan5) |
-| 86 | [models_geometric_shapes](models/models_geometric_shapes.c) | | ⭐️☆☆☆ | 1.0 | 3.5 | [Ray](https://github.com/raysan5) |
-| 87 | [models_mesh_generation](models/models_mesh_generation.c) | | ⭐️⭐️☆☆ | 1.8 | **4.0** | [Ray](https://github.com/raysan5) |
-| 88 | [models_mesh_picking](models/models_mesh_picking.c) | | ⭐️⭐️⭐️☆ | 1.7 | **4.0** | [Joel Davis](https://github.com/joeld42) |
-| 89 | [models_loading](models/models_loading.c) | | ⭐️☆☆☆ | 2.5 | **4.0** | [Ray](https://github.com/raysan5) |
-| 90 | [models_loading_gltf](models/models_loading_gltf.c) | | ⭐️☆☆☆ | 3.7 | **4.2** | [Ray](https://github.com/raysan5) |
-| 91 | [models_loading_vox](models/models_loading_vox.c) | | ⭐️☆☆☆ | **4.0** | **4.0** | [Johann Nadalutti](https://github.com/procfxgen) |
-| 92 | [models_loading_m3d](models/models_loading_m3d.c) | | ⭐️☆☆☆ | **4.2** | **4.2** | [bzt](https://bztsrc.gitlab.io/model3d) |
-| 93 | [models_orthographic_projection](models/models_orthographic_projection.c) | | ⭐️☆☆☆ | 2.0 | 3.7 | [Max Danielsson](https://github.com/autious) |
-| 94 | [models_point_rendering](models/models_point_rendering.c) | | ⭐️⭐️☆☆ | 5.0 | 5.0 | [Reese Gallagher](https://github.com/satchelfrost) |
-| 95 | [models_rlgl_solar_system](models/models_rlgl_solar_system.c) | | ⭐️⭐️⭐️⭐️ | 2.5 | **4.0** | [Ray](https://github.com/raysan5) |
-| 96 | [models_yaw_pitch_roll](models/models_yaw_pitch_roll.c) | | ⭐️⭐️☆☆ | 1.8 | **4.0** | [Berni](https://github.com/Berni8k) |
-| 97 | [models_waving_cubes](models/models_waving_cubes.c) | | ⭐️⭐️⭐️☆ | 2.5 | 3.7 | [codecat](https://github.com/codecat) |
-| 98 | [models_heightmap](models/models_heightmap.c) | | ⭐️☆☆☆ | 1.8 | 3.5 | [Ray](https://github.com/raysan5) |
-| 99 | [models_skybox](models/models_skybox.c) | | ⭐️⭐️☆☆ | 1.8 | **4.0** | [Ray](https://github.com/raysan5) |
+| 84 | [models_animation](models/models_animation.c) | | ⭐️⭐️☆☆ | 2.5 | 3.5 | [culacant](https://github.com/culacant) |
+| 85 | [models_billboard](models/models_billboard.c) | | ⭐️⭐️⭐️☆ | 1.3 | 3.5 | [Ray](https://github.com/raysan5) |
+| 86 | [models_box_collisions](models/models_box_collisions.c) | | ⭐️☆☆☆ | 1.3 | 3.5 | [Ray](https://github.com/raysan5) |
+| 87 | [models_cubicmap](models/models_cubicmap.c) | | ⭐️⭐️☆☆ | 1.8 | 3.5 | [Ray](https://github.com/raysan5) |
+| 88 | [models_first_person_maze](models/models_first_person_maze.c) | | ⭐️⭐️☆☆ | 2.5 | 3.5 | [Ray](https://github.com/raysan5) |
+| 89 | [models_geometric_shapes](models/models_geometric_shapes.c) | | ⭐️☆☆☆ | 1.0 | 3.5 | [Ray](https://github.com/raysan5) |
+| 90 | [models_mesh_generation](models/models_mesh_generation.c) | | ⭐️⭐️☆☆ | 1.8 | **4.0** | [Ray](https://github.com/raysan5) |
+| 91 | [models_mesh_picking](models/models_mesh_picking.c) | | ⭐️⭐️⭐️☆ | 1.7 | **4.0** | [Joel Davis](https://github.com/joeld42) |
+| 92 | [models_loading](models/models_loading.c) | | ⭐️☆☆☆ | 2.5 | **4.0** | [Ray](https://github.com/raysan5) |
+| 93 | [models_loading_gltf](models/models_loading_gltf.c) | | ⭐️☆☆☆ | 3.7 | **4.2** | [Ray](https://github.com/raysan5) |
+| 94 | [models_loading_vox](models/models_loading_vox.c) | | ⭐️☆☆☆ | **4.0** | **4.0** | [Johann Nadalutti](https://github.com/procfxgen) |
+| 95 | [models_loading_m3d](models/models_loading_m3d.c) | | ⭐️☆☆☆ | **4.2** | **4.2** | [bzt](https://bztsrc.gitlab.io/model3d) |
+| 96 | [models_orthographic_projection](models/models_orthographic_projection.c) | | ⭐️☆☆☆ | 2.0 | 3.7 | [Max Danielsson](https://github.com/autious) |
+| 97 | [models_point_rendering](models/models_point_rendering.c) | | ⭐️⭐️☆☆ | 5.0 | 5.0 | [Reese Gallagher](https://github.com/satchelfrost) |
+| 98 | [models_rlgl_solar_system](models/models_rlgl_solar_system.c) | | ⭐️⭐️⭐️⭐️ | 2.5 | **4.0** | [Ray](https://github.com/raysan5) |
+| 99 | [models_yaw_pitch_roll](models/models_yaw_pitch_roll.c) | | ⭐️⭐️☆☆ | 1.8 | **4.0** | [Berni](https://github.com/Berni8k) |
+| 100 | [models_waving_cubes](models/models_waving_cubes.c) | | ⭐️⭐️⭐️☆ | 2.5 | 3.7 | [codecat](https://github.com/codecat) |
+| 101 | [models_heightmap](models/models_heightmap.c) | | ⭐️☆☆☆ | 1.8 | 3.5 | [Ray](https://github.com/raysan5) |
+| 102 | [models_skybox](models/models_skybox.c) | | ⭐️⭐️☆☆ | 1.8 | **4.0** | [Ray](https://github.com/raysan5) |
### category: shaders
@@ -160,25 +161,25 @@ Examples using raylib shaders functionality, including shaders loading, paramete
| ## | example | image | difficulty
level | version
created | last version
updated | original
developer |
|----|----------|--------|:-------------------:|:------------------:|:------------------:|:----------|
-| 100 | [shaders_basic_lighting](shaders/shaders_basic_lighting.c) | | ⭐️⭐️⭐️⭐️ | 3.0 | **4.2** | [Chris Camacho](https://github.com/codifies) |
-| 101 | [shaders_model_shader](shaders/shaders_model_shader.c) | | ⭐️⭐️☆☆ | 1.3 | 3.7 | [Ray](https://github.com/raysan5) |
-| 102 | [shaders_shapes_textures](shaders/shaders_shapes_textures.c) | | ⭐️⭐️☆☆ | 1.7 | 3.7 | [Ray](https://github.com/raysan5) |
-| 103 | [shaders_custom_uniform](shaders/shaders_custom_uniform.c) | | ⭐️⭐️☆☆ | 1.3 | **4.0** | [Ray](https://github.com/raysan5) |
-| 104 | [shaders_postprocessing](shaders/shaders_postprocessing.c) | | ⭐️⭐️⭐️☆ | 1.3 | **4.0** | [Ray](https://github.com/raysan5) |
-| 105 | [shaders_palette_switch](shaders/shaders_palette_switch.c) | | ⭐️⭐️⭐️☆ | 2.5 | 3.7 | [Marco Lizza](https://github.com/MarcoLizza) |
-| 106 | [shaders_raymarching](shaders/shaders_raymarching.c) | | ⭐️⭐️⭐️⭐️ | 2.0 | **4.2** | [Ray](https://github.com/raysan5) |
-| 107 | [shaders_texture_drawing](shaders/shaders_texture_drawing.c) | | ⭐️⭐️☆☆ | 2.0 | 3.7 | [Michał Ciesielski](https://github.com/) |
-| 108 | [shaders_texture_outline](shaders/shaders_texture_outline.c) | | ⭐️⭐️⭐️☆ | **4.0** | **4.0** | [Samuel Skiff](https://github.com/GoldenThumbs) |
-| 109 | [shaders_texture_waves](shaders/shaders_texture_waves.c) | | ⭐️⭐️☆☆ | 2.5 | 3.7 | [Anata](https://github.com/anatagawa) |
-| 110 | [shaders_julia_set](shaders/shaders_julia_set.c) | | ⭐️⭐️⭐️☆ | 2.5 | **4.0** | [eggmund](https://github.com/eggmund) |
-| 111 | [shaders_eratosthenes](shaders/shaders_eratosthenes.c) | | ⭐️⭐️⭐️☆ | 2.5 | **4.0** | [ProfJski](https://github.com/ProfJski) |
-| 112 | [shaders_fog](shaders/shaders_fog.c) | | ⭐️⭐️⭐️☆ | 2.5 | 3.7 | [Chris Camacho](https://github.com/codifies) |
-| 113 | [shaders_simple_mask](shaders/shaders_simple_mask.c) | | ⭐️⭐️☆☆ | 2.5 | 3.7 | [Chris Camacho](https://github.com/codifies) |
-| 114 | [shaders_hot_reloading](shaders/shaders_hot_reloading.c) | | ⭐️⭐️⭐️☆ | 3.0 | 3.5 | [Ray](https://github.com/raysan5) |
-| 115 | [shaders_mesh_instancing](shaders/shaders_mesh_instancing.c) | | ⭐️⭐️⭐️⭐️ | 3.7 | **4.2** | [seanpringle](https://github.com/seanpringle) |
-| 116 | [shaders_multi_sample2d](shaders/shaders_multi_sample2d.c) | | ⭐️⭐️☆☆ | 3.5 | 3.5 | [Ray](https://github.com/raysan5) |
-| 117 | [shaders_spotlight](shaders/shaders_spotlight.c) | | ⭐️⭐️☆☆ | 2.5 | 3.7 | [Chris Camacho](https://github.com/codifies) |
-| 118 | [shaders_deferred_render](shaders/shaders_deferred_render.c) | | ⭐️⭐️⭐️⭐️ | 4.5 | 4.5 | [Justin Andreas Lacoste](https://github.com/27justin) |
+| 103 | [shaders_basic_lighting](shaders/shaders_basic_lighting.c) | | ⭐️⭐️⭐️⭐️ | 3.0 | **4.2** | [Chris Camacho](https://github.com/codifies) |
+| 104 | [shaders_model_shader](shaders/shaders_model_shader.c) | | ⭐️⭐️☆☆ | 1.3 | 3.7 | [Ray](https://github.com/raysan5) |
+| 105 | [shaders_shapes_textures](shaders/shaders_shapes_textures.c) | | ⭐️⭐️☆☆ | 1.7 | 3.7 | [Ray](https://github.com/raysan5) |
+| 106 | [shaders_custom_uniform](shaders/shaders_custom_uniform.c) | | ⭐️⭐️☆☆ | 1.3 | **4.0** | [Ray](https://github.com/raysan5) |
+| 107 | [shaders_postprocessing](shaders/shaders_postprocessing.c) | | ⭐️⭐️⭐️☆ | 1.3 | **4.0** | [Ray](https://github.com/raysan5) |
+| 108 | [shaders_palette_switch](shaders/shaders_palette_switch.c) | | ⭐️⭐️⭐️☆ | 2.5 | 3.7 | [Marco Lizza](https://github.com/MarcoLizza) |
+| 109 | [shaders_raymarching](shaders/shaders_raymarching.c) | | ⭐️⭐️⭐️⭐️ | 2.0 | **4.2** | [Ray](https://github.com/raysan5) |
+| 110 | [shaders_texture_drawing](shaders/shaders_texture_drawing.c) | | ⭐️⭐️☆☆ | 2.0 | 3.7 | [Michał Ciesielski](https://github.com/) |
+| 111 | [shaders_texture_outline](shaders/shaders_texture_outline.c) | | ⭐️⭐️⭐️☆ | **4.0** | **4.0** | [Samuel Skiff](https://github.com/GoldenThumbs) |
+| 112 | [shaders_texture_waves](shaders/shaders_texture_waves.c) | | ⭐️⭐️☆☆ | 2.5 | 3.7 | [Anata](https://github.com/anatagawa) |
+| 113 | [shaders_julia_set](shaders/shaders_julia_set.c) | | ⭐️⭐️⭐️☆ | 2.5 | **4.0** | [eggmund](https://github.com/eggmund) |
+| 114 | [shaders_eratosthenes](shaders/shaders_eratosthenes.c) | | ⭐️⭐️⭐️☆ | 2.5 | **4.0** | [ProfJski](https://github.com/ProfJski) |
+| 115 | [shaders_fog](shaders/shaders_fog.c) | | ⭐️⭐️⭐️☆ | 2.5 | 3.7 | [Chris Camacho](https://github.com/codifies) |
+| 116 | [shaders_simple_mask](shaders/shaders_simple_mask.c) | | ⭐️⭐️☆☆ | 2.5 | 3.7 | [Chris Camacho](https://github.com/codifies) |
+| 117 | [shaders_hot_reloading](shaders/shaders_hot_reloading.c) | | ⭐️⭐️⭐️☆ | 3.0 | 3.5 | [Ray](https://github.com/raysan5) |
+| 118 | [shaders_mesh_instancing](shaders/shaders_mesh_instancing.c) | | ⭐️⭐️⭐️⭐️ | 3.7 | **4.2** | [seanpringle](https://github.com/seanpringle) |
+| 119 | [shaders_multi_sample2d](shaders/shaders_multi_sample2d.c) | | ⭐️⭐️☆☆ | 3.5 | 3.5 | [Ray](https://github.com/raysan5) |
+| 120 | [shaders_spotlight](shaders/shaders_spotlight.c) | | ⭐️⭐️☆☆ | 2.5 | 3.7 | [Chris Camacho](https://github.com/codifies) |
+| 121 | [shaders_deferred_render](shaders/shaders_deferred_render.c) | | ⭐️⭐️⭐️⭐️ | 4.5 | 4.5 | [Justin Andreas Lacoste](https://github.com/27justin) |
### category: audio
@@ -186,10 +187,10 @@ Examples using raylib audio functionality, including sound/music loading and pla
| ## | example | image | difficulty
level | version
created | last version
updated | original
developer |
|----|----------|--------|:-------------------:|:------------------:|:------------------:|:----------|
-| 119 | [audio_module_playing](audio/audio_module_playing.c) | | ⭐️☆☆☆ | 1.5 | 3.5 | [Ray](https://github.com/raysan5) |
-| 120 | [audio_music_stream](audio/audio_music_stream.c) | | ⭐️☆☆☆ | 1.3 | **4.2** | [Ray](https://github.com/raysan5) |
-| 121 | [audio_raw_stream](audio/audio_raw_stream.c) | | ⭐️⭐️⭐️☆ | 1.6 | **4.2** | [Ray](https://github.com/raysan5) |
-| 122 | [audio_sound_loading](audio/audio_sound_loading.c) | | ⭐️☆☆☆ | 1.1 | 3.5 | [Ray](https://github.com/raysan5) |
+| 122 | [audio_module_playing](audio/audio_module_playing.c) | | ⭐️☆☆☆ | 1.5 | 3.5 | [Ray](https://github.com/raysan5) |
+| 123 | [audio_music_stream](audio/audio_music_stream.c) | | ⭐️☆☆☆ | 1.3 | **4.2** | [Ray](https://github.com/raysan5) |
+| 124 | [audio_raw_stream](audio/audio_raw_stream.c) | | ⭐️⭐️⭐️☆ | 1.6 | **4.2** | [Ray](https://github.com/raysan5) |
+| 125 | [audio_sound_loading](audio/audio_sound_loading.c) | | ⭐️☆☆☆ | 1.1 | 3.5 | [Ray](https://github.com/raysan5) |
### category: others
@@ -197,11 +198,11 @@ Examples showing raylib misc functionality that does not fit in other categories
| ## | example | image | difficulty
level | version
created | last version
updated | original
developer |
|----|----------|--------|:-------------------:|:------------------:|:------------------:|:----------|
-| 123 | [rlgl_standalone](others/rlgl_standalone.c) | | ⭐️⭐️⭐️⭐️ | 1.6 | **4.0** | [Ray](https://github.com/raysan5) |
-| 124 | [rlgl_compute_shader](others/rlgl_compute_shader.c) | | ⭐️⭐️⭐️⭐️ | **4.0** | **4.0** | [Teddy Astie](https://github.com/tsnake41) |
-| 125 | [easings_testbed](others/easings_testbed.c) | | ⭐️⭐️⭐️☆ | 3.0 | 3.0 | [Juan Miguel López](https://github.com/flashback-fx) |
-| 126 | [raylib_opengl_interop](others/raylib_opengl_interop.c) | | ⭐️⭐️⭐️⭐️ | **4.0** | **4.0** | [Stephan Soller](https://github.com/arkanis) |
-| 127 | [embedded_files_loading](others/embedded_files_loading.c) | | ⭐️⭐️☆☆ | 3.5 | 3.5 | [Kristian Holmgren](https://github.com/defutura) |
+| 126 | [rlgl_standalone](others/rlgl_standalone.c) | | ⭐️⭐️⭐️⭐️ | 1.6 | **4.0** | [Ray](https://github.com/raysan5) |
+| 127 | [rlgl_compute_shader](others/rlgl_compute_shader.c) | | ⭐️⭐️⭐️⭐️ | **4.0** | **4.0** | [Teddy Astie](https://github.com/tsnake41) |
+| 128 | [easings_testbed](others/easings_testbed.c) | | ⭐️⭐️⭐️☆ | 3.0 | 3.0 | [Juan Miguel López](https://github.com/flashback-fx) |
+| 129 | [raylib_opengl_interop](others/raylib_opengl_interop.c) | | ⭐️⭐️⭐️⭐️ | **4.0** | **4.0** | [Stephan Soller](https://github.com/arkanis) |
+| 130 | [embedded_files_loading](others/embedded_files_loading.c) | | ⭐️⭐️☆☆ | 3.5 | 3.5 | [Kristian Holmgren](https://github.com/defutura) |
As always contributions are welcome, feel free to send new examples! Here is an [examples template](examples_template.c) to start with!
diff --git a/examples/core/core_input_virtual_controls.c b/examples/core/core_input_virtual_controls.c
new file mode 100644
index 000000000000..ae7f770aa4a5
--- /dev/null
+++ b/examples/core/core_input_virtual_controls.c
@@ -0,0 +1,123 @@
+/*******************************************************************************************
+*
+* raylib [core] example - input virtual controls
+*
+* Example originally created with raylib 5.0, last time updated with raylib 5.0
+*
+* Example create by GreenSnakeLinux (@GreenSnakeLinux),
+* lighter by oblerion (@oblerion) 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) 2024 Ramon Santamaria (@raysan5)
+*
+********************************************************************************************/
+
+#include "raylib.h"
+#include
+//------------------------------------------------------------------------------------
+// Program main entry point
+//------------------------------------------------------------------------------------
+int main(void)
+{
+ // Initialization
+ //--------------------------------------------------------------------------------------
+ const int screenWidth = 800;
+ const int screenHeight = 450;
+
+ InitWindow(screenWidth, screenHeight, "raylib [core] example - input virtual controls");
+
+ const int dpadX = 90;
+ const int dpadY = 300;
+ const int dpadRad = 25;//radius of each pad
+ Color dpadColor = BLUE;
+ int dpadKeydown = -1;//-1 if not down, else 0,1,2,3
+
+
+ const float dpadCollider[4][2]= // collider array with x,y position
+ {
+ {dpadX,dpadY-dpadRad*1.5},//up
+ {dpadX-dpadRad*1.5,dpadY},//left
+ {dpadX+dpadRad*1.5,dpadY},//right
+ {dpadX,dpadY+dpadRad*1.5}//down
+ };
+ const char dpadLabel[4]="XYBA";//label of Dpad
+
+ float playerX=100;
+ float playerY=100;
+
+ SetTargetFPS(60);
+ //--------------------------------------------------------------------------------------
+
+ // Main game loop
+ while (!WindowShouldClose()) // Detect window close button or ESC key
+ {
+ // Update
+ //--------------------------------------------------------------------------
+ dpadKeydown = -1; //reset
+ float inputX=0;
+ float inputY=0;
+ if(GetTouchPointCount()>0)
+ {//use touch pos
+ inputX = GetTouchX();
+ inputY = GetTouchY();
+ }
+ else
+ {//use mouse pos
+ inputX = GetMouseX();
+ inputY = GetMouseY();
+ }
+ for(int i=0;i<4;i++)
+ {
+ //test distance each collider and input < radius
+ if( fabsf(dpadCollider[i][1]-inputY) + fabsf(dpadCollider[i][0]-inputX) < dpadRad)
+ {
+ dpadKeydown = i;
+ break;
+ }
+ }
+ // move player
+ switch(dpadKeydown){
+ case 0: playerY -= 50*GetFrameTime();
+ break;
+ case 1: playerX -= 50*GetFrameTime();
+ break;
+ case 2: playerX += 50*GetFrameTime();
+ break;
+ case 3: playerY += 50*GetFrameTime();
+ default:;
+ };
+ //--------------------------------------------------------------------------
+
+ // Draw
+ //--------------------------------------------------------------------------
+ BeginDrawing();
+ ClearBackground(RAYWHITE);
+ for(int i=0;i<4;i++)
+ {
+ //draw all pad
+ DrawCircle(dpadCollider[i][0],dpadCollider[i][1],dpadRad,dpadColor);
+ if(i!=dpadKeydown)
+ {
+ //draw label
+ DrawText(TextSubtext(dpadLabel,i,1),
+ dpadCollider[i][0]-5,
+ dpadCollider[i][1]-5,16,BLACK);
+ }
+
+ }
+ DrawText("Player",playerX,playerY,16,BLACK);
+ EndDrawing();
+ //--------------------------------------------------------------------------
+ }
+
+ // De-Initialization
+ //--------------------------------------------------------------------------------------
+ CloseWindow(); // Close window and OpenGL context
+ //--------------------------------------------------------------------------------------
+
+ return 0;
+}
+
diff --git a/examples/core/core_input_virtual_controls.png b/examples/core/core_input_virtual_controls.png
new file mode 100644
index 0000000000000000000000000000000000000000..a9776e68a3dfdd01f5b8afc51859ace27a150622
GIT binary patch
literal 9604
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
bk