aboutsummaryrefslogtreecommitdiff
path: root/examples/audio_module_playing.lua
diff options
context:
space:
mode:
authorraysan5 <raysan5@gmail.com>2016-08-06 11:32:35 +0200
committerraysan5 <raysan5@gmail.com>2016-08-06 11:32:35 +0200
commit00c7e54d3c593dbddb036f2185e614e7e4b22a1f (patch)
tree3ef6a46031712ff9551c2711adcc9fa3045a618b /examples/audio_module_playing.lua
parent5f1b4e94745303ab9df87421cdd9ffb9448fee01 (diff)
downloadraylib-00c7e54d3c593dbddb036f2185e614e7e4b22a1f.tar.gz
raylib-00c7e54d3c593dbddb036f2185e614e7e4b22a1f.zip
Add raylib lua examples
Diffstat (limited to 'examples/audio_module_playing.lua')
-rw-r--r--examples/audio_module_playing.lua131
1 files changed, 131 insertions, 0 deletions
diff --git a/examples/audio_module_playing.lua b/examples/audio_module_playing.lua
new file mode 100644
index 00000000..c309c253
--- /dev/null
+++ b/examples/audio_module_playing.lua
@@ -0,0 +1,131 @@
+-------------------------------------------------------------------------------------------
+--
+-- raylib [audio] example - Module playing (streaming)
+--
+-- 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_CIRCLES = 64
+
+typedef struct { -- TODO: Find a Lua alternative: TABLES?
+ Vector2 position
+ float radius
+ float alpha
+ float speed
+ Color color
+} CircleWave
+
+-- Initialization
+-------------------------------------------------------------------------------------------
+local screenWidth = 800
+local screenHeight = 450
+
+InitWindow(screenWidth, screenHeight, "raylib [audio] example - module playing (streaming)")
+
+InitAudioDevice() -- Initialize audio device
+
+local colors = { ORANGE, RED, GOLD, LIME, BLUE, VIOLET, BROWN, LIGHTGRAY, PINK,
+ YELLOW, GREEN, SKYBLUE, PURPLE, BEIGE }
+
+-- Creates ome circles for visual effect
+local circles = {}
+
+for i = MAX_CIRCLES, 1, -1 do
+ circles[i].alpha = 0.0
+ circles[i].radius = GetRandomValue(10, 40)
+ circles[i].position.x = GetRandomValue(circles[i].radius, screenWidth - circles[i].radius)
+ circles[i].position.y = GetRandomValue(circles[i].radius, screenHeight - circles[i].radius)
+ circles[i].speed = (float)GetRandomValue(1, 100)/20000.0
+ circles[i].color = colors[GetRandomValue(1, 14)]
+end
+
+-- Load postprocessing bloom shader
+local shader = LoadShader("resources/shaders/glsl330/base.vs",
+ "resources/shaders/glsl330/bloom.fs")
+
+-- Create a RenderTexture2D to be used for render to texture
+local target = LoadRenderTexture(screenWidth, screenHeight)
+
+local xm = LoadMusicStream("resources/audio/mini1111.xm")
+
+PlayMusicStream(xm)
+
+local timePlayed = 0.0
+
+SetTargetFPS(60) -- Set our game to run at 60 frames-per-second
+-------------------------------------------------------------------------------------------
+
+-- Main game loop
+while not WindowShouldClose() do -- Detect window close button or ESC key
+ -- Update
+ ---------------------------------------------------------------------------------------
+ for i = MAX_CIRCLES, 1, -1 do
+ circles[i].alpha += circles[i].speed
+ circles[i].radius += circles[i].speed*10.0
+
+ if (circles[i].alpha > 1.0) then circles[i].speed = circles[i].speed*-1 end
+
+ if (circles[i].alpha <= 0.0) then
+ circles[i].alpha = 0.0
+ circles[i].radius = GetRandomValue(10, 40)
+ circles[i].position.x = GetRandomValue(circles[i].radius, screenWidth - circles[i].radius)
+ circles[i].position.y = GetRandomValue(circles[i].radius, screenHeight - circles[i].radius)
+ circles[i].color = colors[GetRandomValue(0, 13)]
+ circles[i].speed = (float)GetRandomValue(1, 100)/20000.0
+ end
+ end
+
+ -- Get timePlayed scaled to bar dimensions
+ timePlayed = (GetMusicTimePlayed(xm)/GetMusicTimeLength(xm)*(screenWidth - 40))*2
+
+ UpdateMusicStream(xm) -- Update music buffer with new stream data
+ ---------------------------------------------------------------------------------------
+
+ -- Draw
+ ---------------------------------------------------------------------------------------
+ BeginDrawing()
+
+ ClearBackground(BLACK)
+
+ BeginTextureMode(target) -- Enable drawing to texture
+
+ for i = MAX_CIRCLES, 1, -1 do
+ DrawCircleV(circles[i].position, circles[i].radius, Fade(circles[i].color, circles[i].alpha))
+ end
+
+ EndTextureMode() -- End drawing to texture (now we have a texture available for next passes)
+
+ BeginShaderMode(shader)
+
+ -- NOTE: Render texture must be y-flipped due to default OpenGL coordinates (left-bottom)
+ DrawTextureRec(target.texture, Rectangle(0, 0, target.texture.width, -target.texture.height), Vector2(0, 0), WHITE)
+
+ EndShaderMode()
+
+ -- Draw time bar
+ DrawRectangle(20, screenHeight - 20 - 12, screenWidth - 40, 12, LIGHTGRAY)
+ DrawRectangle(20, screenHeight - 20 - 12, (int)timePlayed, 12, MAROON)
+ DrawRectangleLines(20, screenHeight - 20 - 12, screenWidth - 40, 12, WHITE)
+
+ EndDrawing()
+ ---------------------------------------------------------------------------------------
+end
+
+-- De-Initialization
+-------------------------------------------------------------------------------------------
+UnloadShader(shader) -- Unload shader
+UnloadRenderTexture(target) -- Unload render texture
+
+UnloadMusicStream(xm) -- Unload music stream buffers from RAM
+
+CloseAudioDevice() -- Close audio device (music streaming is automatically stopped)
+
+CloseWindow() -- Close window and OpenGL context
+-------------------------------------------------------------------------------------------
+
+return 0
+} \ No newline at end of file