chore: clean recommit
This commit is contained in:
parent
6bb62d9932
commit
8739e3b347
134 changed files with 15442 additions and 10648 deletions
|
|
@ -1,11 +1,15 @@
|
|||
/*******************************************************************************************
|
||||
*
|
||||
* raylib example - particles blending
|
||||
* raylib [textures] example - particles blending
|
||||
*
|
||||
* This example has been created using raylib 1.7 (www.raylib.com)
|
||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||
* Example complexity rating: [★☆☆☆] 1/4
|
||||
*
|
||||
* Copyright (c) 2017 Ramon Santamaria (@raysan5)
|
||||
* Example originally created with raylib 1.7, last time updated with raylib 3.5
|
||||
*
|
||||
* 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) 2017-2025 Ramon Santamaria (@raysan5)
|
||||
*
|
||||
********************************************************************************************/
|
||||
|
||||
|
|
@ -14,12 +18,19 @@ using static Raylib_cs.Raylib;
|
|||
|
||||
namespace Examples.Textures;
|
||||
|
||||
public class ParticlesBlending
|
||||
public partial class ParticlesBlending : IExample
|
||||
{
|
||||
private const int screenWidth = 800;
|
||||
private const int screenHeight = 450;
|
||||
|
||||
public const int MaxParticles = 200;
|
||||
|
||||
public string Name => "Textures / Particles Blending";
|
||||
|
||||
public string Title => "raylib [textures] example - particles blending";
|
||||
|
||||
// Particle structure with basic data
|
||||
struct Particle
|
||||
private struct Particle
|
||||
{
|
||||
public Vector2 Position;
|
||||
public Color Color;
|
||||
|
|
@ -30,20 +41,18 @@ public class ParticlesBlending
|
|||
public bool Active;
|
||||
}
|
||||
|
||||
public static int Main()
|
||||
private Particle[] mouseTail;
|
||||
private float gravity;
|
||||
private Texture2D smoke;
|
||||
private BlendMode blending;
|
||||
|
||||
public void Init()
|
||||
{
|
||||
// Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
const int screenWidth = 800;
|
||||
const int screenHeight = 450;
|
||||
|
||||
InitWindow(screenWidth, screenHeight, "raylib [textures] example - particles blending");
|
||||
|
||||
// Particles pool, reuse them!
|
||||
Particle[] mouseTail = new Particle[MaxParticles];
|
||||
mouseTail = new Particle[MaxParticles];
|
||||
|
||||
// Initialize particles
|
||||
for (int i = 0; i < mouseTail.Length; i++)
|
||||
for (var i = 0; i < mouseTail.Length; i++)
|
||||
{
|
||||
mouseTail[i].Position = new Vector2(0, 0);
|
||||
mouseTail[i].Color = new Color(
|
||||
|
|
@ -58,113 +67,133 @@ public class ParticlesBlending
|
|||
mouseTail[i].Active = false;
|
||||
}
|
||||
|
||||
float gravity = 3.0f;
|
||||
Texture2D smoke = LoadTexture("resources/spark_flame.png");
|
||||
BlendMode blending = BlendMode.Alpha;
|
||||
gravity = 3.0f;
|
||||
smoke = LoadTexture("resources/spark_flame.png");
|
||||
blending = BlendMode.Alpha;
|
||||
}
|
||||
|
||||
public void Update()
|
||||
{
|
||||
// Update
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Activate one particle every frame and Update active particles
|
||||
// NOTE: Particles initial position should be mouse position when activated
|
||||
// NOTE: Particles fall down with gravity and rotation... and disappear after 2 seconds (alpha = 0)
|
||||
// NOTE: When a particle disappears, active = false and it can be reused
|
||||
for (var i = 0; i < mouseTail.Length; i++)
|
||||
{
|
||||
if (!mouseTail[i].Active)
|
||||
{
|
||||
mouseTail[i].Active = true;
|
||||
mouseTail[i].Alpha = 1.0f;
|
||||
mouseTail[i].Position = GetMousePosition();
|
||||
i = mouseTail.Length;
|
||||
}
|
||||
}
|
||||
|
||||
for (var i = 0; i < mouseTail.Length; i++)
|
||||
{
|
||||
if (mouseTail[i].Active)
|
||||
{
|
||||
mouseTail[i].Position.Y += gravity / 2;
|
||||
mouseTail[i].Alpha -= 0.005f;
|
||||
|
||||
if (mouseTail[i].Alpha <= 0.0f)
|
||||
{
|
||||
mouseTail[i].Active = false;
|
||||
}
|
||||
|
||||
mouseTail[i].Rotation += 2.0f;
|
||||
}
|
||||
}
|
||||
|
||||
if (IsKeyPressed(KeyboardKey.Space))
|
||||
{
|
||||
if (blending == BlendMode.Alpha)
|
||||
{
|
||||
blending = BlendMode.Additive;
|
||||
}
|
||||
else
|
||||
{
|
||||
blending = BlendMode.Alpha;
|
||||
}
|
||||
}
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Draw
|
||||
//----------------------------------------------------------------------------------
|
||||
BeginDrawing();
|
||||
ClearBackground(Color.DarkGray);
|
||||
|
||||
BeginBlendMode(blending);
|
||||
|
||||
// Draw active particles
|
||||
for (var i = 0; i < mouseTail.Length; i++)
|
||||
{
|
||||
if (mouseTail[i].Active)
|
||||
{
|
||||
Rectangle source = new(0, 0, smoke.Width, smoke.Height);
|
||||
Rectangle dest = new(
|
||||
mouseTail[i].Position.X,
|
||||
mouseTail[i].Position.Y,
|
||||
smoke.Width * mouseTail[i].Size,
|
||||
smoke.Height * mouseTail[i].Size
|
||||
);
|
||||
Vector2 position = new(
|
||||
smoke.Width * mouseTail[i].Size / 2,
|
||||
smoke.Height * mouseTail[i].Size / 2
|
||||
);
|
||||
var color = Fade(mouseTail[i].Color, mouseTail[i].Alpha);
|
||||
DrawTexturePro(smoke, source, dest, position, mouseTail[i].Rotation, color);
|
||||
}
|
||||
}
|
||||
|
||||
EndBlendMode();
|
||||
|
||||
DrawText("PRESS SPACE to CHANGE BLENDING MODE", 180, 20, 20, Color.Black);
|
||||
|
||||
if (blending == BlendMode.Alpha)
|
||||
{
|
||||
DrawText("ALPHA BLENDING", 290, screenHeight - 40, 20, Color.Black);
|
||||
}
|
||||
else
|
||||
{
|
||||
DrawText("ADDITIVE BLENDING", 280, screenHeight - 40, 20, Color.RayWhite);
|
||||
}
|
||||
|
||||
EndDrawing();
|
||||
//----------------------------------------------------------------------------------
|
||||
}
|
||||
|
||||
public void Unload()
|
||||
{
|
||||
UnloadTexture(smoke);
|
||||
}
|
||||
|
||||
public static int Main()
|
||||
{
|
||||
// Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
InitWindow(screenWidth, screenHeight, "raylib [textures] example - particles blending");
|
||||
|
||||
SetTargetFPS(60);
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
var game = new ParticlesBlending();
|
||||
game.Init();
|
||||
|
||||
// Main game loop
|
||||
while (!WindowShouldClose())
|
||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
||||
{
|
||||
// Update
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Activate one particle every frame and Update active particles
|
||||
// NOTE: Particles initial position should be mouse position when activated
|
||||
// NOTE: Particles fall down with gravity and rotation... and disappear after 2 seconds (alpha = 0)
|
||||
// NOTE: When a particle disappears, active = false and it can be reused.
|
||||
for (int i = 0; i < mouseTail.Length; i++)
|
||||
{
|
||||
if (!mouseTail[i].Active)
|
||||
{
|
||||
mouseTail[i].Active = true;
|
||||
mouseTail[i].Alpha = 1.0f;
|
||||
mouseTail[i].Position = GetMousePosition();
|
||||
i = mouseTail.Length;
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < mouseTail.Length; i++)
|
||||
{
|
||||
if (mouseTail[i].Active)
|
||||
{
|
||||
mouseTail[i].Position.Y += gravity / 2;
|
||||
mouseTail[i].Alpha -= 0.005f;
|
||||
|
||||
if (mouseTail[i].Alpha <= 0.0f)
|
||||
{
|
||||
mouseTail[i].Active = false;
|
||||
}
|
||||
|
||||
mouseTail[i].Rotation += 2.0f;
|
||||
}
|
||||
}
|
||||
|
||||
if (IsKeyPressed(KeyboardKey.Space))
|
||||
{
|
||||
if (blending == BlendMode.Alpha)
|
||||
{
|
||||
blending = BlendMode.Additive;
|
||||
}
|
||||
else
|
||||
{
|
||||
blending = BlendMode.Alpha;
|
||||
}
|
||||
}
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Draw
|
||||
//----------------------------------------------------------------------------------
|
||||
BeginDrawing();
|
||||
ClearBackground(Color.DarkGray);
|
||||
|
||||
BeginBlendMode(blending);
|
||||
|
||||
// Draw active particles
|
||||
for (int i = 0; i < mouseTail.Length; i++)
|
||||
{
|
||||
if (mouseTail[i].Active)
|
||||
{
|
||||
Rectangle source = new(0, 0, smoke.Width, smoke.Height);
|
||||
Rectangle dest = new(
|
||||
mouseTail[i].Position.X,
|
||||
mouseTail[i].Position.Y,
|
||||
smoke.Width * mouseTail[i].Size,
|
||||
smoke.Height * mouseTail[i].Size
|
||||
);
|
||||
Vector2 position = new(
|
||||
smoke.Width * mouseTail[i].Size / 2,
|
||||
smoke.Height * mouseTail[i].Size / 2
|
||||
);
|
||||
Color color = ColorAlpha(mouseTail[i].Color, mouseTail[i].Alpha);
|
||||
DrawTexturePro(smoke, source, dest, position, mouseTail[i].Rotation, color);
|
||||
}
|
||||
}
|
||||
|
||||
EndBlendMode();
|
||||
|
||||
DrawText("PRESS SPACE to CHANGE BLENDING MODE", 180, 20, 20, Color.Black);
|
||||
|
||||
if (blending == BlendMode.Alpha)
|
||||
{
|
||||
DrawText("ALPHA BLENDING", 290, screenHeight - 40, 20, Color.Black);
|
||||
}
|
||||
else
|
||||
{
|
||||
DrawText("ADDITIVE BLENDING", 280, screenHeight - 40, 20, Color.RayWhite);
|
||||
}
|
||||
|
||||
EndDrawing();
|
||||
//----------------------------------------------------------------------------------
|
||||
game.Update();
|
||||
}
|
||||
|
||||
game.Unload();
|
||||
|
||||
// De-Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
UnloadTexture(smoke);
|
||||
|
||||
CloseWindow();
|
||||
CloseWindow(); // Close window and OpenGL context
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
return 0;
|
||||
|
|
|
|||
Loading…
Reference in a new issue