49 lines
1.3 KiB
Lua
49 lines
1.3 KiB
Lua
|
local traxx = require "traxx"
|
||
|
require "utils"
|
||
|
require "string"
|
||
|
require "math"
|
||
|
|
||
|
function start_blasting(track)
|
||
|
local blast = table.shallow_copy(traxx[track])
|
||
|
blast.channel = "blast"
|
||
|
ctx.udata.blast = blast
|
||
|
ctx.udata.last_beat = ctx.udata.time + 60 / blast.bpm
|
||
|
audio_play(ctx.udata.blast)
|
||
|
end
|
||
|
|
||
|
function game_tick()
|
||
|
if ctx.initialization_needed then
|
||
|
ctx.udata = {
|
||
|
time = 0,
|
||
|
beat = 0
|
||
|
}
|
||
|
start_blasting("mod22")
|
||
|
end
|
||
|
|
||
|
local state = ctx.udata
|
||
|
|
||
|
draw_rectangle {
|
||
|
rect = { w = 960, h = 540 },
|
||
|
color = { r = 125, a = 255 }
|
||
|
}
|
||
|
|
||
|
state.time = state.time + ctx.frame_duration
|
||
|
if state.time - state.last_beat > 60 / state.blast.bpm then
|
||
|
state.last_beat = state.last_beat + 60 / state.blast.bpm
|
||
|
state.beat = state.beat + 1
|
||
|
-- draw_rectangle {
|
||
|
-- rect = { w = 64, h = 64 },
|
||
|
-- color = { r = 255, a = 255 }
|
||
|
-- }
|
||
|
end
|
||
|
|
||
|
local wobble = sinease(12, state.time - state.beat * (60 / state.blast.bpm) , (60 / state.blast.bpm) / 1.5, 0)
|
||
|
|
||
|
for i = 0,10 do
|
||
|
draw_sprite {
|
||
|
texture = "art/creatures/meathead/" .. string.format("dance-%s.png", pingpong(state.beat, 3)),
|
||
|
rect = { w = 64, h = 64 + wobble, x = 300 + i * 32, y = 300 - wobble }
|
||
|
}
|
||
|
end
|
||
|
end
|