From 8a2529d6db2f98a94045a7233a5d868528e3c804 Mon Sep 17 00:00:00 2001 From: FajsiEx Date: Tue, 27 Jul 2021 23:16:52 +0200 Subject: [PATCH] + hit stats to results screen (without longs and vols and the chart) --- scripts/result.lua | 130 +++++++++++++++++++++++++----- textures/result/panels/jacket.png | Bin 13117 -> 13117 bytes 2 files changed, 112 insertions(+), 18 deletions(-) diff --git a/scripts/result.lua b/scripts/result.lua index 38d4ade..d0f58be 100644 --- a/scripts/result.lua +++ b/scripts/result.lua @@ -6,17 +6,20 @@ local desh = 1920 local bgSfxPlayed = false; -local backgroundImage = gfx.CreateSkinImage("bg.png", 1); +local backgroundImage = gfx.CreateSkinImage("bg.png", 0); -local topBarImage = gfx.CreateSkinImage("result/top_bar.png", 1); -local jacketPanelImage = gfx.CreateSkinImage("result/panels/jacket.png", 1); -local rightPanelImage = gfx.CreateSkinImage("result/panels/right.png", 1); -local bottomPanelImage = gfx.CreateSkinImage("result/panels/bottom.png", 1); +local topBarImage = gfx.CreateSkinImage("result/top_bar.png", 0); +local jacketPanelImage = gfx.CreateSkinImage("result/panels/jacket.png", 0); +local rightPanelImage = gfx.CreateSkinImage("result/panels/right.png", 0); +local bottomPanelImage = gfx.CreateSkinImage("result/panels/bottom.png", 0); -local jacketImage = gfx.CreateSkinImage("result/default_jacket.png", 1); +local jacketImage = gfx.CreateSkinImage("result/default_jacket.png", 0); local transitionEnterScale = 0; +local rightPanelX = 0; +local rightPanelY = 850; + local jacketPanelX = 0; local jacketPanelY = 820; @@ -24,6 +27,29 @@ local JACKET_PANEL_TRANSTION_ENTER_OFFSET = -128; local RIGHT_PANEL_TRANSTION_ENTER_OFFSET = 128; local BOTTOM_PANEL_TRANSTION_ENTER_OFFSET = 128; +local earlyLateBarsStats = { + earlyErrors = 0; + earlyNears = 0; + criticals = 0; + lateNears = 0; + lateErrors = 0; +}; +local objectTypeTimingStats = { + chip = { + criticals = 0, + nears = 0, + errors = 0, + }, + long = { + criticals = 0, + errors = 0, + }, + vol = { + criticals = 0, + errors = 0, + }, +} + game.LoadSkinSample("result") function resetLayoutInformation() @@ -47,7 +73,6 @@ local drawTopBar = function() local tw, th = gfx.ImageSize(topBarImage); gfx.ImageRect(0, -th * (1 - Easing.outQuad(transitionEnterScale)), desw, th, topBarImage, 1, 0); - gfx.ClosePath(); end @@ -56,16 +81,48 @@ local drawRightPanel = function() local tw, th = gfx.ImageSize(rightPanelImage); gfx.ImageRect( - 0+(RIGHT_PANEL_TRANSTION_ENTER_OFFSET * (1 - Easing.outQuad(transitionEnterScale))), - 850, + rightPanelX, + rightPanelY, tw, th, rightPanelImage, Easing.outQuad(transitionEnterScale), 0 ); +end - gfx.ClosePath(); +local drawRightPanelContent = function () + + -- Draw song name and artist + gfx.FontSize(28) + gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_MIDDLE) + gfx.Text(result.realTitle, rightPanelX + 435, rightPanelY + 108); + gfx.Text(result.artist, rightPanelX + 435, rightPanelY + 143); + + -- Draw err/early/critical/late/err texts + gfx.FontSize(24) + gfx.TextAlign(gfx.TEXT_ALIGN_RIGHT + gfx.TEXT_ALIGN_MIDDLE) + gfx.LoadSkinFont('Digital-Serial-Bold.ttf') + + gfx.Text(earlyLateBarsStats.earlyErrors, rightPanelX + 683, rightPanelY + 370); + gfx.Text(earlyLateBarsStats.earlyNears, rightPanelX + 683, rightPanelY + 401); + gfx.Text(earlyLateBarsStats.criticals, rightPanelX + 683, rightPanelY + 432); + gfx.Text(earlyLateBarsStats.lateNears, rightPanelX + 683, rightPanelY + 463); + gfx.Text(earlyLateBarsStats.lateErrors, rightPanelX + 683, rightPanelY + 494); + + -- Draw hit stats based on objects + -- CHIP + gfx.Text(objectTypeTimingStats.chip.criticals, rightPanelX + 255, rightPanelY + 365); + gfx.Text(objectTypeTimingStats.chip.nears, rightPanelX + 255, rightPanelY + 395); + gfx.Text(objectTypeTimingStats.chip.errors, rightPanelX + 255, rightPanelY + 425); + -- LONG + gfx.Text('???', rightPanelX + 333, rightPanelY + 365); + gfx.Text('-', rightPanelX + 333, rightPanelY + 395); + gfx.Text('???', rightPanelX + 333, rightPanelY + 425); + -- VOL + gfx.Text('???', rightPanelX + 411, rightPanelY + 365); + gfx.Text('-', rightPanelX + 411, rightPanelY + 395); + gfx.Text('???', rightPanelX + 411, rightPanelY + 425); end local drawBottomPanel = function () @@ -81,8 +138,6 @@ local drawBottomPanel = function () Easing.outQuad(transitionEnterScale), 0 ); - - gfx.ClosePath(); end local drawJacketPanel = function() @@ -98,12 +153,10 @@ local drawJacketPanel = function() Easing.outQuad(transitionEnterScale), 0 ); - - gfx.ClosePath(); end local drawJacketPanelContent = function () - gfx.BeginPath() + gfx.BeginPath(); gfx.ImageRect( jacketPanelX+12, jacketPanelY+26, @@ -113,7 +166,6 @@ local drawJacketPanelContent = function () Easing.outQuad(transitionEnterScale), 0 ); - gfx.ClosePath() end local tickTransitions = function(deltaTime) @@ -124,17 +176,55 @@ local tickTransitions = function(deltaTime) transitionEnterScale = 1 end + rightPanelX = 0+(RIGHT_PANEL_TRANSTION_ENTER_OFFSET * (1 - Easing.outQuad(transitionEnterScale))) jacketPanelX = 40 + (JACKET_PANEL_TRANSTION_ENTER_OFFSET * (1 - Easing.outQuad(transitionEnterScale))) end result_set = function () if result.jacketPath ~= nil and result.jacketPath ~= "" then - jacketImage = gfx.CreateImage(result.jacketPath, 1) + jacketImage = gfx.CreateImage(result.jacketPath, 0) end + + -- This only counts the "CHIP" objects, not LONGs or LAZERs + for hitStatIndex = 1, #result.noteHitStats do + local hitStat = result.noteHitStats[hitStatIndex]; + + if (hitStat.rating == 0) then -- Miss + objectTypeTimingStats.chip.errors = objectTypeTimingStats.chip.errors + 1; + + if hitStat.delta < 0 then + earlyLateBarsStats.earlyErrors = earlyLateBarsStats.earlyErrors + 1; + else + earlyLateBarsStats.lateErrors = earlyLateBarsStats.lateErrors + 1; + end + elseif hitStat.rating == 1 then + objectTypeTimingStats.chip.nears = objectTypeTimingStats.chip.nears + 1; + + if hitStat.delta < 0 then + earlyLateBarsStats.earlyNears = earlyLateBarsStats.earlyNears + 1; + else + earlyLateBarsStats.lateNears = earlyLateBarsStats.lateNears + 1; + end + else + objectTypeTimingStats.chip.criticals = objectTypeTimingStats.chip.criticals + 1; + end + end + + -- misses on LONGs or LAZERs are automatically late errors + -- so we add errors that are not ealy or late to late errors + earlyLateBarsStats.lateErrors = earlyLateBarsStats.lateErrors + (result.misses - earlyLateBarsStats.lateErrors - earlyLateBarsStats.earlyErrors) + + -- criticals are same for all objects so we just copy them from results + earlyLateBarsStats.criticals = result.perfects end render = function(deltaTime, showStats) + gfx.Save(); resetLayoutInformation() + gfx.ResetTransform(); + gfx.ResetScissor(); + + gfx.BeginPath() gfx.Scale(scale, scale) gfx.ImageRect(0, 0, desw, desh, backgroundImage, 1, 0); @@ -142,15 +232,19 @@ render = function(deltaTime, showStats) drawTopBar() drawBottomPanel() drawRightPanel() + drawRightPanelContent() drawJacketPanel() drawJacketPanelContent() handleSfx() -- debug + gfx.FontSize(18) + gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_TOP) gfx.Text('DELTA: ' .. deltaTime .. ' // TRANSITION_ENTER_SCALE: ' .. transitionEnterScale .. ' // EASING_OUT_QUAD: ' .. - Easing.outQuad(transitionEnterScale), 255, 255); + Easing.outQuad(transitionEnterScale), 8, 8); tickTransitions(deltaTime) + gfx.Restore(); end diff --git a/textures/result/panels/jacket.png b/textures/result/panels/jacket.png index 7258438e690f81a04008d4d06e496136f3ca9748..3bcde8319e65ff47985772671058378a351d12a9 100644 GIT binary patch delta 3305 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