local Easing = require("common.easings"); local Footer = require("components.footer"); local VolforceWindow = require("components.volforceWindow") local resx, resy = game.GetResolution() local desw = 1080 local desh = 1920 local scale = 1 local bgSfxPlayed = false; local BAR_ALPHA = 191; local HEADER_HEIGHT = 100 local backgroundImage = gfx.CreateSkinImage("challenge_result/bg.png", 0); local playerInfoOverlayBgImage = gfx.CreateSkinImage("challenge_result/player_info_overlay_bg.png", 0); local headerTitleImage = gfx.CreateSkinImage("challenge_result/header/title.png", 0); local username = game.GetSkinSetting("username"); local appealCardImage = gfx.CreateSkinImage("crew/appeal_card.png", 0); local danBadgeImage = gfx.CreateSkinImage("dan/inf.png", 0); local crewImage = gfx.CreateSkinImage("crew/portrait.png", 0); local irHeartbeatRequested = false; local IRserverName = ""; -- AUDIO game.LoadSkinSample("challenge_result.wav") function resetLayoutInformation() resx, resy = game.GetResolution() desw = 1080 desh = 1920 scale = resx / desw end local function handleSfx() if not bgSfxPlayed then game.PlaySample("challenge_result.wav", true) bgSfxPlayed = true end if game.GetButton(game.BUTTON_STA) then game.StopSample("challenge_result.wav") end if game.GetButton(game.BUTTON_BCK) then game.StopSample("challenge_result.wav") end end local function load_number_image(path) local images = {} for i = 0, 9 do images[i + 1] = gfx.CreateSkinImage(string.format("%s/%d.png", path, i), 0) end return images end local function draw_number(x, y, alpha, num, digits, images, is_dim, scale, kern) scale = scale or 1; kern = kern or 1; local tw, th = gfx.ImageSize(images[1]) tw = tw * scale; th = th * scale; x = x + (tw * (digits - 1)) / 2 y = y - th / 2 for i = 1, digits do local mul = 10 ^ (i - 1) local digit = math.floor(num / mul) % 10 local a = alpha if is_dim and num < mul then a = 0.4 end gfx.BeginPath() gfx.ImageRect(x, y, tw, th, images[digit + 1], a, 0) x = x - (tw * kern) end end function drawBackground() gfx.BeginPath() gfx.ImageRect(0, 0, desw, desh, backgroundImage, 1, 0); end function drawHeader() gfx.BeginPath(); gfx.FillColor(0, 0, 0, BAR_ALPHA); gfx.Rect(0, 0, desw, HEADER_HEIGHT); gfx.Fill(); gfx.ClosePath() gfx.ImageRect(desw / 2 - 209, HEADER_HEIGHT / 2 - 52, 419, 105, headerTitleImage, 1, 0) end function drawPlayerInfo() -- Draw crew gfx.BeginPath() gfx.ImageRect(460, 215, 522, 362, crewImage, 1, 0); -- Draw the info bg gfx.BeginPath() gfx.ImageRect(300, 352, 374 * 0.85, 222 * 0.85, playerInfoOverlayBgImage, 1, 0); -- Draw appeal card gfx.BeginPath(); gfx.ImageRect(145, 364, 103 * 1.25, 132 * 1.25, appealCardImage, 1, 0); -- Draw description gfx.FontSize(28) gfx.LoadSkinFont("Digital-Serial-Bold.ttf") gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_MIDDLE) gfx.Text("Hellooooooo", 310, 370); -- Draw username gfx.FontSize(40) gfx.Text(username, 310, 413); -- Draw IR server name gfx.FontSize(28) gfx.Text(IRserverName, 310, 453); -- Draw dan badge gfx.BeginPath(); gfx.ImageRect(311, 490, 107 * 1.25, 29 * 1.25, danBadgeImage, 1, 0); end local scoreNumber = load_number_image("score_num"); function drawScorePanelContent() game.Log("Drawing scores...", game.LOGGER_INFO) -- debug for i, chart in ipairs(result.charts) do if chart.score == nil then game.Log("Score does not exist? Quitting loop...", game.LOGGER_WARNING) break end game.Log("#" .. i .. " chart.score: " .. chart.score, game.LOGGER_INFO) -- debug -- Draw score draw_number(250, 150, 1.0, math.floor(chart.score / 10000), 4, scoreNumber, true, 0.40, 1.12) -- still not sure how ui scaling/layers works in this game, still figuring it out :p end end local IR_HeartbeatResponse = function(res) if res.statusCode == IRData.States.Success then IRserverName = res.body.serverName .. " " .. res.body.irVersion; else game.Log("Can't connect to IR!", game.LOGGER_WARNING) end end local IR_Handle = function() if not irHeartbeatRequested then IR.Heartbeat(IR_HeartbeatResponse) irHeartbeatRequested = true; end end function render(deltaTime) gfx.ResetTransform(); resetLayoutInformation(); gfx.Scale(scale, scale); handleSfx() IR_Handle() drawBackground() drawPlayerInfo() drawScorePanelContent() drawHeader() Footer.draw(deltaTime); end