Merge branch 'master' of github.com:FajsiEx/exceed

This commit is contained in:
Hersi 2021-11-23 00:13:22 +01:00
commit 2b710798e5
7 changed files with 249 additions and 76 deletions

View File

@ -74,8 +74,7 @@ local draw = function (deltaTime, params)
end end
gfx.Save() gfx.Save()
resetLayoutInformation()
gfx.Scale(scale, scale)
gfx.LoadSkinFont("NotoSans-Regular.ttf"); gfx.LoadSkinFont("NotoSans-Regular.ttf");

View File

@ -17,12 +17,6 @@ local animationHeaderGlowAlpha = 0;
local headerTitleImage = gfx.CreateSkinImage("song_select/header/title.png", 1) local headerTitleImage = gfx.CreateSkinImage("song_select/header/title.png", 1)
local headerGlowTitleImage = gfx.CreateSkinImage("song_select/header/title_glow.png", 1) local headerGlowTitleImage = gfx.CreateSkinImage("song_select/header/title_glow.png", 1)
function resetLayoutInformation()
resx, resy = game.GetResolution()
desw = 1080
desh = 1920
scale = resx / desw
end
local drawHeader = function () local drawHeader = function ()
gfx.BeginPath(); gfx.BeginPath();
@ -53,8 +47,6 @@ end
local draw = function (deltatime) local draw = function (deltatime)
gfx.Save() gfx.Save()
resetLayoutInformation()
gfx.Scale(scale, scale)
gfx.LoadSkinFont("NotoSans-Regular.ttf"); gfx.LoadSkinFont("NotoSans-Regular.ttf");

View File

@ -105,12 +105,53 @@ local render = function (deltaTime, gaugeType, gaugeValue, isArsEnabled)
gfx.BeginPath() gfx.BeginPath()
gfx.FillColor(255, 255, 255) gfx.FillColor(255, 255, 255)
gfx.LoadSkinFont("Digital-Serial-Bold.ttf") gfx.LoadSkinFont("Digital-Serial-Bold.ttf")
gfx.FontSize(22)
gfx.TextAlign(gfx.TEXT_ALIGN_RIGHT + gfx.TEXT_ALIGN_MIDDLE)
gfx.Text(math.floor(gaugeValue * 100), gaugePosX-16, gaugeMarkerY+17)
-- The big number
local gaugePercent = gaugeValue * 100;
local bigNumber = 0;
local smallNumber = 0;
local smallNumberX = gaugePosX-38;
if (gaugePercent < 10) then
bigNumber = math.floor(gaugePercent) .. '.';
local decimalPortion = math.floor(
(
gaugePercent -
math.floor(gaugePercent)
) * 100
);
smallNumber = string.format('%02d', decimalPortion);
smallNumberX = gaugePosX-38;
elseif (gaugePercent < 100) then
bigNumber = math.floor(gaugePercent) .. '.';
local decimalPortion = math.floor(
(
gaugePercent -
math.floor(gaugePercent)
) * 10
);
smallNumber = decimalPortion;
smallNumberX = gaugePosX-26;
else
bigNumber = '100';
smallNumber = 0;
smallNumberX = -100; -- yeet it out of existance
end
gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_MIDDLE)
-- big text
gfx.FontSize(22)
gfx.Text(bigNumber, gaugePosX-56, gaugeMarkerY+16.5)
-- small text
gfx.FontSize(18)
gfx.Text(smallNumber, smallNumberX, gaugeMarkerY+17.5)
-- %
gfx.FontSize(16) gfx.FontSize(16)
gfx.Text('%', gaugePosX-4, gaugeMarkerY+17) gfx.Text('%', gaugePosX-15, gaugeMarkerY+16.5)
end end
return { return {

View File

@ -3,6 +3,8 @@ 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 backgroundImage = gfx.CreateSkinImage("bg_pattern.png", gfx.IMAGE_REPEATX | gfx.IMAGE_REPEATY)
local defaultFolderBgImage = gfx.CreateSkinImage('song_select/filter_wheel/bg.png', 0) local defaultFolderBgImage = gfx.CreateSkinImage('song_select/filter_wheel/bg.png', 0)
local collectionFolderBgImage = gfx.CreateSkinImage('song_select/filter_wheel/col_bg.png', 0) local collectionFolderBgImage = gfx.CreateSkinImage('song_select/filter_wheel/col_bg.png', 0)
local subFolderBgImage = gfx.CreateSkinImage('song_select/filter_wheel/sub_bg.png', 0) local subFolderBgImage = gfx.CreateSkinImage('song_select/filter_wheel/sub_bg.png', 0)
@ -107,6 +109,24 @@ local transitionLeaveScale = 1;
local transitionLeaveReappearTimer = 0; local transitionLeaveReappearTimer = 0;
local TRANSITION_LEAVE_DURATION = 0.1; local TRANSITION_LEAVE_DURATION = 0.1;
-- Window variables
local resX, resY
-- Aspect Ratios
local landscapeWidescreenRatio = 16 / 9
local landscapeStandardRatio = 4 / 3
local portraitWidescreenRatio = 9 / 16
-- Portrait sizes
local fullX, fullY
local resolutionChange = function(x, y)
resX = x
resY = y
fullX = portraitWidescreenRatio * y
fullY = y
end
function resetLayoutInformation() function resetLayoutInformation()
resx, resy = game.GetResolution() resx, resy = game.GetResolution()
scale = resx / desw scale = resx / desw
@ -260,6 +280,8 @@ function drawCursor()
end end
function drawScrollbar() function drawScrollbar()
if not isFilterWheelActive or transitionLeaveScale ~= 0 then return end
gfx.BeginPath() gfx.BeginPath()
local bgW = 13*0.85; local bgW = 13*0.85;
local bgH = 1282*0.85; local bgH = 1282*0.85;
@ -321,34 +343,23 @@ function tickTransitions(deltaTime)
end end
end end
function drawFilterWheel(deltatime) function drawFilterWheelContent(deltatime)
gfx.ResetTransform()
resetLayoutInformation()
tickTransitions(deltatime); tickTransitions(deltatime);
gfx.Scale(scale, scale);
drawFolderList() drawFolderList()
end end
render = function(deltatime, shown) local drawFilterWheel = function (x,y,w,h, deltaTime)
isFilterWheelActive = shown; gfx.Translate(x,y);
drawFilterWheel(deltatime) gfx.Scale(w/1080, h/1920);
if not shown then
game.SetSkinSetting('_songWheelOverlayActive', 0);
else
game.SetSkinSetting('_songWheelOverlayActive', 1);
end
game.SetSkinSetting('_songWheelActiveFolderLabel', getFolderData(filters.folder[selectedFolder]).label);
game.SetSkinSetting('_songWheelActiveSubFolderLabel', getFolderData(filters.level[selectedLevel]).label);
drawFilterWheelContent(deltaTime)
drawCursor() drawCursor()
drawScrollbar() drawScrollbar()
SongSelectHeader.draw(deltatime); if (game.GetSkinSetting('_currentScreen') == 'songwheel') then
Footer.draw(deltatime); SongSelectHeader.draw(deltaTime);
Footer.draw(deltaTime);
end
if (isFilterWheelActive ~= previousActiveState) then if (isFilterWheelActive ~= previousActiveState) then
game.PlaySample('filter_wheel/open_close.wav'); game.PlaySample('filter_wheel/open_close.wav');
@ -365,6 +376,29 @@ render = function(deltatime, shown)
-- transitionLeaveScale .. ' // L_TRT: ' .. transitionLeaveReappearTimer, 8, 1870); -- transitionLeaveScale .. ' // L_TRT: ' .. transitionLeaveReappearTimer, 8, 1870);
end end
render = function(deltaTime, shown)
isFilterWheelActive = shown;
if not shown then
game.SetSkinSetting('_songWheelOverlayActive', 0);
else
game.SetSkinSetting('_songWheelOverlayActive', 1);
end
game.SetSkinSetting('_songWheelActiveFolderLabel', getFolderData(filters.folder[selectedFolder]).label);
game.SetSkinSetting('_songWheelActiveSubFolderLabel', getFolderData(filters.level[selectedLevel]).label);
-- detect resolution change
local resx, resy = game.GetResolution();
if resx ~= resX or resy ~= resY then
resolutionChange(resx, resy)
end
gfx.GlobalAlpha(1)
drawFilterWheel((resX - fullX) / 2, 0, fullX, fullY, deltaTime);
end
set_selection = function(newIndex, isFolder) set_selection = function(newIndex, isFolder)
local oldIndex = 1; local oldIndex = 1;
local total = 1; local total = 1;

View File

@ -5,6 +5,8 @@ local common = require('common.common')
local VolforceCalc = require('components.volforceCalc'); local VolforceCalc = require('components.volforceCalc');
local backgroundImage = gfx.CreateSkinImage("bg_pattern.png", gfx.IMAGE_REPEATX | gfx.IMAGE_REPEATY)
local dataPanelImage = gfx.CreateSkinImage("song_select/data_bg_overlay.png", 1) local dataPanelImage = gfx.CreateSkinImage("song_select/data_bg_overlay.png", 1)
local dataGlowOverlayImage = gfx.CreateSkinImage("song_select/data_panel/data_glow_overlay.png", 1) local dataGlowOverlayImage = gfx.CreateSkinImage("song_select/data_panel/data_glow_overlay.png", 1)
local gradeBgImage = gfx.CreateSkinImage("song_select/data_panel/grade_bg.png", 1) local gradeBgImage = gfx.CreateSkinImage("song_select/data_panel/grade_bg.png", 1)
@ -143,11 +145,26 @@ local transitionLeaveScale = 0;
local transitionLeaveReappearTimer = 0; local transitionLeaveReappearTimer = 0;
local TRANSITION_LEAVE_DURATION = 0.1; local TRANSITION_LEAVE_DURATION = 0.1;
function resetLayoutInformation() -- Window variables
resx, resy = game.GetResolution() local resX, resY
desw = 1080
desh = 1920 -- Aspect Ratios
scale = resx / desw local landscapeWidescreenRatio = 16 / 9
local landscapeStandardRatio = 4 / 3
local portraitWidescreenRatio = 9 / 16
-- Portrait sizes
local fullX, fullY
local desw = 1080
local desh = 1920
local resolutionChange = function(x, y)
resX = x
resY = y
fullX = portraitWidescreenRatio * y
fullY = y
game.Log('resX:' .. resX .. ' // resY:' .. resY .. ' // fullX:' .. fullX .. ' // fullY:' .. fullY, game.LOGGER_ERROR);
end end
function load_number_image(path) function load_number_image(path)
@ -230,13 +247,14 @@ function getGradeImageForScore(score)
end end
function drawLaserAnim() function drawLaserAnim()
gfx.Save();
gfx.BeginPath() gfx.BeginPath()
gfx.Scissor(0, transitionLaserY, desw, 100); gfx.Scissor(0, transitionLaserY, desw, 100);
gfx.ImageRect(0, 0, desw, desh, laserAnimBaseImage, 1, 0) gfx.ImageRect(0, 0, desw, desh, laserAnimBaseImage, 1, 0)
gfx.ResetScissor(); gfx.Restore();
end end
function drawBackground(deltaTime) function drawBackground(deltaTime)
@ -744,17 +762,12 @@ function tickTransitions(deltaTime)
end end
end end
draw_songwheel = function(x,y,w,h, deltaTime)
render = function (deltaTime) gfx.Translate(x,y);
resetLayoutInformation(); gfx.Scale(w/1080, h/1920);
tickTransitions(deltaTime); gfx.Scissor(0,0,1080,1920);
gfx.Scale(scale, scale);
common.stopMusic();
if not difficultyNumbers then
difficultyNumbers = load_number_image('diff_num')
end
drawBackground(deltaTime); drawBackground(deltaTime);
@ -775,6 +788,34 @@ render = function (deltaTime)
local debugScrollingUp= "FALSE" local debugScrollingUp= "FALSE"
if scrollingUp then debugScrollingUp = "TRUE" end; if scrollingUp then debugScrollingUp = "TRUE" end;
-- gfx.Text('S_I: ' .. selectedIndex .. ' // S_D: ' .. selectedDifficulty .. ' // S_UP: ' .. debugScrollingUp .. ' // AC_TS: ' .. transitionAfterscrollScale .. ' // L_TS: ' .. transitionLeaveScale, 8, 8); -- gfx.Text('S_I: ' .. selectedIndex .. ' // S_D: ' .. selectedDifficulty .. ' // S_UP: ' .. debugScrollingUp .. ' // AC_TS: ' .. transitionAfterscrollScale .. ' // L_TS: ' .. transitionLeaveScale, 8, 8);
gfx.ResetTransform();
end
render = function (deltaTime)
tickTransitions(deltaTime);
game.SetSkinSetting('_currentScreen', 'songwheel')
common.stopMusic();
if not difficultyNumbers then
difficultyNumbers = load_number_image('diff_num')
end
-- detect resolution change
local resx, resy = game.GetResolution();
if resx ~= resX or resy ~= resY then
resolutionChange(resx, resy)
end
gfx.BeginPath()
bgImageWidth, bgImageHeight = gfx.ImageSize(backgroundImage)
gfx.Rect(0, 0, resX, resY)
gfx.FillPaint(gfx.ImagePattern(0, 0, bgImageWidth, bgImageHeight, 0, backgroundImage, 0.2))
gfx.Fill()
draw_songwheel((resX - fullX) / 2, 0, fullX, fullY, deltaTime);
end end
songs_changed = function (withAll) songs_changed = function (withAll)

View File

@ -1,6 +1,9 @@
require('common') require('common')
local Easing = require('common.easings'); local Easing = require('common.easings');
local resx, resy = game.GetResolution()
local desw, desh = 1080, 1920
-- AUDIO -- AUDIO
game.LoadSkinSample('sort_wheel/enter.wav'); game.LoadSkinSample('sort_wheel/enter.wav');
game.LoadSkinSample('sort_wheel/leave.wav'); game.LoadSkinSample('sort_wheel/leave.wav');
@ -12,10 +15,6 @@ local activeItemBgImage = gfx.CreateSkinImage(
local titleTextImage = local titleTextImage =
gfx.CreateSkinImage('song_select/sort_wheel/title.png', 0) gfx.CreateSkinImage('song_select/sort_wheel/title.png', 0)
local resx, resy = game.GetResolution()
local desw, desh = 1080, 1920;
local scale = 1;
local selection = 1; local selection = 1;
local renderedButtonLabels = {} local renderedButtonLabels = {}
@ -48,9 +47,24 @@ local transitionEnterOffsetX = 0;
local previousActiveState = false; local previousActiveState = false;
function resetLayoutInformation() -- Window variables
resx, resy = game.GetResolution() local resX, resY
scale = resx / desw
-- Aspect Ratios
local landscapeWidescreenRatio = 16 / 9
local landscapeStandardRatio = 4 / 3
local portraitWidescreenRatio = 9 / 16 --+ 0.0035
-- Portrait sizes
local fullX, fullY
local resolutionChange = function(x, y)
resX = x
resY = y
fullX = portraitWidescreenRatio * y
fullY = y
game.Log('resX:' .. resX .. ' // resY:' .. resY .. ' // fullX:' .. fullX .. ' // fullY:' .. fullY, game.LOGGER_ERROR);
end end
function tableContains(table, value) function tableContains(table, value)
@ -136,11 +150,16 @@ function tickTransitions(deltaTime)
transitionEnterOffsetX = Easing.inOutQuad(1 - transitionEnterScale) * 416 transitionEnterOffsetX = Easing.inOutQuad(1 - transitionEnterScale) * 416
end end
function drawSortWheel(deltaTime) local drawSortWheel = function (x,y,w,h, deltaTime)
gfx.Scissor(x,y,w,h);
gfx.Translate(x,y);
gfx.Scale(w/1080, h/1920);
gfx.Scissor(0,0,1080,1920);
-- Draw the dark overlay above song wheel -- Draw the dark overlay above song wheel
gfx.BeginPath(); gfx.BeginPath();
gfx.FillColor(0, 0, 0, math.floor(transitionEnterScale * 192)); gfx.FillColor(0, 0, 0, math.floor(transitionEnterScale * 192));
gfx.Rect(0, 0, desw, desh); gfx.Rect(0, 0, 1080, 1920);
gfx.Fill(); gfx.Fill();
-- Draw the panel background -- Draw the panel background
@ -188,8 +207,7 @@ function render(deltaTime, shown)
gfx.Save() gfx.Save()
gfx.ResetTransform() gfx.ResetTransform()
renderedButtonLabels = {}; renderedButtonLabels = {};
resetLayoutInformation()
gfx.Scale(scale, scale)
if (shown ~= previousActiveState) then if (shown ~= previousActiveState) then
if (shown) then if (shown) then
@ -201,12 +219,20 @@ function render(deltaTime, shown)
previousActiveState = shown; previousActiveState = shown;
end end
-- detect resolution change
local resx, resy = game.GetResolution();
if resx ~= resX or resy ~= resY then
resolutionChange(resx, resy)
end
gfx.GlobalAlpha(1)
if not shown then if not shown then
transitionEnterReverse = true transitionEnterReverse = true
if (transitionEnterScale > 0) then drawSortWheel(deltaTime) end if (transitionEnterScale > 0) then drawSortWheel((resX - fullX) / 2, 0, fullX, fullY, deltaTime) end
else else
transitionEnterReverse = false transitionEnterReverse = false
drawSortWheel(deltaTime) drawSortWheel((resX - fullX) / 2, 0, fullX, fullY, deltaTime)
end end
tickTransitions(deltaTime) tickTransitions(deltaTime)
setSkinSetting(); setSkinSetting();

View File

@ -19,7 +19,7 @@ local desw = 1080
local desh = 1920 local desh = 1920
local scale; local scale;
local bgImage = gfx.CreateSkinImage('titlescreen/bg.png', 0); local backgroundImage = gfx.CreateSkinImage("bg_pattern.png", gfx.IMAGE_REPEATX | gfx.IMAGE_REPEATY)
local headerTitleImage = gfx.CreateSkinImage('titlescreen/title.png', 0); local headerTitleImage = gfx.CreateSkinImage('titlescreen/title.png', 0);
local selectorBgImage = gfx.CreateSkinImage('titlescreen/selector_bg.png', 0); local selectorBgImage = gfx.CreateSkinImage('titlescreen/selector_bg.png', 0);
local selectorArrowsImage = gfx.CreateSkinImage( local selectorArrowsImage = gfx.CreateSkinImage(
@ -66,6 +66,24 @@ local oldCursorIndex = 3;
local scrollingUp = false; local scrollingUp = false;
local playedBgm = false; local playedBgm = false;
-- Window variables
local resX, resY
-- Aspect Ratios
local landscapeWidescreenRatio = 16 / 9
local landscapeStandardRatio = 4 / 3
local portraitWidescreenRatio = 9 / 16
-- Portrait sizes
local fullX, fullY
local resolutionChange = function(x, y)
resX = x
resY = y
fullX = portraitWidescreenRatio * y
fullY = y
end
function resetLayoutInformation() function resetLayoutInformation()
resx, resy = game.GetResolution() resx, resy = game.GetResolution()
desw = 1080 desw = 1080
@ -327,14 +345,11 @@ function handle_controller()
end end
end end
render = function(deltaTime) draw_titlescreen = function (x, y, w, h, deltaTime)
if not playedBgm then gfx.Scissor(x,y,w,h);
game.PlaySample('titlescreen/bgm.wav', true); gfx.Translate(x,y);
playedBgm = true; gfx.Scale(w/1080, h/1920);
end
resetLayoutInformation();
gfx.Scale(scale, scale);
gfx.LoadSkinFont("segoeui.ttf") gfx.LoadSkinFont("segoeui.ttf")
-- Draw background -- Draw background
@ -376,6 +391,31 @@ render = function(deltaTime)
drawHeader(); drawHeader();
Footer.draw(deltaTime); Footer.draw(deltaTime);
gfx.ResetTransform();
end
render = function(deltaTime)
if not playedBgm then
game.PlaySample('titlescreen/bgm.wav', true);
playedBgm = true;
end
game.SetSkinSetting('_currentScreen', 'title')
-- detect resolution change
local resx, resy = game.GetResolution();
if resx ~= resX or resy ~= resY then
resolutionChange(resx, resy)
end
gfx.BeginPath()
bgImageWidth, bgImageHeight = gfx.ImageSize(backgroundImage)
gfx.Rect(0, 0, resX, resY)
gfx.FillPaint(gfx.ImagePattern(0, 0, bgImageWidth, bgImageHeight, 0, backgroundImage, 0.2))
gfx.Fill()
draw_titlescreen((resX - fullX) / 2, 0, fullX, fullY, deltaTime);
handle_controller() handle_controller()
scrollTransitionScale = scrollTransitionScale + 1 / 60 * 5; scrollTransitionScale = scrollTransitionScale + 1 / 60 * 5;