+ finish filterwheel leave transition & + placeholders for perm and blast cursors

This commit is contained in:
FajsiEx 2021-08-12 17:18:35 +02:00
parent 32f201784d
commit 900e368a91
4 changed files with 97 additions and 102 deletions

View File

@ -3,13 +3,14 @@ local Easing = require('common.easings');
local SongSelectHeader = require('components.headers.songSelectHeader') local SongSelectHeader = require('components.headers.songSelectHeader')
local Footer = require('components.footer'); 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 = { local cursorImages = {
gfx.CreateSkinImage("song_select/cursor.png", 1), -- Effective rate or fallback 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), -- Excessive rate
gfx.CreateSkinImage("song_select/cursor_exc.png", 1), -- TODO: premissive 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; local ITEM_HEIGHT = 172;
@ -17,27 +18,20 @@ local ITEM_HEIGHT = 172;
local specialFolders = { local specialFolders = {
{ {
keys = { keys = {
'SOUND VOLTEX BOOTH', 'SOUND VOLTEX BOOTH', 'SDVX BOOTH', 'SOUND VOLTEX I', 'SDVX I',
'SDVX BOOTH', 'SOUND VOLTEX 1', 'SDVX 1'
'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 = { keys = {
'SOUND VOLTEX INFINITE INFECTION', 'SOUND VOLTEX INFINITE INFECTION', 'SDVX INFINITE INFECTION',
'SDVX INFINITE INFECTION', 'SOUND VOLTEX II', 'SDVX II', 'SOUND VOLTEX 2', 'SDVX 2'
'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 = { -- keys = {
-- 'SOUND VOLTEX GRAVITY WARS', -- 'SOUND VOLTEX GRAVITY WARS',
-- 'SDVX GRAVITY WARS', -- 'SDVX GRAVITY WARS',
@ -50,37 +44,26 @@ local specialFolders = {
-- }, -- },
{ {
keys = { keys = {
'SOUND VOLTEX HEAVENLY HAVEN', 'SOUND VOLTEX HEAVENLY HAVEN', 'SDVX HEAVENLY HAVEN',
'SDVX HEAVENLY HAVEN', 'SOUND VOLTEX IV', 'SDVX IV', 'SOUND VOLTEX 4', 'SDVX 4'
'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 = { keys = {
'SOUND VOLTEX VIVID WAVE', 'SOUND VOLTEX VIVID WAVE', 'SDVX VIVID WAVE', 'SOUND VOLTEX V',
'SDVX VIVID WAVE', 'SDVX V', 'SOUND VOLTEX 5', 'SDVX 5'
'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 = { keys = {
'SOUND VOLTEX EXCEED GEAR', 'SOUND VOLTEX EXCEED GEAR', 'SDVX EXCEED GEAR', 'SOUND VOLTEX VI',
'SDVX EXCEED GEAR', 'SDVX VI', 'SOUND VOLTEX 6', 'SDVX 6'
'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 -- AUDIO
@ -98,6 +81,7 @@ local transitionScrollScale = 0;
local transitionScrollOffsetY = 0; local transitionScrollOffsetY = 0;
local scrollingUp = false; local scrollingUp = false;
local transitionEnterReverse = false;
local transitionEnterScale = 0; local transitionEnterScale = 0;
local transitionEnterOffsetY = 0; local transitionEnterOffsetY = 0;
@ -143,8 +127,8 @@ function getFolderData(folderLabel)
local folderBgImage = defaultFolderBgImage; local folderBgImage = defaultFolderBgImage;
local isSpecial = false; local isSpecial = false;
for i,specialFolder in ipairs(specialFolders) do for i, specialFolder in ipairs(specialFolders) do
for i,specialFolderKey in ipairs(specialFolder.keys) do for i, specialFolderKey in ipairs(specialFolder.keys) do
if (specialFolderKey == labelMatcherString) then if (specialFolderKey == labelMatcherString) then
folderBgImage = specialFolder.folderBg; folderBgImage = specialFolder.folderBg;
isSpecial = true; isSpecial = true;
@ -156,7 +140,7 @@ function getFolderData(folderLabel)
type = folderType, type = folderType,
label = folderLabel, label = folderLabel,
bgImage = folderBgImage, bgImage = folderBgImage,
isSpecial = isSpecial, isSpecial = isSpecial
} }
end end
@ -169,15 +153,15 @@ function drawFolder(label, y)
-- Draw the bg -- Draw the bg
gfx.BeginPath() 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 -- 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.BeginPath();
gfx.FontSize(38) gfx.FontSize(38)
gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_MIDDLE) gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_MIDDLE)
gfx.FillColor(255, 255, 255, 255); gfx.FillColor(255, 255, 255, 255);
gfx.Text(folderData.label, x+18, y+72); gfx.Text(folderData.label, x + 18, y + 72);
end end
end end
@ -194,36 +178,35 @@ function drawFolderList()
folderList = filters.level; folderList = filters.level;
end end
yOffset = transitionEnterOffsetY + transitionScrollOffsetY yOffset = transitionEnterOffsetY + transitionScrollOffsetY;
local i = 1; local i = 1;
while (i <= numOfItemsAround) do while (i <= numOfItemsAround) do
local index = getCorrectedIndex(selectedIndex, -i) local index = getCorrectedIndex(selectedIndex, -i)
drawFolder(folderList[index], desh / 2 - ITEM_HEIGHT / 2 - drawFolder(folderList[index],
ITEM_HEIGHT * i + yOffset) desh / 2 - ITEM_HEIGHT / 2 - ITEM_HEIGHT * i + yOffset)
i = i + 1; i = i + 1;
end end
-- Draw the selected song -- Draw the selected song
drawFolder(folderList[selectedIndex], drawFolder(folderList[selectedIndex], desh / 2 - ITEM_HEIGHT / 2 + yOffset)
desh / 2 - ITEM_HEIGHT / 2 + yOffset)
i = 1; i = 1;
while (i <= numOfItemsAround) do while (i <= numOfItemsAround) do
local index = getCorrectedIndex(selectedIndex, i) local index = getCorrectedIndex(selectedIndex, i)
drawFolder(folderList[index], desh / 2 - ITEM_HEIGHT / 2 + drawFolder(folderList[index],
ITEM_HEIGHT * i + yOffset) desh / 2 - ITEM_HEIGHT / 2 + ITEM_HEIGHT * i + yOffset)
i = i + 1; i = i + 1;
end end
end end
function drawCursor() function drawCursor()
gfx.BeginPath() gfx.BeginPath()
local cursorImageIndex = game.GetSkinSetting('_gaugeType') local cursorImageIndex = game.GetSkinSetting('_gaugeType')
local cursorImage = cursorImages[cursorImageIndex or 1]; 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 end
function tickTransitions(deltaTime) function tickTransitions(deltaTime)
@ -232,27 +215,40 @@ function tickTransitions(deltaTime)
else else
transitionScrollScale = 1 transitionScrollScale = 1
end end
if scrollingUp then if scrollingUp then
transitionScrollOffsetY = Easing.inQuad(1-transitionScrollScale) * ITEM_HEIGHT; transitionScrollOffsetY = Easing.inQuad(1 - transitionScrollScale) *
ITEM_HEIGHT;
else else
transitionScrollOffsetY = Easing.inQuad(1-transitionScrollScale) * -ITEM_HEIGHT; transitionScrollOffsetY = Easing.inQuad(1 - transitionScrollScale) *
-ITEM_HEIGHT;
end end
-- ENTRY TRANSITION -- ENTRY TRANSITION
if transitionEnterScale < 1 then if transitionEnterReverse then
transitionEnterScale = transitionEnterScale + deltaTime / 15 -- transition should last for that time in seconds if transitionEnterScale > 0 then
transitionEnterScale = transitionEnterScale - deltaTime / 15 -- transition should last for that time in seconds
else
transitionEnterScale = 0
end
else else
transitionEnterScale = 1 if transitionEnterScale < 1 then
transitionEnterScale = transitionEnterScale + deltaTime / 15 -- transition should last for that time in seconds
else
transitionEnterScale = 1
end
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 end
function drawFilterWheel(deltatime) function drawFilterWheel(deltatime)
gfx.ResetTransform() gfx.ResetTransform()
resetLayoutInformation() resetLayoutInformation()
tickTransitions(deltatime); tickTransitions(deltatime);
gfx.Scale(scale,scale); gfx.Scale(scale, scale);
drawFolderList() drawFolderList()
@ -260,18 +256,19 @@ function drawFilterWheel(deltatime)
end end
render = function(deltatime, shown) render = function(deltatime, shown)
if not shown then if not shown then
game.SetSkinSetting('_songWheelOverlayActive', 0); game.SetSkinSetting('_songWheelOverlayActive', 0);
transitionEnterScale = 0; transitionEnterReverse = true
if (transitionEnterScale > 0) then drawFilterWheel(deltatime) end
else else
game.SetSkinSetting('_songWheelOverlayActive', 1); transitionEnterReverse = false
game.SetSkinSetting('_songWheelOverlayActive', 1);
drawFilterWheel(deltatime) drawFilterWheel(deltatime)
end end
SongSelectHeader.draw(deltatime); SongSelectHeader.draw(deltatime);
Footer.draw({ Footer.draw({noEnterTransition = true});
noEnterTransition = true
});
-- Debug text -- Debug text
gfx.BeginPath(); gfx.BeginPath();
@ -279,7 +276,8 @@ render = function(deltatime, shown)
gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_TOP) gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_TOP)
gfx.FillColor(255, 255, 255, 255); gfx.FillColor(255, 255, 255, 255);
gfx.Text('S_M: ' .. selectionMode .. ' // S_F: ' .. selectedFolder .. 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 end
set_selection = function(newIndex, isFolder) set_selection = function(newIndex, isFolder)
@ -297,12 +295,11 @@ set_selection = function(newIndex, isFolder)
transitionScrollScale = 0; transitionScrollScale = 0;
scrollingUp = false; scrollingUp = false;
if ((newIndex > oldIndex and not (newIndex == total and oldIndex == 1)) or (newIndex == 1 and oldIndex == total)) then if ((newIndex > oldIndex and not (newIndex == total and oldIndex == 1)) or
scrollingUp = true; (newIndex == 1 and oldIndex == total)) then scrollingUp = true; end
end;
game.PlaySample('song_wheel/cursor_change.wav'); game.PlaySample('song_wheel/cursor_change.wav');
end end
set_mode = function(isFolder) set_mode = function(isFolder)

View File

@ -1,10 +1,5 @@
require('common') require('common')
local Easing = require('common.easings'); 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 backgroundImage = gfx.CreateSkinImage("song_select/bg.png", 1)
local dataPanelImage = gfx.CreateSkinImage("song_select/data_bg_overlay.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 = { local cursorImages = {
gfx.CreateSkinImage("song_select/cursor.png", 1), -- Effective rate or fallback 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), -- Excessive rate
gfx.CreateSkinImage("song_select/cursor_exc.png", 1), -- TODO: premissive rate gfx.CreateSkinImage("song_select/cursor_perm.png", 1), -- Premissive rate
gfx.CreateSkinImage("song_select/cursor_exc.png", 1), -- TODO: blastive rate gfx.CreateSkinImage("song_select/cursor_blast.png", 1), -- Blastive rate
} }
local diffCursorImage = gfx.CreateSkinImage("song_select/level_cursor.png", 1) local diffCursorImage = gfx.CreateSkinImage("song_select/level_cursor.png", 1)
@ -123,7 +118,7 @@ local transitionAfterscrollTextSongArtist = 0;
local transitionAfterscrollDifficultiesAlpha = 0; local transitionAfterscrollDifficultiesAlpha = 0;
local transitionAfterscrollJacketBgAlpha = 0; local transitionAfterscrollJacketBgAlpha = 0;
local transitionLeaveActive = false; local transitionLeaveReverse = false;
local transitionLeaveScale = 0; local transitionLeaveScale = 0;
local transitionLeaveOffsetY = 0; local transitionLeaveOffsetY = 0;
@ -526,17 +521,21 @@ function tickTransitions(deltaTime)
end end
-- Leave transition -- Leave transition
if transitionLeaveScale < 1 then if (transitionLeaveReverse) then
transitionLeaveScale = transitionLeaveScale + deltaTime / 15 -- transition should last for that time in seconds if transitionLeaveScale > 0 then
transitionLeaveScale = transitionLeaveScale - deltaTime / 15 -- transition should last for that time in seconds
else
transitionLeaveScale = 0
end
else else
transitionLeaveScale = 1 if transitionLeaveScale < 1 then
transitionLeaveScale = transitionLeaveScale + deltaTime / 15 -- transition should last for that time in seconds
else
transitionLeaveScale = 1
end
end end
if (transitionLeaveActive) then transitionLeaveOffsetY = Easing.inOutQuad(transitionLeaveScale) * (desh+songPlateHeight*2+145);
transitionLeaveOffsetY = Easing.inOutQuad(transitionLeaveScale) * (desh+songPlateHeight*2+145);
else
transitionLeaveOffsetY = 0;
end
end end
@ -558,11 +557,10 @@ render = function (deltaTime)
drawSearch(); drawSearch();
if (game.GetSkinSetting('_songWheelOverlayActive') ~= 1) then if (game.GetSkinSetting('_songWheelOverlayActive') ~= 1) then
transitionLeaveActive = false; transitionLeaveReverse = true;
transitionLeaveScale = 0;
else else
transitionLeaveActive = true; transitionLeaveReverse = false;
end end
gfx.BeginPath(); gfx.BeginPath();

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB