chalwheel: fixed calling CreateLabel every frame
This commit is contained in:
parent
29233a719e
commit
02578ce121
|
@ -136,24 +136,51 @@ local resolutionChange = function(x, y)
|
||||||
fullY = y
|
fullY = y
|
||||||
end
|
end
|
||||||
|
|
||||||
check_or_create_cache = function(challenge)
|
local update_cache_labels = function(challenge, titleFontSize)
|
||||||
|
if challengeCache[challenge.id] then
|
||||||
|
local _, fontsize = gfx.LabelSize(challengeCache[challenge.id]["title"])
|
||||||
|
if fontsize ~= titleFontSize then
|
||||||
|
gfx.UpdateLabel(challengeCache[challenge.id]["title"], challengeCache[challenge.id]["title_raw"], titleFontSize)
|
||||||
|
for _, chart in ipairs(challengeCache[challenge.id]["charts"]) do
|
||||||
|
gfx.UpdateLabel(chart["title"], chart["title_raw"], titleFontSize)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local check_or_create_cache = function(challenge)
|
||||||
|
local defaultLabelSize = 16
|
||||||
|
|
||||||
if not challengeCache[challenge.id] then
|
if not challengeCache[challenge.id] then
|
||||||
challengeCache[challenge.id] = {}
|
challengeCache[challenge.id] = {}
|
||||||
end
|
end
|
||||||
|
|
||||||
if not challengeCache[challenge.id]["title"] then
|
if not challengeCache[challenge.id]["title"] then
|
||||||
challengeCache[challenge.id]["title"] = challenge.title
|
challengeCache[challenge.id]["title"] = gfx.CreateLabel(challenge.title, defaultLabelSize, 0)
|
||||||
|
challengeCache[challenge.id]["title_raw"] = challenge.title
|
||||||
end
|
end
|
||||||
|
|
||||||
if not challengeCache[challenge.id]["charts"] then
|
if not challengeCache[challenge.id]["charts"] then
|
||||||
if challenge.missing_chart then
|
if challenge.missing_chart then
|
||||||
local missing_text = "*COULD NOT FIND ALL CHARTS!*"
|
local missing_text = "*COULD NOT FIND ALL CHARTS!*"
|
||||||
challengeCache[challenge.id]["charts"] = { { ["title"] = missing_text, ["level"] = 0, ["difficulty"] = 0 } }
|
challengeCache[challenge.id]["charts"] = {
|
||||||
|
{
|
||||||
|
["title"] = gfx.CreateLabel(missing_text, defaultLabelSize, 0),
|
||||||
|
["title_raw"] = missing_text,
|
||||||
|
["level"] = 0,
|
||||||
|
["difficulty"] = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
local charts = {}
|
local charts = {}
|
||||||
for _, chart in ipairs(challenge.charts) do
|
for _, chart in ipairs(challenge.charts) do
|
||||||
table.insert(charts, { ["title"] = chart.title, ["level"] = chart.level, ["difficulty"] = chart.difficulty })
|
table.insert(charts, {
|
||||||
|
["title"] = gfx.CreateLabel(chart.title, defaultLabelSize, 0),
|
||||||
|
["title_raw"] = chart.title,
|
||||||
|
["level"] = chart.level,
|
||||||
|
["difficulty"] = chart.difficulty
|
||||||
|
})
|
||||||
end
|
end
|
||||||
challengeCache[challenge.id]["charts"] = charts
|
challengeCache[challenge.id]["charts"] = charts
|
||||||
end
|
end
|
||||||
|
@ -220,13 +247,14 @@ draw_challenge = function(challenge, x, y, w, h, selected)
|
||||||
titleBaselineY = y + 0.09 * h -- align baseline
|
titleBaselineY = y + 0.09 * h -- align baseline
|
||||||
end
|
end
|
||||||
|
|
||||||
|
update_cache_labels(challenge, titleFontSize)
|
||||||
|
|
||||||
gfx.BeginPath()
|
gfx.BeginPath()
|
||||||
gfx.ImageRect(stateOffsetX, stateOffsetY, stateWidth, stateHeight, stateLabel, 1, 0)
|
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.FontFace("divlit_custom.ttf")
|
||||||
gfx.TextAlign(gfx.TEXT_ALIGN_CENTER | gfx.TEXT_ALIGN_BASELINE)
|
gfx.TextAlign(gfx.TEXT_ALIGN_CENTER | gfx.TEXT_ALIGN_BASELINE)
|
||||||
gfx.DrawLabel(titleLabel, titleCenterX, titleBaselineY, titleMaxWidth)
|
gfx.DrawLabel(challengeCache[challenge.id]["title"], titleCenterX, titleBaselineY, titleMaxWidth)
|
||||||
end
|
end
|
||||||
|
|
||||||
local _draw_jacket = function()
|
local _draw_jacket = function()
|
||||||
|
@ -303,7 +331,6 @@ draw_challenge = function(challenge, x, y, w, h, selected)
|
||||||
local offsetY = y + 0.246 * h
|
local offsetY = y + 0.246 * h
|
||||||
|
|
||||||
local titleMargin = 6
|
local titleMargin = 6
|
||||||
local titleFontSize = math.floor(0.11 * h) -- must be an integer
|
|
||||||
local titleMaxWidth = 6 / 9 * w
|
local titleMaxWidth = 6 / 9 * w
|
||||||
local titleCenterX = x + w - titleMargin - titleMaxWidth / 2 -- align right
|
local titleCenterX = x + w - titleMargin - titleMaxWidth / 2 -- align right
|
||||||
|
|
||||||
|
@ -326,9 +353,8 @@ draw_challenge = function(challenge, x, y, w, h, selected)
|
||||||
|
|
||||||
draw_diff_icon(chart, offsetX, ypos, diffIconWidth, diffIconHeight, 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.TextAlign(gfx.TEXT_ALIGN_CENTER | gfx.TEXT_ALIGN_MIDDLE)
|
||||||
gfx.DrawLabel(chartTitleLabel, titleCenterX, ypos + diffIconHeight / 2, titleMaxWidth)
|
gfx.DrawLabel(chart.title, titleCenterX, ypos + diffIconHeight / 2, titleMaxWidth)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue