fixed challenge pass_state not updating when first clearing

bunch of cleanup in chalwheel.lua
This commit is contained in:
Hersi 2021-12-01 23:09:00 +01:00
parent c20a8d0676
commit 3db4d2e5f2
1 changed files with 41 additions and 90 deletions

View File

@ -1,35 +1,16 @@
local Numbers = require("common.numbers")
local DiffRectangle = require("components.diff_rectangle")
-- Horizontal alignment
TEXT_ALIGN_LEFT = 1
TEXT_ALIGN_CENTER = 2
TEXT_ALIGN_RIGHT = 4
-- Vertical alignment
TEXT_ALIGN_TOP = 8
TEXT_ALIGN_MIDDLE = 16
TEXT_ALIGN_BOTTOM = 32
TEXT_ALIGN_BASELINE = 64
local jacket = nil;
local selectedIndex = 1
local selectedDiff = 1
local challengeCache = {}
local doffset = 0
local soffset = 0
local diffColors = { { 0, 0, 255 }, { 0, 255, 0 }, { 255, 0, 0 }, { 255, 0, 255 } }
local timer = 0
local scrollmul = 0
local scrollmulOffset = 0 -- bc we have min/max the game doesn't know we have to account for extra
local effector = 0
local searchText = gfx.CreateLabel("", 5, 0)
local searchIndex = 1
local backgroundImage = gfx.CreateSkinImage("bg_pattern.png", gfx.IMAGE_REPEATX | gfx.IMAGE_REPEATY)
local challengeBGImage = gfx.CreateSkinImage("challenge_select/bg.png", 0)
local challengeCardBGImage = gfx.CreateSkinImage("challenge_select/small_box.png", 0)
local jacketFallback = gfx.CreateSkinImage("song_select/loading.png", 0)
--[[ will be reimplemented sometime later
local soffset = 0
local searchText = gfx.CreateLabel("", 5, 0)
local searchIndex = 1
local showGuide = game.GetSkinSetting("show_guide")
local legendTable = {
{
@ -63,6 +44,8 @@ local legendTable = {
["image"] = gfx.CreateSkinImage("legend/start.png", 0)
}
}
--]]
local grades = {
["D"] = gfx.CreateSkinImage("common/grades/D.png", 0),
["C"] = gfx.CreateSkinImage("common/grades/C.png", 0),
@ -90,33 +73,19 @@ local passStates = {
gfx.CreateSkinImage("challenge_select/pass_states/cleared.png", 0)
}
local scoreNumber = Numbers.load_number_image("score_num")
local scoreNumbers = Numbers.load_number_image("score_num")
local difficultyLabelImages = {
gfx.CreateSkinImage("diff/1 novice.png", 0),
gfx.CreateSkinImage("diff/2 advanced.png", 0),
gfx.CreateSkinImage("diff/3 exhaust.png", 0),
gfx.CreateSkinImage("diff/4 maximum.png", 0),
gfx.CreateSkinImage("diff/5 infinite.png", 0),
gfx.CreateSkinImage("diff/6 gravity.png", 0),
gfx.CreateSkinImage("diff/7 heavenly.png", 0),
gfx.CreateSkinImage("diff/8 vivid.png", 0)
}
local difficultyLabelText = { "NOV", "ADV", "EXH", "MXM", "INF", "GRV", "HVN", "VVD" }
gfx.LoadSkinFont("divlit_custom.ttf")
gfx.LoadSkinFont("dfmarugoth.ttf");
game.LoadSkinSample("menu_click")
game.LoadSkinSample("click-02")
game.LoadSkinSample("woosh")
-- Wheel variables
local wheelSize = 5
get_page_size = function()
return math.floor(wheelSize / 2)
end
local selectedIndex = 1
local challengeCache = {}
local timer = 0
-- Window variables
local resX, resY
@ -191,8 +160,10 @@ local check_or_create_cache = function(challenge)
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]
if (not challengeCache[challenge.id]["pass_state"] or not challengeCache[challenge.id]["pass_state_idx"]
or challengeCache[challenge.id]["pass_state_idx"] ~= passState) then
challengeCache[challenge.id]["pass_state_idx"] = passState
challengeCache[challenge.id]["pass_state"] = passStates[passState]
end
@ -280,7 +251,7 @@ draw_challenge = function(challenge, x, y, w, h, selected)
----------------------------------------------------------
-- draw stats section
----------------------------------------------------------
local textSizeCorrection = h / gfx.ImageSize(scoreNumber[1])
local textSizeCorrection = h / gfx.ImageSize(scoreNumbers[1])
local percentOffsetX = x + 6 / 12 * w
local percentOffsetY = y + 0.87 * h
@ -328,16 +299,16 @@ draw_challenge = function(challenge, x, y, w, h, selected)
gradeSize = 0.175 * h
end
Numbers.draw_number(percentOffsetX, percentOffsetY, 1, percent, 3, scoreNumber, true, percentSize, 1)
Numbers.draw_number(percentOffsetX, percentOffsetY, 1, percent, 3, scoreNumbers, true, percentSize, 1)
-- TODO: Missing percentage character
if selected then
Numbers.draw_number(
scoreUpperOffsetX, scoreUpperOffsetY, 1, scoreUpper, 4, scoreNumber, true, scoreUpperSize, 1
scoreUpperOffsetX, scoreUpperOffsetY, 1, scoreUpper, 4, scoreNumbers, true, scoreUpperSize, 1
)
Numbers.draw_number(scoreOffsetX, scoreOffsetY, 1, score, 4, scoreNumber, true, scoreSize, 1)
Numbers.draw_number(scoreOffsetX, scoreOffsetY, 1, score, 4, scoreNumbers, true, scoreSize, 1)
else
Numbers.draw_number(scoreOffsetX, scoreOffsetY, 1, score, 8, scoreNumber, true, scoreSize, 1)
Numbers.draw_number(scoreOffsetX, scoreOffsetY, 1, score, 8, scoreNumbers, true, scoreSize, 1)
end
-- TODO: Missing completion bar
@ -442,6 +413,7 @@ draw_chalwheel = function(x, y, w, h)
draw_selected(chalwheel.challenges[selectedIndex], xpos, ypos, selectedWidth, selectedHeight)
end
--[[ will be reimplemented sometime later
draw_legend_pane = function(x, y, w, h, obj)
local xpos = x + 5
local ypos = y
@ -472,7 +444,9 @@ draw_legend = function(x, y, w, h)
local xOffset = draw_legend_pane(xpos + (legendWidth * (i - 1)), y + 5, legendWidth, h - 10, legendTable[i])
end
end
--]]
--[[ will be reimplemented sometime later
draw_search = function(x, y, w, h)
soffset = soffset + (searchIndex) - (chalwheel.searchInputActive and 0 or 1)
if searchIndex ~= (chalwheel.searchInputActive and 0 or 1) then
@ -484,7 +458,7 @@ draw_search = function(x, y, w, h)
local bgfade = 1 - (searchIndex + soffset)
-- if not chalwheel.searchInputActive then bgfade = soffset end
gfx.FillColor(0, 0, 0, math.floor(200 * bgfade))
gfx.Rect(0, 0, resx, resy)
gfx.Rect(0, 0, resX, resY)
gfx.Fill()
gfx.ForceRender()
local xpos = x + (searchIndex + soffset) * w
@ -504,6 +478,7 @@ draw_search = function(x, y, w, h)
gfx.DrawLabel(searchText, xpos + 10, y + (h / 2), w - 20)
end
--]]
render = function(deltaTime)
-- detect resolution change
@ -527,20 +502,16 @@ render = function(deltaTime)
-- draw chalwheel
gfx.BeginPath();
draw_chalwheel((resX - fullX) / 2, 0, fullX, fullY)
-- Draw Legend Information
--[[
if showGuide then
draw_legend(0, (fifthY / 3) * 14, fullX, (fifthY / 3) * 1)
end
--[[ will be reimplemented sometime later
draw_legend(0, fullX * 14 / 15, fullX, fullY / 15)
--]]
-- draw text search
--[[ will be reimplemented sometime later
draw_search(fullX * 2 / 5, 5, fullX * 3 / 5, fullY / 25)
--[[
draw_search(fifthX * 2, 5, fifthX * 3, fifthY / 5)
doffset = doffset * 0.9
soffset = soffset * 0.8
if chalwheel.searchStatus then
gfx.BeginPath()
@ -549,45 +520,25 @@ render = function(deltaTime)
gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_TOP)
gfx.Text(chalwheel.searchStatus, 3, 3)
end
gfx.LoadSkinFont("dfmarugoth.ttf");
--]]
gfx.FontFace("dfmarugoth.ttf");
gfx.ResetTransform()
gfx.ForceRender()
--]]
end
end
get_page_size = function()
return math.floor(wheelSize / 2)
end
set_index = function(newIndex, scrollamt)
if newIndex ~= selectedIndex then
game.PlaySample("menu_click")
scrollmulOffset = 0
end
selectedIndex = newIndex
scrollmul = scrollamt + scrollmulOffset
end;
local badgeRates = {
0.5, -- Played
1.0, -- Cleared
1.02, -- Hard clear
1.04, -- UC
1.1 -- PUC
}
local gradeRates = {
{ ["min"] = 9900000, ["rate"] = 1.05 }, -- S
{ ["min"] = 9800000, ["rate"] = 1.02 }, -- AAA+
{ ["min"] = 9700000, ["rate"] = 1 }, -- AAA
{ ["min"] = 9500000, ["rate"] = 0.97 }, -- AA+
{ ["min"] = 9300000, ["rate"] = 0.94 }, -- AA
{ ["min"] = 9000000, ["rate"] = 0.91 }, -- A+
{ ["min"] = 8700000, ["rate"] = 0.88 }, -- A
{ ["min"] = 7500000, ["rate"] = 0.85 }, -- B
{ ["min"] = 6500000, ["rate"] = 0.82 }, -- C
{ ["min"] = 0, ["rate"] = 0.8 } -- D
}
end
challenges_changed = function(withAll)
if not withAll then
return
end
end