summaryrefslogtreecommitdiffhomepage
path: root/examples/textures_particles_trail_blending.lua
diff options
context:
space:
mode:
authorRay <[email protected]>2016-10-16 18:24:13 +0200
committerGitHub <[email protected]>2016-10-16 18:24:13 +0200
commita9315fc422a3a036891f50f0c2be5059c3db8b31 (patch)
tree9f5213dac656079e2163bc5d091200dc837672b8 /examples/textures_particles_trail_blending.lua
parent53056f3e7e84e18b8ebfc4a2ab2f7f1fbe7ae36c (diff)
parent1c05017548ea21dd1a44c31e9fc80b8700891f11 (diff)
downloadraylib-a9315fc422a3a036891f50f0c2be5059c3db8b31.tar.gz
raylib-a9315fc422a3a036891f50f0c2be5059c3db8b31.zip
Merge pull request #189 from raysan5/develop
Develop branch integration
Diffstat (limited to 'examples/textures_particles_trail_blending.lua')
-rw-r--r--examples/textures_particles_trail_blending.lua113
1 files changed, 113 insertions, 0 deletions
diff --git a/examples/textures_particles_trail_blending.lua b/examples/textures_particles_trail_blending.lua
new file mode 100644
index 00000000..d2c2518e
--- /dev/null
+++ b/examples/textures_particles_trail_blending.lua
@@ -0,0 +1,113 @@
+-------------------------------------------------------------------------------------------
+--
+-- raylib example - particles trail blending
+--
+-- This example has been created using raylib 1.6 (www.raylib.com)
+-- raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
+--
+-- Copyright (c) 2014-2016 Ramon Santamaria (@raysan5)
+--
+-------------------------------------------------------------------------------------------
+
+MAX_PARTICLES = 200
+
+-- Initialization
+-------------------------------------------------------------------------------------------
+local screenWidth = 800
+local screenHeight = 450
+
+InitWindow(screenWidth, screenHeight, "raylib [textures] example - particles trail blending")
+
+-- Particles pool, reuse them!
+local mouseTail = {}
+
+-- Initialize particles
+for i = 1, MAX_PARTICLES do
+ mouseTail[i] = {}
+ mouseTail[i].position = Vector2(0, 0)
+ mouseTail[i].color = Color(GetRandomValue(0, 255), GetRandomValue(0, 255), GetRandomValue(0, 255), 255)
+ mouseTail[i].alpha = 1.0
+ mouseTail[i].size = GetRandomValue(1, 30)/20.0
+ mouseTail[i].rotation = GetRandomValue(0, 360)
+ mouseTail[i].active = false
+end
+
+local gravity = 3.0
+
+local smoke = LoadTexture("resources/smoke.png")
+
+local blending = BlendMode.ALPHA
+
+SetTargetFPS(60)
+-------------------------------------------------------------------------------------------
+
+-- Main game loop
+while not WindowShouldClose() do -- 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 i = 1, MAX_PARTICLES do
+ if (not mouseTail[i].active) then
+ mouseTail[i].active = true
+ mouseTail[i].alpha = 1.0
+ mouseTail[i].position = GetMousePosition()
+ break
+ end
+ end
+
+ for i = 1, MAX_PARTICLES do
+ if (mouseTail[i].active) then
+ mouseTail[i].position.y = mouseTail[i].position.y + gravity
+ mouseTail[i].alpha = mouseTail[i].alpha - 0.01
+
+ if (mouseTail[i].alpha <= 0.0) then mouseTail[i].active = false end
+
+ mouseTail[i].rotation = mouseTail[i].rotation + 5.0
+ end
+ end
+
+ if (IsKeyPressed(KEY.SPACE)) then
+ if (blending == BlendMode.ALPHA) then blending = BlendMode.ADDITIVE
+ else blending = BlendMode.ALPHA end
+ end
+ ---------------------------------------------------------------------------------------
+
+ -- Draw
+ ---------------------------------------------------------------------------------------
+ BeginDrawing()
+
+ ClearBackground(DARKGRAY)
+
+ BeginBlendMode(blending)
+
+ -- Draw active particles
+ for i = 1, MAX_PARTICLES do
+ if (mouseTail[i].active) then
+ DrawTexturePro(smoke, Rectangle(0, 0, smoke.width, smoke.height),
+ Rectangle(mouseTail[i].position.x, mouseTail[i].position.y,
+ smoke.width*mouseTail[i].size//1, smoke.height*mouseTail[i].size//1),
+ Vector2(smoke.width*mouseTail[i].size/2, smoke.height*mouseTail[i].size/2),
+ mouseTail[i].rotation, Fade(mouseTail[i].color, mouseTail[i].alpha)) end
+ end
+
+ EndBlendMode()
+
+ DrawText("PRESS SPACE to CHANGE BLENDING MODE", 180, 20, 20, BLACK)
+
+ if (blending == BlendMode.ALPHA) then DrawText("ALPHA BLENDING", 290, screenHeight - 40, 20, BLACK)
+ else DrawText("ADDITIVE BLENDING", 280, screenHeight - 40, 20, RAYWHITE) end
+
+ EndDrawing()
+ ---------------------------------------------------------------------------------------
+end
+
+-- De-Initialization
+-------------------------------------------------------------------------------------------
+UnloadTexture(smoke)
+
+CloseWindow() -- Close window and OpenGL context
+------------------------------------------------------------------------------------------- \ No newline at end of file