From f25ab51cef533d27115f6aa6fc053ffd6d08bd49 Mon Sep 17 00:00:00 2001 From: FajsiEx Date: Fri, 30 Jul 2021 21:34:36 +0200 Subject: [PATCH] + scrolling transition to song wheel --- scripts/common/easings.lua | 2 +- scripts/songselect/songwheel.lua | 46 ++++++++++++++++++++++++++++---- 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/scripts/common/easings.lua b/scripts/common/easings.lua index 19fd2e7..a8bb608 100644 --- a/scripts/common/easings.lua +++ b/scripts/common/easings.lua @@ -23,7 +23,7 @@ local pow = function (a,b) return a ^ b; end -local function inQuad(t, b, c, d) +local function inQuad(t) t = t / 1 return 1 * pow(t, 2) + 0 end diff --git a/scripts/songselect/songwheel.lua b/scripts/songselect/songwheel.lua index b7e7acb..04abea0 100644 --- a/scripts/songselect/songwheel.lua +++ b/scripts/songselect/songwheel.lua @@ -1,4 +1,6 @@ +local Easing = require('common.easings'); + local backgroundImage = gfx.CreateSkinImage("song_select/bg.png", 1) local songPlateBg = gfx.CreateSkinImage("song_select/plate/bg.png", 1) local songPlateBottomBarOverlayImage = gfx.CreateSkinImage("song_select/plate/bottom_bar_overlay.png", 1) @@ -33,11 +35,17 @@ local resx, resy = game.GetResolution() local desw, desh; local scale; +local songPlateHeight = 172; + local selectedIndex = 1; local selectedDifficulty = 1; local jacketCache = {} +local transitionScrollScale = 0; +local transitionScrollOffsetY = 0; +local scrollingUp = false; + function resetLayoutInformation() resx, resy = game.GetResolution() desw = 1080 @@ -142,22 +150,23 @@ function drawSong(song, y) end function drawSongList() - local numOfSongsAround = 4; -- How many songs should be up and how many should be down of the selected one + local numOfSongsAround = 7; -- How many songs should be up and how many should be down of the selected one + local i=1; while (i <= numOfSongsAround) do local songIndex = getCorrectedIndex(selectedIndex, -i) - drawSong(songwheel.songs[songIndex], desh/2-172/2-172*i) + drawSong(songwheel.songs[songIndex], desh/2-songPlateHeight/2-songPlateHeight*i + transitionScrollOffsetY) i=i+1; end; -- Draw the selected song - drawSong(songwheel.songs[selectedIndex], desh/2-172/2) + drawSong(songwheel.songs[selectedIndex], desh/2-songPlateHeight/2 + transitionScrollOffsetY) i=1; while (i <= numOfSongsAround) do local songIndex = getCorrectedIndex(selectedIndex, i) - drawSong(songwheel.songs[songIndex], desh/2-172/2+172*i) + drawSong(songwheel.songs[songIndex], desh/2-songPlateHeight/2+songPlateHeight*i + transitionScrollOffsetY) i=i+1; end; end @@ -167,8 +176,23 @@ function drawCursor() gfx.ImageRect(desw/2-14, desh/2-213/2, 555, 213, cursorImage, 1, 0) end +function tickTransitions(deltaTime) + if transitionScrollScale < 1 then + transitionScrollScale = transitionScrollScale + deltaTime / 0.1 -- transition should last for that time in seconds + else + transitionScrollScale = 1 + end + + if scrollingUp then + transitionScrollOffsetY = Easing.inQuad(1-transitionScrollScale) * songPlateHeight; + else + transitionScrollOffsetY = Easing.inQuad(1-transitionScrollScale) * -songPlateHeight; + end +end + render = function (deltaTime) resetLayoutInformation(); + tickTransitions(deltaTime); gfx.Scale(scale, scale); if not difficultyNumbers then @@ -180,13 +204,25 @@ render = function (deltaTime) drawSongList() drawCursor() + gfx.BeginPath(); gfx.FontSize(18) gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_TOP) - gfx.Text('DELTA: ' .. deltaTime .. ' // SELECTED_INDEX: ' .. selectedIndex .. ' // SELECTED_DIFF: ' .. selectedDifficulty .. ' // #JACKET_CACHE: ' .. #jacketCache, 8, 8); + local debugScrollingUp= "FALSE" + if scrollingUp then debugScrollingUp = "TRUE" end; + gfx.Text('DELTA: ' .. deltaTime .. ' // SELECTED_INDEX: ' .. selectedIndex .. ' // SELECTED_DIFF: ' .. selectedDifficulty .. ' // SCROLLING_UP: ' .. debugScrollingUp, 8, 8); end set_index = function(newIndex) + transitionScrollScale = 0; + + scrollingUp = false; + if ((newIndex > selectedIndex and not (newIndex == #songwheel.songs and selectedIndex == 1)) or (newIndex == 1 and selectedIndex == #songwheel.songs)) then + scrollingUp = true; + end; + + -- TODO: add sfx for cursor change + selectedIndex = newIndex; end;