From 8b909583234c1a1018903bf7dec37ea13b5c663e Mon Sep 17 00:00:00 2001
From: Jopestpe <47086979+Jopestpe@users.noreply.github.com>
Date: Thu, 2 Oct 2025 15:12:14 -0300
Subject: [PATCH] ADDED: example: shapes_recursive_tree
---
examples/Makefile | 1 +
examples/Makefile.Web | 4 +
examples/README.md | 5 +-
examples/examples_list.txt | 1 +
examples/shapes/shapes_recursive_tree.c | 103 ++++++++++++++++++++++
examples/shapes/shapes_recursive_tree.png | Bin 0 -> 13440 bytes
6 files changed, 112 insertions(+), 2 deletions(-)
create mode 100644 examples/shapes/shapes_recursive_tree.c
create mode 100644 examples/shapes/shapes_recursive_tree.png
diff --git a/examples/Makefile b/examples/Makefile
index fb33b4894..a36b9e447 100644
--- a/examples/Makefile
+++ b/examples/Makefile
@@ -559,6 +559,7 @@ SHAPES = \
shapes/shapes_logo_raylib_anim \
shapes/shapes_rectangle_advanced \
shapes/shapes_rectangle_scaling \
+ shapes/shapes_recursive_tree \
shapes/shapes_ring_drawing \
shapes/shapes_rounded_rectangle_drawing \
shapes/shapes_splines_drawing \
diff --git a/examples/Makefile.Web b/examples/Makefile.Web
index 0dbefadf2..2d3018abf 100644
--- a/examples/Makefile.Web
+++ b/examples/Makefile.Web
@@ -559,6 +559,7 @@ SHAPES = \
shapes/shapes_logo_raylib_anim \
shapes/shapes_rectangle_advanced \
shapes/shapes_rectangle_scaling \
+ shapes/shapes_recursive_tree \
shapes/shapes_ring_drawing \
shapes/shapes_rounded_rectangle_drawing \
shapes/shapes_splines_drawing \
@@ -868,6 +869,9 @@ shapes/shapes_rectangle_advanced: shapes/shapes_rectangle_advanced.c
shapes/shapes_rectangle_scaling: shapes/shapes_rectangle_scaling.c
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM)
+shapes/shapes_recursive_tree: shapes/shapes_recursive_tree.c
+ $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM)
+
shapes/shapes_ring_drawing: shapes/shapes_ring_drawing.c
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM)
diff --git a/examples/README.md b/examples/README.md
index 70e07df2b..d852e7105 100644
--- a/examples/README.md
+++ b/examples/README.md
@@ -17,7 +17,7 @@ You may find it easier to use than other toolchains, especially when it comes to
- `zig build [module]` to compile all examples for a module (e.g. `zig build core`)
- `zig build [example]` to compile _and run_ a particular example (e.g. `zig build core_basic_window`)
-## EXAMPLES COLLECTION [TOTAL: 172]
+## EXAMPLES COLLECTION [TOTAL: 173]
### category: core [40]
@@ -66,7 +66,7 @@ Examples using raylib[core](../src/rcore.c) platform functionality like window c
| [core_undo_redo](core/core_undo_redo.c) |
| ⭐⭐⭐☆ | 5.5 | 5.6 | [Ramon Santamaria](https://github.com/raysan5) |
| [core_input_actions](core/core_input_actions.c) |
| ⭐⭐☆☆ | 5.5 | 5.6 | [Jett](https://github.com/JettMonstersGoBoom) |
-### category: shapes [23]
+### category: shapes [24]
Examples using raylib shapes drawing functionality, provided by raylib [shapes](../src/rshapes.c) module.
@@ -84,6 +84,7 @@ Examples using raylib shapes drawing functionality, provided by raylib [shapes](
| [shapes_following_eyes](shapes/shapes_following_eyes.c) |
| ⭐⭐☆☆ | 2.5 | 2.5 | [Ramon Santamaria](https://github.com/raysan5) |
| [shapes_easings_ball](shapes/shapes_easings_ball.c) |
| ⭐⭐☆☆ | 2.5 | 2.5 | [Ramon Santamaria](https://github.com/raysan5) |
| [shapes_easings_box](shapes/shapes_easings_box.c) |
| ⭐⭐☆☆ | 2.5 | 2.5 | [Ramon Santamaria](https://github.com/raysan5) |
+| [shapes_recursive_tree](shapes/shapes_recursive_tree.c) |
| ⭐⭐⭐☆ | 5.6-dev | 5.6-dev| [Jopestpe](https://github.com/jopestpe) |
| [shapes_easings_rectangles](shapes/shapes_easings_rectangles.c) |
| ⭐⭐⭐☆ | 2.0 | 2.5 | [Ramon Santamaria](https://github.com/raysan5) |
| [shapes_ring_drawing](shapes/shapes_ring_drawing.c) |
| ⭐⭐⭐☆ | 2.5 | 2.5 | [Vlad Adrian](https://github.com/demizdor) |
| [shapes_circle_sector_drawing](shapes/shapes_circle_sector_drawing.c) |
| ⭐⭐⭐☆ | 2.5 | 2.5 | [Vlad Adrian](https://github.com/demizdor) |
diff --git a/examples/examples_list.txt b/examples/examples_list.txt
index 50643bf2b..5a0c679a4 100644
--- a/examples/examples_list.txt
+++ b/examples/examples_list.txt
@@ -60,6 +60,7 @@ shapes;shapes_following_eyes;★★☆☆;2.5;2.5;2013;2025;"Ramon Santamaria";@
shapes;shapes_easings_ball;★★☆☆;2.5;2.5;2014;2025;"Ramon Santamaria";@raysan5
shapes;shapes_easings_box;★★☆☆;2.5;2.5;2014;2025;"Ramon Santamaria";@raysan5
shapes;shapes_easings_rectangles;★★★☆;2.0;2.5;2014;2025;"Ramon Santamaria";@raysan5
+shapes;shapes_recursive_tree;★★★☆;5.6-dev;5.6-dev;2025;2025;"Jopestpe";@jopestpe
shapes;shapes_ring_drawing;★★★☆;2.5;2.5;2018;2025;"Vlad Adrian";@demizdor
shapes;shapes_circle_sector_drawing;★★★☆;2.5;2.5;2018;2025;"Vlad Adrian";@demizdor
shapes;shapes_rounded_rectangle_drawing;★★★☆;2.5;2.5;2018;2025;"Vlad Adrian";@demizdor
diff --git a/examples/shapes/shapes_recursive_tree.c b/examples/shapes/shapes_recursive_tree.c
new file mode 100644
index 000000000..c29899cc0
--- /dev/null
+++ b/examples/shapes/shapes_recursive_tree.c
@@ -0,0 +1,103 @@
+/*******************************************************************************************
+*
+* raylib [shapes] example - shapes recursive tree
+*
+* Example complexity rating: [★★★☆] 3/4
+*
+* Example originally created with raylib 5.6-dev, last time updated with raylib 5.6-dev
+*
+* Example contributed by Jopestpe (@jopestpe)
+*
+* 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) 2018-2025 Jopestpe (@jopestpe)
+*
+********************************************************************************************/
+
+#include "raylib.h"
+#include
+
+#define RAYGUI_IMPLEMENTATION
+#include "raygui.h" // Required for GUI controls
+
+float theta;
+float thick = 1.0f;
+float branchDecay = 0.66f;
+bool bezier = false;
+
+void Branch(Vector2 start, float length, float angle) {
+ length *= branchDecay;
+
+ if (length > 2) {
+ Vector2 end = {
+ start.x + length * sinf(angle),
+ start.y - length * cosf(angle)
+ };
+
+ if(!bezier) DrawLineEx(start, end, thick, RED);
+ else DrawLineBezier(start, end, thick, RED);
+
+ Branch(end, length, angle + theta);
+ Branch(end, length, angle - theta);
+ }
+}
+
+//------------------------------------------------------------------------------------
+// Program main entry point
+//------------------------------------------------------------------------------------
+int main(void)
+{
+ // Initialization
+ //--------------------------------------------------------------------------------------
+ const int screenWidth = 800;
+ const int screenHeight = 450;
+
+ InitWindow(screenWidth, screenHeight, "raylib [shapes] example - shapes recursive tree");
+
+ Vector2 start = { (screenWidth / 2.0f) - 125, screenHeight };
+ Vector2 end = { (screenWidth / 2.0f) - 125, screenHeight - 120.0f };
+ float angle = 0.0f;
+
+ SetTargetFPS(60); // Set our game to run at 60 frames-per-second
+ //--------------------------------------------------------------------------------------
+
+ // Main game loop
+ while (!WindowShouldClose()) // Detect window close button or ESC key
+ {
+ float a = (angle / screenWidth) * 90.0f;
+ theta = a * (PI / 180.0f);
+
+ // Draw
+ //----------------------------------------------------------------------------------
+ BeginDrawing();
+
+ ClearBackground(RAYWHITE);
+
+ DrawLine(560, 0, 560, GetScreenHeight(), Fade(LIGHTGRAY, 0.6f));
+ DrawRectangle(560, 0, GetScreenWidth() - 500, GetScreenHeight(), Fade(LIGHTGRAY, 0.3f));
+
+ // Draw GUI controls
+ //------------------------------------------------------------------------------
+ GuiSliderBar((Rectangle){ 640, 40, 120, 20}, "Angle", TextFormat("%.2f", angle), &angle, 0, 1600);
+ GuiSliderBar((Rectangle){ 640, 70, 120, 20}, "Thick", TextFormat("%.2f", thick), &thick, 1, 8);
+ GuiSliderBar((Rectangle){ 640, 100, 120, 20}, "Branch Decay", TextFormat("%.2f", branchDecay), &branchDecay, 0.1f, 0.78f);
+ GuiCheckBox((Rectangle){ 640, 130, 20, 20 }, "Bezier", &bezier);
+ //------------------------------------------------------------------------------
+
+ DrawLineEx(start, end, thick, RED);
+ Branch(end, 120.0f, 0.0f);
+
+ DrawFPS(10, 10);
+
+ EndDrawing();
+ //----------------------------------------------------------------------------------
+ }
+
+ // De-Initialization
+ //--------------------------------------------------------------------------------------
+ CloseWindow(); // Close window and OpenGL context
+ //--------------------------------------------------------------------------------------
+
+ return 0;
+}
\ No newline at end of file
diff --git a/examples/shapes/shapes_recursive_tree.png b/examples/shapes/shapes_recursive_tree.png
new file mode 100644
index 0000000000000000000000000000000000000000..4a850284dd7bb5cd6103d4bbd897d472170794e1
GIT binary patch
literal 13440
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
TbaU`uiYRo?8EWRAvAy$Ow;RBh
literal 0
HcmV?d00001