From 2a04317cff9dfdd7e0880dc5105ced8ca48b1eb9 Mon Sep 17 00:00:00 2001 From: JordSant <77529699+JordSant@users.noreply.github.com> Date: Wed, 15 Oct 2025 19:39:47 +0200 Subject: [PATCH] [examples] Added: `shapes_particles` (#5260) * [Examples] Added shapes_particles * Changes to follow the code conventions. Improved some things. * Fixed name * Fixed PNG name --------- Co-authored-by: Ray --- examples/shapes/shapes_simple_particles.c | 277 +++++++++ examples/shapes/shapes_simple_particles.png | Bin 0 -> 32265 bytes .../examples/shapes_simple_particles.vcxproj | 569 ++++++++++++++++++ projects/VS2022/raylib.sln | 8 + 4 files changed, 854 insertions(+) create mode 100644 examples/shapes/shapes_simple_particles.c create mode 100644 examples/shapes/shapes_simple_particles.png create mode 100644 projects/VS2022/examples/shapes_simple_particles.vcxproj diff --git a/examples/shapes/shapes_simple_particles.c b/examples/shapes/shapes_simple_particles.c new file mode 100644 index 000000000..aae85f35d --- /dev/null +++ b/examples/shapes/shapes_simple_particles.c @@ -0,0 +1,277 @@ +/******************************************************************************************* +* +* raylib [shapes] example - simple particles +* +* Example complexity rating: [★☆☆☆] 1/4 +* +* Example originally created with raylib 5.6, last time updated with raylib 5.6 +* +* Example contributed by Jordi Santonja (@JordSant) +* +* 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) 2025 Jordi Santonja (@JordSant) +* +********************************************************************************************/ + +#include "raylib.h" + +#include // Required for: calloc(), free() +#include // Required for: cosf(), sinf() + +#define MAX_PARTICLES 3000 // Max number particles + +//---------------------------------------------------------------------------------- +// Types and Structures Definition +//---------------------------------------------------------------------------------- +typedef enum ParticleType { + WATER = 0, + SMOKE, + FIRE +} ParticleType; + +static const char particleTypesChar[3][10] = { "WATER", "SMOKE", "FIRE" }; + +typedef struct Particle { + Vector2 position; // Particle position on screen + Vector2 velocity; // Particle current speed and direction + bool alive; // Particle alive: inside screen and life time + float lifeTime; // Particle life time + ParticleType type; // Particle type (WATER, SMOKE, FIRE) + float radius; // Particle radius + Color color; // Particle color +} Particle; + +typedef struct CircularBuffer { + int head; // Index for the next write + int tail; // Index for the next read + Particle *buffer; // Particle buffer array +} CircularBuffer; + +//---------------------------------------------------------------------------------- +// Module Functions Declaration +//---------------------------------------------------------------------------------- +static void EmitParticle(CircularBuffer *circularBuffer, Vector2 emitterPosition, ParticleType type); +static Particle *AddToCircularBuffer(CircularBuffer *circularBuffer); +static void UpdateParticles(CircularBuffer *circularBuffer, int screenWidth, int screenHeight); +static void UpdateCircularBuffer(CircularBuffer *circularBuffer); +static void DrawParticles(CircularBuffer *circularBuffer); + +//------------------------------------------------------------------------------------ +// Program main entry point +//------------------------------------------------------------------------------------ +int main(void) +{ + // Initialization + //-------------------------------------------------------------------------------------- + const int screenWidth = 800; + const int screenHeight = 450; + + InitWindow(screenWidth, screenHeight, "raylib [shapes] example - particles"); + + // Definition of particles + Particle *particles = (Particle*)RL_CALLOC(MAX_PARTICLES, sizeof(Particle)); // Particle array + CircularBuffer circularBuffer = { 0, 0, particles }; + + // Particle emitter parameters + int emissionRate = -2; // Negative: on average every -X frames. Positive: particles per frame + ParticleType currentType = WATER; + Vector2 emitterPosition = { screenWidth/2.0f, screenHeight/2.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 + { + // Update + //---------------------------------------------------------------------------------- + // Emit new particles: when emissionRate is 1, emit every frame + if (emissionRate < 0) + { + if (rand()%(-emissionRate) == 0) + EmitParticle(&circularBuffer, emitterPosition, currentType); + } + else + { + for (int i = 0; i <= emissionRate; ++i) + EmitParticle(&circularBuffer, emitterPosition, currentType); + } + + // Update the parameters of each particle + UpdateParticles(&circularBuffer, screenWidth, screenHeight); + // Remove dead particles from the circular buffer + UpdateCircularBuffer(&circularBuffer); + + // Change Particle Emission Rate (UP/DOWN arrows) + if (IsKeyPressed(KEY_UP)) + ++emissionRate; + if (IsKeyPressed(KEY_DOWN)) + --emissionRate; + + // Change Particle Type (LEFT/RIGHT arrows) + if (IsKeyPressed(KEY_RIGHT)) + (currentType == FIRE) ? (currentType = WATER) : ++currentType; + if (IsKeyPressed(KEY_LEFT)) + (currentType == WATER) ? (currentType = FIRE) : --currentType; + + if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) + emitterPosition = GetMousePosition(); + + // Draw + //---------------------------------------------------------------------------------- + BeginDrawing(); + + ClearBackground(RAYWHITE); + + // Call the function with a loop to draw all particles + DrawParticles(&circularBuffer); + + // Draw UI and Instructions + DrawRectangle(5, 5, 315, 75, Fade(SKYBLUE, 0.5f)); + DrawRectangleLines(5, 5, 315, 75, BLUE); + + DrawText("CONTROLS:", 15, 15, 10, BLACK); + DrawText("UP/DOWN: Change Particle Emission Rate", 15, 35, 10, BLACK); + DrawText("LEFT/RIGHT: Change Particle Type (Water, Smoke, Fire)", 15, 55, 10, BLACK); + + if (emissionRate < 0) + DrawText(TextFormat("Particles every %d frames | Type: %s", -emissionRate, particleTypesChar[currentType]), 15, 95, 10, DARKGRAY); + else + DrawText(TextFormat("%d Particles per frame | Type: %s", emissionRate + 1, particleTypesChar[currentType]), 15, 95, 10, DARKGRAY); + + DrawFPS(screenWidth - 80, 10); + + EndDrawing(); + //---------------------------------------------------------------------------------- + } + + // De-Initialization + //-------------------------------------------------------------------------------------- + RL_FREE(particles); // Free particles array data + + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- + + return 0; +} + +//---------------------------------------------------------------------------------- +// Module Functions Definition +//---------------------------------------------------------------------------------- +static void EmitParticle(CircularBuffer *circularBuffer, Vector2 emitterPosition, ParticleType type) +{ + Particle *newParticle = AddToCircularBuffer(circularBuffer); + // If buffer is full, newParticle is NULL + if (newParticle != NULL) + { + // Fill particle properties + newParticle->position = emitterPosition; + newParticle->alive = true; + newParticle->lifeTime = 0.0f; + newParticle->type = type; + float speed = (float)(rand()%10)/5.0f; + switch (type) + { + case WATER: + newParticle->radius = 5.0f; + newParticle->color = BLUE; + break; + case SMOKE: + newParticle->radius = 7.0f; + newParticle->color = GRAY; + break; + case FIRE: + newParticle->radius = 10.0f; + newParticle->color = YELLOW; + speed /= 10.0f; + break; + default: break; + } + float direction = (float)(rand()%360); + newParticle->velocity = (Vector2){ speed*cosf(direction*DEG2RAD), speed*sinf(direction*DEG2RAD) }; + } +} + +static Particle *AddToCircularBuffer(CircularBuffer *circularBuffer) +{ + Particle *particle = NULL; + + // Check if buffer full + if (((circularBuffer->head + 1)%MAX_PARTICLES) != circularBuffer->tail) + { + // Add new particle to the head position and advance head + particle = &circularBuffer->buffer[circularBuffer->head]; + circularBuffer->head = (circularBuffer->head + 1)%MAX_PARTICLES; + } + + return particle; +} + +static void UpdateParticles(CircularBuffer *circularBuffer, int screenWidth, int screenHeight) +{ + for (int i = circularBuffer->tail; i != circularBuffer->head; i = (i + 1)%MAX_PARTICLES) + { + // Update particle life and positions + circularBuffer->buffer[i].lifeTime += 1.0f/60.0f; // 60 FPS -> 1/60 seconds per frame + + switch (circularBuffer->buffer[i].type) + { + case WATER: + circularBuffer->buffer[i].position.x += circularBuffer->buffer[i].velocity.x; + circularBuffer->buffer[i].velocity.y += 0.2f; // Gravity + circularBuffer->buffer[i].position.y += circularBuffer->buffer[i].velocity.y; + break; + case SMOKE: + circularBuffer->buffer[i].position.x += circularBuffer->buffer[i].velocity.x; + circularBuffer->buffer[i].velocity.y -= 0.05f; // Upwards + circularBuffer->buffer[i].position.y += circularBuffer->buffer[i].velocity.y; + circularBuffer->buffer[i].radius += 0.5f; // Increment radius: smoke expands + circularBuffer->buffer[i].color.a -= 4; // Decrement alpha: smoke fades + if (circularBuffer->buffer[i].color.a < 4) // If alpha transparent, particle dies + circularBuffer->buffer[i].alive = false; + break; + case FIRE: + // Add a little horizontal oscillation to fire particles + circularBuffer->buffer[i].position.x += circularBuffer->buffer[i].velocity.x + cosf(circularBuffer->buffer[i].lifeTime*215.0f); + circularBuffer->buffer[i].velocity.y -= 0.05f; // Upwards + circularBuffer->buffer[i].position.y += circularBuffer->buffer[i].velocity.y; + circularBuffer->buffer[i].radius -= 0.15f; // Decrement radius: fire shrinks + circularBuffer->buffer[i].color.g -= 3; // Decrement green: fire turns reddish starting from yellow + if (circularBuffer->buffer[i].radius <= 0.02f) // If radius too small, particle dies + circularBuffer->buffer[i].alive = false; + break; + default: break; + } + + // Disable particle when out of screen + Vector2 center = circularBuffer->buffer[i].position; + float radius = circularBuffer->buffer[i].radius; + if ((center.x < -radius) || (center.x > screenWidth + radius) || + (center.y < -radius) || (center.y > screenHeight + radius)) + circularBuffer->buffer[i].alive = false; + } +} +static void UpdateCircularBuffer(CircularBuffer *circularBuffer) +{ + // Update circular buffer: advance tail over dead particles + while ((circularBuffer->tail != circularBuffer->head) && + !circularBuffer->buffer[circularBuffer->tail].alive) + { + circularBuffer->tail = (circularBuffer->tail + 1)%MAX_PARTICLES; + } +} + +static void DrawParticles(CircularBuffer *circularBuffer) +{ + for (int i = circularBuffer->tail; i != circularBuffer->head; i = (i + 1)%MAX_PARTICLES) + { + if (circularBuffer->buffer[i].alive) + { + DrawCircleV(circularBuffer->buffer[i].position, + circularBuffer->buffer[i].radius, + circularBuffer->buffer[i].color); + } + } +} diff --git a/examples/shapes/shapes_simple_particles.png b/examples/shapes/shapes_simple_particles.png new file mode 100644 index 0000000000000000000000000000000000000000..78abece57c0dccecba54c3c679beb9e163d6460a GIT binary patch literal 32265 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 A2LJ#7 literal 0 HcmV?d00001 diff --git a/projects/VS2022/examples/shapes_simple_particles.vcxproj b/projects/VS2022/examples/shapes_simple_particles.vcxproj new file mode 100644 index 000000000..8a5270503 --- /dev/null +++ b/projects/VS2022/examples/shapes_simple_particles.vcxproj @@ -0,0 +1,569 @@ + + + + + Debug.DLL + ARM64 + + + Debug.DLL + Win32 + + + Debug.DLL + x64 + + + Debug + ARM64 + + + Debug + Win32 + + + Debug + x64 + + + Release.DLL + ARM64 + + + Release.DLL + Win32 + + + Release.DLL + x64 + + + Release + ARM64 + + + Release + Win32 + + + Release + x64 + + + + {497FDF54-9762-4048-A833-61CC3980A0FB} + Win32Proj + shapes_simple_particles + 10.0 + shapes_simple_particles + + + + Application + true + $(DefaultPlatformToolset) + Unicode + + + Application + true + $(DefaultPlatformToolset) + Unicode + + + Application + true + $(DefaultPlatformToolset) + Unicode + + + Application + true + $(DefaultPlatformToolset) + Unicode + + + Application + true + $(DefaultPlatformToolset) + Unicode + + + Application + true + $(DefaultPlatformToolset) + Unicode + + + Application + false + $(DefaultPlatformToolset) + true + Unicode + + + Application + false + $(DefaultPlatformToolset) + true + Unicode + + + Application + false + $(DefaultPlatformToolset) + true + Unicode + + + Application + false + $(DefaultPlatformToolset) + true + Unicode + + + Application + false + $(DefaultPlatformToolset) + true + Unicode + + + Application + false + $(DefaultPlatformToolset) + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + true + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + true + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + true + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + true + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + true + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + $(SolutionDir)..\..\examples\shapes + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\shapes + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\shapes + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\shapes + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\shapes + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\shapes + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\shapes + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\shapes + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\shapes + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\shapes + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\shapes + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\shapes + WindowsLocalDebugger + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) + CompileAsC + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + + + Console + true + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) + CompileAsC + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + /FS %(AdditionalOptions) + + + Console + true + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;shcore.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) + CompileAsC + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + /FS %(AdditionalOptions) + + + Console + true + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) + CompileAsC + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + + + Console + true + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" + Copy Debug DLL to output directory + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) + CompileAsC + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + + + Console + true + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" + Copy Debug DLL to output directory + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) + CompileAsC + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + + + Console + true + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" + Copy Debug DLL to output directory + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + CompileAsC + true + + + Console + true + true + true + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + CompileAsC + true + + + Console + true + true + true + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + CompileAsC + true + + + Console + true + true + true + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + CompileAsC + true + + + Console + true + true + true + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + + + xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" + + + Copy Release DLL to output directory + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + CompileAsC + true + + + Console + true + true + true + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + + + xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" + + + Copy Release DLL to output directory + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + CompileAsC + true + + + Console + true + true + true + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + + + xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" + + + Copy Release DLL to output directory + + + + + + + + + + + {e89d61ac-55de-4482-afd4-df7242ebc859} + + + + + + \ No newline at end of file diff --git a/projects/VS2022/raylib.sln b/projects/VS2022/raylib.sln index 881c489ba..48f3762dd 100644 --- a/projects/VS2022/raylib.sln +++ b/projects/VS2022/raylib.sln @@ -383,6 +383,14 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "shapes_triangle_strip", "ex EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "core_directory_files", "examples\core_directory_files.vcxproj", "{6B1A933E-71B8-4C1F-9E79-02D98830E671}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "shapes_kaleidoscope", "examples\shapes_kaleidoscope.vcxproj", "{6B1A933E-71B8-4C1F-9E79-02D98830E671}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "shapes_recursive_tree", "examples\shapes_recursive_tree.vcxproj", "{6B1A933E-71B8-4C1F-9E79-02D98830E671}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "shapes_triangle_strip", "examples\shapes_triangle_strip.vcxproj", "{2CCCD9E4-9058-4291-BD89-39C979F0CA1E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "shapes_simple_particles", "examples\shapes_simple_particles.vcxproj", "{6B1A933E-71B8-4C1F-9E79-02D98830E671}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug.DLL|ARM64 = Debug.DLL|ARM64