From fd520944e475dad338f4f752d244172232670900 Mon Sep 17 00:00:00 2001 From: yaw-man Date: Fri, 13 Jan 2023 12:43:12 -0400 Subject: [PATCH] Add autorhythm --- .gitignore | 1 + chime8.ogg | Bin 0 -> 33218 bytes main.lua | 141 +++++++++++++++++++++++++++++++++-------------------- 3 files changed, 88 insertions(+), 54 deletions(-) create mode 100644 .gitignore create mode 100644 chime8.ogg diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d163863 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +build/ \ No newline at end of file diff --git a/chime8.ogg b/chime8.ogg new file mode 100644 index 0000000000000000000000000000000000000000..96174b9ddd772d0dc351847747f356c536b9c1a3 GIT binary patch literal 33218 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%0A5K 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 1.0 then - beat.score = 0 - return true - end - - return false + --Base case 2: second tap. + if not beat.mu then + beat.mu = dt + return 2.0 end - local function OnImpact( impact ) - --Update beat timer. - if not beat then - beat = { mu = - end - local dt = impact.t - beat.t - beat.t = impact.t + --General case: update average beat length. + local WEIGHT = 0.25 --High number makes the last beat more significant. + local mu = ( 1.0 - WEIGHT ) * beat.mu + WEIGHT * dt + beat.mu = mu + --Safety: avoid a dbz. + if mu < 0.001 or dt < 0.001 then + error( "DBZ! Beat length too small." ) + end + --Calculate beat score. + local score = dt * dt / ( mu * mu ) + local TOLERANCE = 1.15 + if dt < mu then + return 1.15 * score + else + return 1.15 / score + end +end +local function OnVictory() - --Handle sound. - love.audio.play(sound) +end + +local function OnImpact( impact ) + + local score = BeatScore( impact.t ) + if score > state.beatScoreThreshold then + + state.beatScoreThreshold = 1.0 + state.currentBeat = state.currentBeat + 1 + if state.currentBeat >= 120 then + return OnVictory() end - local function OnVictory() + love.audio.play(sounds.goodPing) - end + else - function love.draw() - love.graphics.setColor(1.0, 1.0, 1.0) - love.graphics.print("Hello World!", 400, 300) - love.graphics.print( beat.t, 0, 0 ) - love.graphics.print( beat.dt, 0, 100 ) - love.graphics.setColor(0, 0.4, 0.4) - --love.graphics.circle("fill", 0, 0, 10) - end - - function love.load() - sound = love.audio.newSource("soundTest.ogg", "static") - - return NewGame() - - end - - function love.update( dt ) - - end + state.beatScoreThreshold = state.beatScoreThreshold - score + love.audio.play(sounds.badPing) + end - function love.keypressed( key, code, isRepeat ) - if key == "escape" then return love.event.quit() end - if key == "w" then return OnImpact( ) end - if key == "enter" then return NewGame() end - end \ No newline at end of file +end + + + +function love.draw() + love.graphics.setColor(1.0, 1.0, 1.0) + love.graphics.print("Hello World!", 400, 300) + love.graphics.print( state.beat.mu or 0, 0, 0, 0, 10, 10 ) + love.graphics.print( state.beat.t or 0, 0, 100, 0, 10, 10 ) + love.graphics.print( state.beatScoreThreshold, 0, 200, 0, 10, 10 ) + love.graphics.setColor(0, 0.4, 0.4) + --love.graphics.circle("fill", 0, 0, 10) +end + +function love.load() + sounds.goodPing = love.audio.newSource("soundTest.ogg", "static") + sounds.badPing = love.audio.newSource("chime8.ogg", "static") + + return NewGame() + +end + +function love.update( dt ) + +end + + +function love.keypressed( key, code, isRepeat ) + if key == "escape" then return love.event.quit() end + if key == "w" then return OnImpact{ t = love.timer.getTime() } end + if key == "enter" then return NewGame() end +end \ No newline at end of file