From f677695badaebb73c4f5c20e6676abf7d79cb7c2 Mon Sep 17 00:00:00 2001 From: Jopestpe <47086979+Jopestpe@users.noreply.github.com> Date: Tue, 7 Oct 2025 15:25:22 -0300 Subject: [PATCH] [examples] Added `shapes_triangle_strip` (#5240) * [examples] Add shapes_triangle_strip * Remove functions --- examples/Makefile | 1 + examples/Makefile.Web | 4 + examples/README.md | 5 +- examples/examples_list.txt | 1 + examples/shapes/shapes_triangle_strip.c | 106 ++++++++++++++++++++++ examples/shapes/shapes_triangle_strip.png | Bin 0 -> 12694 bytes 6 files changed, 115 insertions(+), 2 deletions(-) create mode 100644 examples/shapes/shapes_triangle_strip.c create mode 100644 examples/shapes/shapes_triangle_strip.png diff --git a/examples/Makefile b/examples/Makefile index a36b9e447..d5fb730ec 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -564,6 +564,7 @@ SHAPES = \ shapes/shapes_rounded_rectangle_drawing \ shapes/shapes_splines_drawing \ shapes/shapes_top_down_lights \ + shapes/shapes_triangle_strip \ shapes/shapes_vector_angle TEXTURES = \ diff --git a/examples/Makefile.Web b/examples/Makefile.Web index 2d3018abf..c053528b6 100644 --- a/examples/Makefile.Web +++ b/examples/Makefile.Web @@ -564,6 +564,7 @@ SHAPES = \ shapes/shapes_rounded_rectangle_drawing \ shapes/shapes_splines_drawing \ shapes/shapes_top_down_lights \ + shapes/shapes_triangle_strip \ shapes/shapes_vector_angle TEXTURES = \ @@ -884,6 +885,9 @@ shapes/shapes_splines_drawing: shapes/shapes_splines_drawing.c shapes/shapes_top_down_lights: shapes/shapes_top_down_lights.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) +shapes/shapes_triangle_strip: shapes/shapes_triangle_strip.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) + shapes/shapes_vector_angle: shapes/shapes_vector_angle.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) diff --git a/examples/README.md b/examples/README.md index d852e7105..9f6784e65 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: 173] +## EXAMPLES COLLECTION [TOTAL: 174] ### 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) | core_undo_redo | ⭐⭐⭐☆ | 5.5 | 5.6 | [Ramon Santamaria](https://github.com/raysan5) | | [core_input_actions](core/core_input_actions.c) | core_input_actions | ⭐⭐☆☆ | 5.5 | 5.6 | [Jett](https://github.com/JettMonstersGoBoom) | -### category: shapes [24] +### category: shapes [25] Examples using raylib shapes drawing functionality, provided by raylib [shapes](../src/rshapes.c) module. @@ -95,6 +95,7 @@ Examples using raylib shapes drawing functionality, provided by raylib [shapes]( | [shapes_digital_clock](shapes/shapes_digital_clock.c) | shapes_digital_clock | ⭐⭐⭐⭐️ | 5.5 | 5.6 | [Hamza RAHAL](https://github.com/hmz-rhl) | | [shapes_double_pendulum](shapes/shapes_double_pendulum.c) | shapes_double_pendulum | ⭐⭐☆☆ | 5.5 | 5.5 | [JoeCheong](https://github.com/Joecheong2006) | | [shapes_dashed_line](shapes/shapes_dashed_line.c) | shapes_dashed_line | ⭐☆☆☆ | 5.5 | 5.5 | [Luís Almeida](https://github.com/luis605) | +| [shapes_triangle_strip](shapes/shapes_triangle_strip.c) | shapes_triangle_strip | ⭐⭐☆☆ | 5.6-dev | 5.6-dev | [Jopestpe](https://github.com/jopestpe) | | [shapes_vector_angle](shapes/shapes_vector_angle.c) | shapes_vector_angle | ⭐⭐☆☆ | 1.0 | 5.0 | [Ramon Santamaria](https://github.com/raysan5) | ### category: textures [26] diff --git a/examples/examples_list.txt b/examples/examples_list.txt index 5a0c679a4..879f5707b 100644 --- a/examples/examples_list.txt +++ b/examples/examples_list.txt @@ -70,6 +70,7 @@ shapes;shapes_splines_drawing;★★★☆;5.0;5.0;2023;2025;"Ramon Santamaria"; shapes;shapes_digital_clock;★★★★;5.5;5.6;2025;2025;"Hamza RAHAL";@hmz-rhl shapes;shapes_double_pendulum;★★☆☆;5.5;5.5;2025;2025;"JoeCheong";@Joecheong2006 shapes;shapes_dashed_line;★☆☆☆;5.5;5.5;2025;2025;"Luís Almeida";@luis605 +shapes;shapes_triangle_strip;★★☆☆;5.6-dev;5.6-dev;2025;2025;"Jopestpe";@jopestpe shapes;shapes_vector_angle;★★☆☆;1.0;5.0;2023;2025;"Ramon Santamaria";@raysan5 textures;textures_logo_raylib;★☆☆☆;1.0;1.0;2014;2025;"Ramon Santamaria";@raysan5 textures;textures_srcrec_dstrec;★★★☆;1.3;1.3;2015;2025;"Ramon Santamaria";@raysan5 diff --git a/examples/shapes/shapes_triangle_strip.c b/examples/shapes/shapes_triangle_strip.c new file mode 100644 index 000000000..ee4556d25 --- /dev/null +++ b/examples/shapes/shapes_triangle_strip.c @@ -0,0 +1,106 @@ +/******************************************************************************************* +* +* raylib [shapes] example - triangle strip +* +* Example complexity rating: [★★☆☆] 2/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 + +//------------------------------------------------------------------------------------ +// Program main entry point +//------------------------------------------------------------------------------------ +int main(void) +{ + // Initialization + //-------------------------------------------------------------------------------------- + const int screenWidth = 800; + const int screenHeight = 450; + + InitWindow(screenWidth, screenHeight, "raylib [shapes] example - triangle strip"); + + Vector2 points[120] = { 0 }; + Vector2 center = { (screenWidth/2.0f) - 125.f, screenHeight/2.0f }; + float segments = 6.0f; + float insideRadius = 100.0f; + float outsideRadius = 150.0f; + bool outline = true; + + 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 + //---------------------------------------------------------------------------------- + int pointCount = (int)(segments); + float angleStep = (360.0f/pointCount)*DEG2RAD; + + for (int i = 0, i2 = 0; i < pointCount; i++, i2 += 2) + { + float angle1 = i*angleStep; + points[i2] = (Vector2){ center.x + cosf(angle1)*insideRadius, center.y + sinf(angle1)*insideRadius }; + float angle2 = angle1 + angleStep/2.0f; + points[i2 + 1] = (Vector2){ center.x + cosf(angle2)*outsideRadius, center.y + sinf(angle2)*outsideRadius }; + } + + points[pointCount*2] = points[0]; + points[pointCount*2 + 1] = points[1]; + //---------------------------------------------------------------------------------- + + // Draw + //---------------------------------------------------------------------------------- + BeginDrawing(); + + ClearBackground(RAYWHITE); + + for (int i = 0, i2 = 0; i < pointCount; i++, i2 += 2) + { + float angle1 = i*angleStep; + Color color = ColorFromHSV(angle1*RAD2DEG, 1.0f, 1.0f); + DrawTriangle(points[i2 + 2], points[i2 + 1], points[i2], color); + if (outline) DrawTriangleLines(points[i2], points[i2 + 1], points[i2 + 2], BLACK); + + float angle2 = angle1 + angleStep/2.0f; + color = ColorFromHSV(angle2*RAD2DEG, 1.0f, 1.0f); + DrawTriangle(points[i2 + 3], points[i2 + 1], points[i2 + 2], color); + if (outline) DrawTriangleLines(points[i2 + 2], points[i2 + 1], points[i2 + 3], BLACK); + } + + DrawLine(580, 0, 580, GetScreenHeight(), (Color){ 218, 218, 218, 255 }); + DrawRectangle(580, 0, GetScreenWidth(), GetScreenHeight(), (Color){ 232, 232, 232, 255 }); + + // Draw GUI controls + //------------------------------------------------------------------------------ + GuiSliderBar((Rectangle){ 640, 40, 120, 20}, "Segments", TextFormat("%.0f", segments), &segments, 6.0f, 60.f); + GuiCheckBox((Rectangle){ 640, 70, 20, 20 }, "Outline", &outline); + //------------------------------------------------------------------------------ + + 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_triangle_strip.png b/examples/shapes/shapes_triangle_strip.png new file mode 100644 index 0000000000000000000000000000000000000000..c291a084918ee0a2ae7c9f3ae267cb5716f9f167 GIT binary patch literal 12694 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 literal 0 HcmV?d00001