+ 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 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)

View File

@ -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();

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB