diff --git a/scripts/songselect/chalwheel.lua b/scripts/songselect/chalwheel.lua index b56a24c..2e3a04f 100644 --- a/scripts/songselect/chalwheel.lua +++ b/scripts/songselect/chalwheel.lua @@ -1,4 +1,4 @@ -local Numbers = require('common.numbers') +local Numbers = require("common.numbers") local DiffRectangle = require("components.diff_rectangle") -- Horizontal alignment @@ -86,7 +86,7 @@ local badges = { local passStates = { gfx.CreateSkinImage("challenge_select/pass_states/not_played.png", 0), gfx.CreateSkinImage("challenge_select/pass_states/failed.png", 0), - gfx.CreateSkinImage("challenge_select/pass_states/cleared.png", 0), + gfx.CreateSkinImage("challenge_select/pass_states/cleared.png", 0) } local scoreNumber = Numbers.load_number_image("score_num") @@ -154,49 +154,35 @@ adjustScreen = function(x, y) end check_or_create_cache = function(challenge) - local namesLabelSize = 20 - local percentLabelSize = 35 - if not challengeCache[challenge.id] then challengeCache[challenge.id] = {} end if not challengeCache[challenge.id]["title"] then - challengeCache[challenge.id]["title"] = gfx.CreateLabel(challenge.title, namesLabelSize, 0) + challengeCache[challenge.id]["title"] = challenge.title end if not challengeCache[challenge.id]["charts"] then if challenge.missing_chart then local missing_text = "*COULD NOT FIND ALL CHARTS!*" - challengeCache[challenge.id]["charts"] = { - { - ["title"] = gfx.CreateLabel(missing_text, namesLabelSize, 0), - ["level"] = 0, - ["difficulty"] = 0 - }, - } + challengeCache[challenge.id]["charts"] = { { ["title"] = missing_text, ["level"] = 0, ["difficulty"] = 0 } } end local charts = {} for _, chart in ipairs(challenge.charts) do - table.insert(charts, { - ["title"] = gfx.CreateLabel(chart.title, namesLabelSize, 0), - ["level"] = chart.level, - ["difficulty"] = chart.difficulty - }) + table.insert(charts, { ["title"] = chart.title, ["level"] = chart.level, ["difficulty"] = chart.difficulty }) end challengeCache[challenge.id]["charts"] = charts end - if (not challengeCache[challenge.id]["percent"] - or not challengeCache[challenge.id]["total_score"] + if (not challengeCache[challenge.id]["percent"] or not challengeCache[challenge.id]["total_score"] or challengeCache[challenge.id]["total_score"] ~= challenge.bestScore) then challengeCache[challenge.id]["percent"] = math.max(0, (challenge.bestScore - 8000000) // 10000) challengeCache[challenge.id]["total_score"] = challenge.bestScore end if not challengeCache[challenge.id]["pass_state"] then - local passState = math.min(challenge.topBadge, 2) + 1 --challenge.topBadge -> [1, 3] + local passState = math.min(challenge.topBadge, 2) + 1 -- challenge.topBadge -> [1, 3] challengeCache[challenge.id]["pass_state"] = passStates[passState] end @@ -232,29 +218,32 @@ draw_challenge = function(challenge, x, y, w, h, selected) local stateWidth = w / 5 local stateHeight = stateWidth / stateLabelAspect local stateOffsetX = x + w / 32 - local stateOffsetY = y + h / 16 + local stateOffsetY = y + h / 32 local titleMargin = 6 - local titleMaxWidth = 3 / 5 * w + local titleFontSize = math.floor(0.11 * h) -- must be an integer + local titleMaxWidth = 6 / 9 * w local titleCenterX = x + w - titleMargin - titleMaxWidth / 2 -- align right - local titleOffsetY = y + 1 / 11 * h -- align baseline + local titleBaselineY = y + 0.025 * h -- align baseline - if not selected then - stateWidth = stateWidth * 0.9 - stateHeight = stateHeight * 0.9 - stateOffsetY = y + h / 32 + if selected then + stateWidth = stateWidth / 0.9 + stateHeight = stateHeight / 0.9 + stateOffsetY = y + h / 16 - titleMaxWidth = 6 / 9 * w + titleFontSize = math.floor(0.075 * h) -- must be an integer + titleMaxWidth = 3 / 5 * w titleCenterX = x + w - titleMargin - titleMaxWidth / 2 -- align right - titleOffsetY = y + titleMargin / 2 -- align baseline + titleBaselineY = y + 0.09 * h -- align baseline end gfx.BeginPath() gfx.ImageRect(stateOffsetX, stateOffsetY, stateWidth, stateHeight, stateLabel, 1, 0) + local titleLabel = gfx.CreateLabel(challengeCache[challenge.id]["title"], titleFontSize, 0) gfx.FontFace("divlit_custom.ttf") gfx.TextAlign(gfx.TEXT_ALIGN_CENTER | gfx.TEXT_ALIGN_BASELINE) - gfx.DrawLabel(challengeCache[challenge.id]["title"], titleCenterX, titleOffsetY, titleMaxWidth) + gfx.DrawLabel(titleLabel, titleCenterX, titleBaselineY, titleMaxWidth) end local _draw_jacket = function() @@ -314,6 +303,11 @@ draw_challenge = function(challenge, x, y, w, h, selected) else Numbers.draw_number(scoreOffsetX, scoreOffsetY, 1, score, 8, scoreNumber, true, scoreSize, 1) end + + -- TODO: Missing completion bar + + -- TODO: Missing completion badge (COMP, HARD, UC, PUC) + -- TODO: Missing completion grade (S+, S, AAA+, etc.) end local _draw_charts = function() @@ -326,6 +320,7 @@ draw_challenge = function(challenge, x, y, w, h, selected) local offsetY = y + 0.246 * h local titleMargin = 6 + local titleFontSize = math.floor(0.11 * h) -- must be an integer local titleMaxWidth = 6 / 9 * w local titleCenterX = x + w - titleMargin - titleMaxWidth / 2 -- align right @@ -338,6 +333,7 @@ draw_challenge = function(challenge, x, y, w, h, selected) offsetX = x + 0.268 * w offsetY = y + 0.256 * h + titleFontSize = math.floor(0.075 * h) -- must be an integer titleMaxWidth = 3 / 5 * w titleCenterX = x + w - titleMargin - titleMaxWidth / 2 -- align right end @@ -347,8 +343,9 @@ draw_challenge = function(challenge, x, y, w, h, selected) draw_diff_icon(chart, offsetX, ypos, diffIconWidth, diffIconHeight, selected) + local chartTitleLabel = gfx.CreateLabel(chart.title, titleFontSize, 0) gfx.TextAlign(gfx.TEXT_ALIGN_CENTER | gfx.TEXT_ALIGN_MIDDLE) - gfx.DrawLabel(chart.title, titleCenterX, ypos + diffIconHeight / 2, titleMaxWidth) + gfx.DrawLabel(chartTitleLabel, titleCenterX, ypos + diffIconHeight / 2, titleMaxWidth) end end