+ flashing badges and grades to song plates

This commit is contained in:
FajsiEx 2021-08-26 15:31:28 +02:00
parent a6c315b851
commit 09b7e5021e
2 changed files with 53 additions and 2 deletions

View File

@ -146,3 +146,11 @@ function GetDisplayDifficulty(jacketPath, difficulty)
return difficulty+1 return difficulty+1
end end
function split(s, delimiter)
result = {};
for match in (s..delimiter):gmatch("(.-)"..delimiter) do
table.insert(result, match);
end
return result;
end

View File

@ -130,6 +130,12 @@ local transitionAfterscrollJacketBgAlpha = 0;
local transitionLaserScale = 0; local transitionLaserScale = 0;
local transitionLaserY = 0; local transitionLaserY = 0;
-- Flash transition (animation)
-- Used for flashing the badges
-- 0 = minimum brightness; 0.5 = maximum brightness; 1 = minimum brightness again
local transitionFlashScale = 0;
local transitionFlashAlpha = 1;
local transitionLeaveReverse = false; local transitionLeaveReverse = false;
local transitionLeaveScale = 0; local transitionLeaveScale = 0;
local transitionLeaveOffsetY = 0; local transitionLeaveOffsetY = 0;
@ -318,17 +324,29 @@ function drawSong(song, y)
if selectedSongDifficulty.topBadge then if selectedSongDifficulty.topBadge then
badgeImage = badgeImages[selectedSongDifficulty.topBadge+1]; badgeImage = badgeImages[selectedSongDifficulty.topBadge+1];
end end
local badgeAlpha = 1;
if (selectedSongDifficulty.topBadge >= 3) then
badgeAlpha = transitionFlashAlpha; -- If hard clear or above, flash the badge
end
gfx.BeginPath() gfx.BeginPath()
gfx.ImageRect(songX+282, y+44, 79, 69, badgeImage, 1, 0) gfx.ImageRect(songX+282, y+44, 79, 69, badgeImage, badgeAlpha, 0)
-- Draw grade -- Draw grade
local gradeImage = gradeImages.none; local gradeImage = gradeImages.none;
local gradeAlpha = 1;
if bestScore then if bestScore then
gradeImage = getGradeImageForScore(bestScore.score) gradeImage = getGradeImageForScore(bestScore.score)
if (bestScore.score >= gradeCutoffs.S) then
gradeAlpha = transitionFlashAlpha; -- If S, flash the badge
end
end end
gfx.BeginPath(); gfx.BeginPath();
gfx.ImageRect(songX+391, y+47, 60, 60, gradeImage, 1, 0); gfx.ImageRect(songX+391, y+47, 60, 60, gradeImage, gradeAlpha, 0);
-- Draw top 50 label if applicable -- Draw top 50 label if applicable
if (top50diffs[selectedSongDifficulty.id]) then if (top50diffs[selectedSongDifficulty.id]) then
@ -609,6 +627,31 @@ function tickTransitions(deltaTime)
transitionLaserY = desh - math.min(transitionLaserScale * 2 * desh, desh); transitionLaserY = desh - math.min(transitionLaserScale * 2 * desh, desh);
-- Flash transition
if transitionFlashScale < 1 then
local songBpm = 120;
if (songwheel.songs[selectedIndex]) then
songBpm = songwheel.songs[selectedIndex].bpm;
-- Is a variable BPM
if (type(songBpm) == "string") then
local s = split(songBpm, '-');
songBpm = tonumber(s[1]); -- Lowest bpm value
end
end
transitionFlashScale = transitionFlashScale + deltaTime / (60/songBpm) -- transition should last for that time in seconds
else
transitionFlashScale = 0
end
if transitionFlashScale < 0.5 then
transitionFlashAlpha = transitionFlashScale * 2;
else
transitionFlashAlpha = 1-((transitionFlashScale-0.5) * 2);
end
transitionFlashAlpha = 1+transitionFlashAlpha*0.5
-- Leave transition -- Leave transition
if (transitionLeaveReverse) then if (transitionLeaveReverse) then
if transitionLeaveScale > 0 then if transitionLeaveScale > 0 then