From 049806d9e2bef5c26cbc79022c00c1c090a29f07 Mon Sep 17 00:00:00 2001 From: BoatsandJoes Date: Thu, 2 Dec 2021 10:38:31 -0600 Subject: [PATCH] Added a new default line clear animation using easing functions. --- tetris/modes/gamemode.lua | 58 +++++++++++++++++++++++++++++++++++---- 1 file changed, 52 insertions(+), 6 deletions(-) diff --git a/tetris/modes/gamemode.lua b/tetris/modes/gamemode.lua index b97eeec..5c20566 100644 --- a/tetris/modes/gamemode.lua +++ b/tetris/modes/gamemode.lua @@ -598,11 +598,28 @@ function GameMode:getHighScoreData() end function GameMode:animation(x, y, skin, colour) + -- Animation progress where 0 = start and 1 = end + local progress = 1 + if self.last_lcd ~= 0 then + progress = (self.last_lcd - self.lcd) / self.last_lcd + end + -- Change this number to change "bounciness" + local bounce = 13 + -- Convert progress through the animation into an alpha value + local alpha = 0 + -- Cutoff is arbitrary: corresponds to level 500 in Marathon A2 + if self.last_lcd > 25 then + -- Goes up and down: looks better when animation is long + alpha = 1 - (bounce * progress^3 - 1.5 * bounce * progress^2 + (0.5 * bounce + 1) * progress) + else + -- Always decreasing: looks better when animation is short + alpha = 1 - progress * progress + end return { - 1, 1, 1, - -0.25 + 1.25 * (self.lcd / self.last_lcd), - skin, colour, - 48 + x * 16, y * 16 + 1, 1, 1, + alpha, + skin, colour, + 48 + x * 16, y * 16 } end @@ -614,8 +631,37 @@ function GameMode:drawLineClearAnimation() -- animation function -- params: block x, y, skin, colour -- returns: table with RGBA, skin, colour, x, y - - -- Fadeout (default) + + -- Flashy Fadeout (default) + --[[ + function animation(x, y, skin, colour) + -- Animation progress where 0 = start and 1 = end + local progress = 1 + if self.last_lcd ~= 0 then + progress = (self.last_lcd - self.lcd) / self.last_lcd + end + -- Change this number to change "bounciness" + local bounce = 13 + -- Convert progress through the animation into an alpha value + local alpha = 0 + -- Cutoff is arbitrary: corresponds to level 500 in Marathon A2 + if self.last_lcd > 25 then + -- Goes up and down: looks better when animation is long + alpha = 1 - (bounce * progress^3 - 1.5 * bounce * progress^2 + (0.5 * bounce + 1) * progress) + else + -- Always decreasing: looks better when animation is short + alpha = 1 - progress * progress + end + return { + 1, 1, 1, + alpha, + skin, colour, + 48 + x * 16, y * 16 + } + end + --]] + + -- Fadeout --[[ function animation(x, y, skin, colour) return {