diff --git a/scripts/songselect/filterwheel.lua b/scripts/songselect/filterwheel.lua index d0118c3..a8da821 100644 --- a/scripts/songselect/filterwheel.lua +++ b/scripts/songselect/filterwheel.lua @@ -3,13 +3,14 @@ local Easing = require('common.easings'); local SongSelectHeader = require('components.headers.songSelectHeader') local Footer = require('components.footer'); -local defaultFolderBgImage = gfx.CreateSkinImage('song_select/filter_wheel/bg.png', 0) +local defaultFolderBgImage = gfx.CreateSkinImage( + 'song_select/filter_wheel/bg.png', 0) local cursorImages = { gfx.CreateSkinImage("song_select/cursor.png", 1), -- Effective rate or fallback gfx.CreateSkinImage("song_select/cursor_exc.png", 1), -- Excessive rate gfx.CreateSkinImage("song_select/cursor_exc.png", 1), -- TODO: premissive rate - gfx.CreateSkinImage("song_select/cursor_exc.png", 1), -- TODO: blastive rate + gfx.CreateSkinImage("song_select/cursor_exc.png", 1) -- TODO: blastive rate } local ITEM_HEIGHT = 172; @@ -17,27 +18,20 @@ local ITEM_HEIGHT = 172; local specialFolders = { { keys = { - 'SOUND VOLTEX BOOTH', - 'SDVX BOOTH', - 'SOUND VOLTEX I', - 'SDVX I', - 'SOUND VOLTEX 1', - 'SDVX 1' + 'SOUND VOLTEX BOOTH', 'SDVX BOOTH', 'SOUND VOLTEX I', 'SDVX I', + 'SOUND VOLTEX 1', 'SDVX 1' }, - folderBg = gfx.CreateSkinImage('song_select/filter_wheel/special_folder_bgs/Booth.png', 0) - }, - { + folderBg = gfx.CreateSkinImage( + 'song_select/filter_wheel/special_folder_bgs/Booth.png', 0) + }, { keys = { - 'SOUND VOLTEX INFINITE INFECTION', - 'SDVX INFINITE INFECTION', - 'SOUND VOLTEX II', - 'SDVX II', - 'SOUND VOLTEX 2', - 'SDVX 2' + 'SOUND VOLTEX INFINITE INFECTION', 'SDVX INFINITE INFECTION', + 'SOUND VOLTEX II', 'SDVX II', 'SOUND VOLTEX 2', 'SDVX 2' }, - folderBg = gfx.CreateSkinImage('song_select/filter_wheel/special_folder_bgs/Infinite Infection.png', 0) - }, - -- { + folderBg = gfx.CreateSkinImage( + 'song_select/filter_wheel/special_folder_bgs/Infinite Infection.png', + 0) + }, -- { -- keys = { -- 'SOUND VOLTEX GRAVITY WARS', -- 'SDVX GRAVITY WARS', @@ -50,37 +44,26 @@ local specialFolders = { -- }, { keys = { - 'SOUND VOLTEX HEAVENLY HAVEN', - 'SDVX HEAVENLY HAVEN', - 'SOUND VOLTEX IV', - 'SDVX IV', - 'SOUND VOLTEX 4', - 'SDVX 4' + 'SOUND VOLTEX HEAVENLY HAVEN', 'SDVX HEAVENLY HAVEN', + 'SOUND VOLTEX IV', 'SDVX IV', 'SOUND VOLTEX 4', 'SDVX 4' }, - folderBg = gfx.CreateSkinImage('song_select/filter_wheel/special_folder_bgs/Heavenly Haven.png', 0) - }, - { + folderBg = gfx.CreateSkinImage( + 'song_select/filter_wheel/special_folder_bgs/Heavenly Haven.png', 0) + }, { keys = { - 'SOUND VOLTEX VIVID WAVE', - 'SDVX VIVID WAVE', - 'SOUND VOLTEX V', - 'SDVX V', - 'SOUND VOLTEX 5', - 'SDVX 5' + 'SOUND VOLTEX VIVID WAVE', 'SDVX VIVID WAVE', 'SOUND VOLTEX V', + 'SDVX V', 'SOUND VOLTEX 5', 'SDVX 5' }, - folderBg = gfx.CreateSkinImage('song_select/filter_wheel/special_folder_bgs/Vivid Wave.png', 0) - }, - { + folderBg = gfx.CreateSkinImage( + 'song_select/filter_wheel/special_folder_bgs/Vivid Wave.png', 0) + }, { keys = { - 'SOUND VOLTEX EXCEED GEAR', - 'SDVX EXCEED GEAR', - 'SOUND VOLTEX VI', - 'SDVX VI', - 'SOUND VOLTEX 6', - 'SDVX 6' + 'SOUND VOLTEX EXCEED GEAR', 'SDVX EXCEED GEAR', 'SOUND VOLTEX VI', + 'SDVX VI', 'SOUND VOLTEX 6', 'SDVX 6' }, - folderBg = gfx.CreateSkinImage('song_select/filter_wheel/special_folder_bgs/Exceed Gear.png', 0) - }, + folderBg = gfx.CreateSkinImage( + 'song_select/filter_wheel/special_folder_bgs/Exceed Gear.png', 0) + } } -- AUDIO @@ -98,6 +81,7 @@ local transitionScrollScale = 0; local transitionScrollOffsetY = 0; local scrollingUp = false; +local transitionEnterReverse = false; local transitionEnterScale = 0; local transitionEnterOffsetY = 0; @@ -143,8 +127,8 @@ function getFolderData(folderLabel) local folderBgImage = defaultFolderBgImage; local isSpecial = false; - for i,specialFolder in ipairs(specialFolders) do - for i,specialFolderKey in ipairs(specialFolder.keys) do + for i, specialFolder in ipairs(specialFolders) do + for i, specialFolderKey in ipairs(specialFolder.keys) do if (specialFolderKey == labelMatcherString) then folderBgImage = specialFolder.folderBg; isSpecial = true; @@ -156,7 +140,7 @@ function getFolderData(folderLabel) type = folderType, label = folderLabel, bgImage = folderBgImage, - isSpecial = isSpecial, + isSpecial = isSpecial } end @@ -169,15 +153,15 @@ function drawFolder(label, y) -- Draw the bg gfx.BeginPath() - gfx.ImageRect(x, y, 630*0.86, 200*0.86, folderData.bgImage, 1, 0) + gfx.ImageRect(x, y, 630 * 0.86, 200 * 0.86, folderData.bgImage, 1, 0) -- Draw the folder label, but only if the folder is not special - if (not folderData.isSpecial) then + if (not folderData.isSpecial) then gfx.BeginPath(); gfx.FontSize(38) gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_MIDDLE) gfx.FillColor(255, 255, 255, 255); - gfx.Text(folderData.label, x+18, y+72); + gfx.Text(folderData.label, x + 18, y + 72); end end @@ -194,36 +178,35 @@ function drawFolderList() folderList = filters.level; end - yOffset = transitionEnterOffsetY + transitionScrollOffsetY + yOffset = transitionEnterOffsetY + transitionScrollOffsetY; local i = 1; while (i <= numOfItemsAround) do local index = getCorrectedIndex(selectedIndex, -i) - drawFolder(folderList[index], desh / 2 - ITEM_HEIGHT / 2 - - ITEM_HEIGHT * i + yOffset) + drawFolder(folderList[index], + desh / 2 - ITEM_HEIGHT / 2 - ITEM_HEIGHT * i + yOffset) i = i + 1; end -- Draw the selected song - drawFolder(folderList[selectedIndex], - desh / 2 - ITEM_HEIGHT / 2 + yOffset) + drawFolder(folderList[selectedIndex], desh / 2 - ITEM_HEIGHT / 2 + yOffset) i = 1; while (i <= numOfItemsAround) do local index = getCorrectedIndex(selectedIndex, i) - drawFolder(folderList[index], desh / 2 - ITEM_HEIGHT / 2 + - ITEM_HEIGHT * i + yOffset) + drawFolder(folderList[index], + desh / 2 - ITEM_HEIGHT / 2 + ITEM_HEIGHT * i + yOffset) i = i + 1; end end function drawCursor() gfx.BeginPath() - + local cursorImageIndex = game.GetSkinSetting('_gaugeType') local cursorImage = cursorImages[cursorImageIndex or 1]; - gfx.ImageRect(desw/2-14, desh/2-213/2, 555, 213, cursorImage, 1, 0) + gfx.ImageRect(desw / 2 - 14, desh / 2 - 213 / 2, 555, 213, cursorImage, 1, 0) end function tickTransitions(deltaTime) @@ -232,27 +215,40 @@ function tickTransitions(deltaTime) else transitionScrollScale = 1 end - - if scrollingUp then - transitionScrollOffsetY = Easing.inQuad(1-transitionScrollScale) * ITEM_HEIGHT; + + if scrollingUp then + transitionScrollOffsetY = Easing.inQuad(1 - transitionScrollScale) * + ITEM_HEIGHT; else - transitionScrollOffsetY = Easing.inQuad(1-transitionScrollScale) * -ITEM_HEIGHT; + transitionScrollOffsetY = Easing.inQuad(1 - transitionScrollScale) * + -ITEM_HEIGHT; end -- ENTRY TRANSITION - if transitionEnterScale < 1 then - transitionEnterScale = transitionEnterScale + deltaTime / 15 -- transition should last for that time in seconds + if transitionEnterReverse then + if transitionEnterScale > 0 then + transitionEnterScale = transitionEnterScale - deltaTime / 15 -- transition should last for that time in seconds + else + transitionEnterScale = 0 + end else - transitionEnterScale = 1 + if transitionEnterScale < 1 then + transitionEnterScale = transitionEnterScale + deltaTime / 15 -- transition should last for that time in seconds + else + transitionEnterScale = 1 + end end - transitionEnterOffsetY = -Easing.inOutQuad(1-transitionEnterScale) * (desh+ITEM_HEIGHT*2+145); + + transitionEnterOffsetY = -Easing.inOutQuad(1 - transitionEnterScale) * + (desh + ITEM_HEIGHT * 2 + 145 + + (transitionEnterReverse and -4 or 0)); end function drawFilterWheel(deltatime) gfx.ResetTransform() resetLayoutInformation() tickTransitions(deltatime); - gfx.Scale(scale,scale); + gfx.Scale(scale, scale); drawFolderList() @@ -260,18 +256,19 @@ function drawFilterWheel(deltatime) end render = function(deltatime, shown) - if not shown then + if not shown then game.SetSkinSetting('_songWheelOverlayActive', 0); - transitionEnterScale = 0; + transitionEnterReverse = true + + if (transitionEnterScale > 0) then drawFilterWheel(deltatime) end else - game.SetSkinSetting('_songWheelOverlayActive', 1); + transitionEnterReverse = false + game.SetSkinSetting('_songWheelOverlayActive', 1); drawFilterWheel(deltatime) end SongSelectHeader.draw(deltatime); - Footer.draw({ - noEnterTransition = true - }); + Footer.draw({noEnterTransition = true}); -- Debug text gfx.BeginPath(); @@ -279,7 +276,8 @@ render = function(deltatime, shown) gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_TOP) gfx.FillColor(255, 255, 255, 255); gfx.Text('S_M: ' .. selectionMode .. ' // S_F: ' .. selectedFolder .. - ' // S_L: ' .. selectedLevel .. ' // T_S_S: ' .. transitionScrollScale, 8, 1900); + ' // S_L: ' .. selectedLevel .. ' // T_E_S: ' .. + transitionEnterScale, 8, 1900); end set_selection = function(newIndex, isFolder) @@ -297,12 +295,11 @@ set_selection = function(newIndex, isFolder) transitionScrollScale = 0; - scrollingUp = false; - if ((newIndex > oldIndex and not (newIndex == total and oldIndex == 1)) or (newIndex == 1 and oldIndex == total)) then - scrollingUp = true; - end; + scrollingUp = false; + if ((newIndex > oldIndex and not (newIndex == total and oldIndex == 1)) or + (newIndex == 1 and oldIndex == total)) then scrollingUp = true; end - game.PlaySample('song_wheel/cursor_change.wav'); + game.PlaySample('song_wheel/cursor_change.wav'); end set_mode = function(isFolder) diff --git a/scripts/songselect/songwheel.lua b/scripts/songselect/songwheel.lua index 1c8273d..3314163 100644 --- a/scripts/songselect/songwheel.lua +++ b/scripts/songselect/songwheel.lua @@ -1,10 +1,5 @@ require('common') local Easing = require('common.easings'); -local SongSelectHeader = require('components.headers.songSelectHeader'); -local Footer = require('components.footer'); - -local HEADER_HEIGHT = 100; -local BAR_ALPHA = 191; local backgroundImage = gfx.CreateSkinImage("song_select/bg.png", 1) local dataPanelImage = gfx.CreateSkinImage("song_select/data_bg_overlay.png", 1) @@ -19,8 +14,8 @@ local songPlateBottomBarOverlayImage = gfx.CreateSkinImage("song_select/plate/bo local cursorImages = { gfx.CreateSkinImage("song_select/cursor.png", 1), -- Effective rate or fallback gfx.CreateSkinImage("song_select/cursor_exc.png", 1), -- Excessive rate - gfx.CreateSkinImage("song_select/cursor_exc.png", 1), -- TODO: premissive rate - gfx.CreateSkinImage("song_select/cursor_exc.png", 1), -- TODO: blastive rate + gfx.CreateSkinImage("song_select/cursor_perm.png", 1), -- Premissive rate + gfx.CreateSkinImage("song_select/cursor_blast.png", 1), -- Blastive rate } local diffCursorImage = gfx.CreateSkinImage("song_select/level_cursor.png", 1) @@ -123,7 +118,7 @@ local transitionAfterscrollTextSongArtist = 0; local transitionAfterscrollDifficultiesAlpha = 0; local transitionAfterscrollJacketBgAlpha = 0; -local transitionLeaveActive = false; +local transitionLeaveReverse = false; local transitionLeaveScale = 0; local transitionLeaveOffsetY = 0; @@ -526,17 +521,21 @@ function tickTransitions(deltaTime) end -- Leave transition - if transitionLeaveScale < 1 then - transitionLeaveScale = transitionLeaveScale + deltaTime / 15 -- transition should last for that time in seconds + if (transitionLeaveReverse) then + if transitionLeaveScale > 0 then + transitionLeaveScale = transitionLeaveScale - deltaTime / 15 -- transition should last for that time in seconds + else + transitionLeaveScale = 0 + end else - transitionLeaveScale = 1 + if transitionLeaveScale < 1 then + transitionLeaveScale = transitionLeaveScale + deltaTime / 15 -- transition should last for that time in seconds + else + transitionLeaveScale = 1 + end end - if (transitionLeaveActive) then - transitionLeaveOffsetY = Easing.inOutQuad(transitionLeaveScale) * (desh+songPlateHeight*2+145); - else - transitionLeaveOffsetY = 0; - end + transitionLeaveOffsetY = Easing.inOutQuad(transitionLeaveScale) * (desh+songPlateHeight*2+145); end @@ -558,11 +557,10 @@ render = function (deltaTime) drawSearch(); - if (game.GetSkinSetting('_songWheelOverlayActive') ~= 1) then - transitionLeaveActive = false; - transitionLeaveScale = 0; + if (game.GetSkinSetting('_songWheelOverlayActive') ~= 1) then + transitionLeaveReverse = true; else - transitionLeaveActive = true; + transitionLeaveReverse = false; end gfx.BeginPath(); diff --git a/textures/song_select/cursor_blast.png b/textures/song_select/cursor_blast.png new file mode 100644 index 0000000..cb16c15 Binary files /dev/null and b/textures/song_select/cursor_blast.png differ diff --git a/textures/song_select/cursor_perm.png b/textures/song_select/cursor_perm.png new file mode 100644 index 0000000..cb16c15 Binary files /dev/null and b/textures/song_select/cursor_perm.png differ