From 3ad5aae56c63b266178b42e3c5c584a4130faaea Mon Sep 17 00:00:00 2001 From: MinaciousGrace Date: Mon, 1 May 2017 01:25:23 -0400 Subject: [PATCH] add code to recall offset plots for specific scores via a new screen --- .../ScreenScoreTabOffsetPlot overlay.lua | 90 +++++++++++++++++++ .../ScreenSelectMusic decorations/score.lua | 23 ++++- .../ScreenSelectMusic overlay/default.lua | 8 +- Themes/Til Death/Scripts/Scores.lua | 5 ++ Themes/Til Death/metrics.ini | 18 +++- 5 files changed, 141 insertions(+), 3 deletions(-) create mode 100644 Themes/Til Death/BGAnimations/ScreenScoreTabOffsetPlot overlay.lua diff --git a/Themes/Til Death/BGAnimations/ScreenScoreTabOffsetPlot overlay.lua b/Themes/Til Death/BGAnimations/ScreenScoreTabOffsetPlot overlay.lua new file mode 100644 index 0000000000..2d8ca72390 --- /dev/null +++ b/Themes/Til Death/BGAnimations/ScreenScoreTabOffsetPlot overlay.lua @@ -0,0 +1,90 @@ +-- if score is ever nil we done goofed way before this screen is ever loaded -mina +local score = getScoreForPlot() +local nrt = score:GetNoteRowVector() + +local tst = { 1.50,1.33,1.16,1.00,0.84,0.66,0.50,0.33,0.20 } +local plotWidth, plotHeight = 800,240 +local plotX, plotY = SCREEN_CENTER_X, SCREEN_CENTER_Y +local dotDims, plotMargin = 2, 4 +local judge = GetTimingDifficulty() +local maxOffset = 180*tst[judge] + +local o = Def.ActorFrame{ + InitCommand=cmd(xy,plotX,plotY), + CodeMessageCommand=function(self,params) + if params.Name == "PlotCancel" or params.Name == "PlotExit" or params.Name == "PlotThickens" or params.Name == "PlotTwist" or params.Name == "StarPlot64" or params.Name == "SheriffOfPlottingham" then + SCREENMAN:GetTopScreen():Cancel() + end + if params.Name == "PrevJudge" and judge > 1 then + judge = judge - 1 + elseif params.Name == "NextJudge" and judge < 9 then + judge = judge + 1 + end + maxOffset = 180*tst[judge] + MESSAGEMAN:Broadcast("JudgeDisplayChanged") + end +} + +local dvt = score:GetOffsetVector() +local wuab = {} +local td = GAMESTATE:GetCurrentSteps(PLAYER_1):GetTimingData() +local finalSecond = GAMESTATE:GetCurrentSong(PLAYER_1):GetLastSecond() + +local function fitX(x) -- Scale time values to fit within plot width. + return x/finalSecond*plotWidth - plotWidth/2 +end + +local function fitY(y) -- Scale offset values to fit within plot height + return -1*y/maxOffset*plotHeight/2 +end + +local function plotOffset(nr,dv) + if dv == 1000 then -- 1000 denotes a miss for which we use a different marker + return Def.Quad{InitCommand=cmd(xy,fitX(nr),fitY(tst[judge]*184);zoomto,dotDims,dotDims;diffuse,offsetToJudgeColor(dv/1000);valign,0)} + end + return Def.Quad{ + InitCommand=cmd(xy,fitX(nr),fitY(dv);zoomto,dotDims,dotDims;diffuse,offsetToJudgeColor(dv/1000)), + JudgeDisplayChangedMessageCommand=function(self) + local pos = fitY(dv) + if math.abs(pos) > plotHeight/2 then + self:y(fitY(tst[judge]*184)) + else + self:y(pos) + end + self:diffuse(offsetToJudgeColor(dv/1000, tst[judge])) + end + } +end + +-- Center Bar +o[#o+1] = Def.Quad{InitCommand=cmd(zoomto,plotWidth+plotMargin,1;diffuse,byJudgment("TapNoteScore_W1"))} +local fantabars = {22.5, 45, 90, 135} +local bantafars = {"TapNoteScore_W2", "TapNoteScore_W3", "TapNoteScore_W4", "TapNoteScore_W5"} +for i=1, #fantabars do + o[#o+1] = Def.Quad{InitCommand=cmd(y, fitY(tst[judge]*fantabars[i]); zoomto,plotWidth+plotMargin,1;diffuse,byJudgment(bantafars[i]))} + o[#o+1] = Def.Quad{InitCommand=cmd(y, fitY(-tst[judge]*fantabars[i]); zoomto,plotWidth+plotMargin,1;diffuse,byJudgment(bantafars[i]))} +end +-- Background +o[#o+1] = Def.Quad{InitCommand=cmd(zoomto,plotWidth+plotMargin,plotHeight+plotMargin;diffuse,color("0.05,0.05,0.05,0.05");diffusealpha,0.95)} +-- Convert noterows to timestamps and plot dots +local wuab = {} +for i=1,#nrt do + wuab[i] = td:GetElapsedTimeFromNoteRow(nrt[i]) + o[#o+1] = plotOffset(wuab[i], dvt[i]) +end + +-- Early/Late markers +o[#o+1] = LoadFont("Common Normal")..{ + InitCommand=cmd(xy,-plotWidth/2,-plotHeight/2+2;settextf,"Late (+%ims)", maxOffset;zoom,0.35;halign,0;valign,0), + JudgeDisplayChangedMessageCommand=function(self) + self:settextf("Late (+%ims)", maxOffset) + end +} +o[#o+1] = LoadFont("Common Normal")..{ + InitCommand=cmd(xy,-plotWidth/2,plotHeight/2-2;settextf,"Early (-%ims)", maxOffset;zoom,0.35;halign,0;valign,1), + JudgeDisplayChangedMessageCommand=function(self) + self:settextf("Early (-%ims)", maxOffset) + end +} + +return o \ No newline at end of file diff --git a/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/score.lua b/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/score.lua index 37c51bc1e7..53d997295a 100644 --- a/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/score.lua +++ b/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/score.lua @@ -51,6 +51,7 @@ local t = Def.ActorFrame{ end if rtTable[rates[rateIndex]] ~= nil then score = rtTable[rates[rateIndex]][scoreIndex] + setScoreForPlot(score) MESSAGEMAN:Broadcast("ScoreUpdate") end end @@ -67,18 +68,21 @@ local t = Def.ActorFrame{ rates,rateIndex = getUsedRates(rtTable) scoreIndex = 1 score = rtTable[rates[rateIndex]][scoreIndex] + setScoreForPlot(score) else rtTable = {} rates,rateIndex = {defaultRateText},1 scoreIndex = 1 score = nil - end; + setScoreForPlot(score) + end else hsTable = {} rtTable = {} rates,rateIndex = {defaultRateText},1 scoreIndex = 1 score = nil + setScoreForPlot(score) end MESSAGEMAN:Broadcast("ScoreUpdate") end @@ -388,4 +392,21 @@ for i=1,#judges do t[#t+1] =makeJudge(i,judges[i]) end +t[#t+1] = LoadFont("Common Normal")..{ + Name="Score", + InitCommand=cmd(xy,frameX+offsetX,frameY+offsetY+288;zoom,0.5;halign,0), + SetCommand=function(self) + if score ~= nil then + if score:HasReplayData() then + self:settext("Replay Data Available (Press Up To View Plot)") + else + self:settext("No Replay Data") + end + else + self:settext("") + end + end, + ScoreUpdateMessageCommand=cmd(queuecommand,"Set") +} + return t \ No newline at end of file diff --git a/Themes/Til Death/BGAnimations/ScreenSelectMusic overlay/default.lua b/Themes/Til Death/BGAnimations/ScreenSelectMusic overlay/default.lua index 81d93e27ea..cb451d0294 100644 --- a/Themes/Til Death/BGAnimations/ScreenSelectMusic overlay/default.lua +++ b/Themes/Til Death/BGAnimations/ScreenSelectMusic overlay/default.lua @@ -2,11 +2,17 @@ local t = Def.ActorFrame{} t[#t+1] = Def.Actor{ CodeMessageCommand=function(self,params) - if params.Name == "AvatarShow" then + if params.Name == "AvatarShow" and getTabIndex() == 1 then SCREENMAN:AddNewScreenToTop("ScreenAvatarSwitch") end + if params.Name == "PlotLoad" then + if getTabIndex() == 2 and getScoreForPlot() and getScoreForPlot():HasReplayData() then + SCREENMAN:AddNewScreenToTop("ScreenScoreTabOffsetPlot") + end + end end } + t[#t+1] = LoadActor("../_frame") t[#t+1] = LoadActor("../_PlayerInfo") t[#t+1] = LoadActor("currentsort") diff --git a/Themes/Til Death/Scripts/Scores.lua b/Themes/Til Death/Scripts/Scores.lua index a2fd0a8a1b..d9aa04f918 100644 --- a/Themes/Til Death/Scripts/Scores.lua +++ b/Themes/Til Death/Scripts/Scores.lua @@ -71,6 +71,11 @@ local migsWeight = { -- Score Weights for MIGS score TapNoteScore_CheckpointMiss = 0 } +-- For offsetplot screen thingy doodle -mina +local ScoreForPlot = nil +function setScoreForPlot(hs) ScoreForPlot = hs end +function getScoreForPlot() return ScoreForPlot end + function getScoresByKey(pn) local song = GAMESTATE:GetCurrentSong() local profile diff --git a/Themes/Til Death/metrics.ini b/Themes/Til Death/metrics.ini index 62bce8001e..c440a68abe 100644 --- a/Themes/Til Death/metrics.ini +++ b/Themes/Til Death/metrics.ini @@ -195,13 +195,14 @@ MusicWheelY=SCREEN_CENTER_Y # ~ = Released # + = At The Same Time -CodeNames="AvatarShow,NextRate,PrevRate,NextScore,PrevScore,SongSearch" +CodeNames="AvatarShow,NextRate,PrevRate,NextScore,PrevScore,SongSearch,PlotLoad" CodeAvatarShow="Select,Select" CodeNextRate="@Select-EffectDown" CodePrevRate="@Select-EffectUp" CodeNextScore="EffectDown" CodePrevScore="EffectUp" CodeSongSearch="@Right-Left-Down" +CodePlotLoad="MenuUp" #index should be = 0 but banner loads the number before the value updates for w/e reason so it's 4. #BannerX=capWideScale(get43size(192),192) + 10 @@ -236,6 +237,21 @@ CodeAvatarRight="MenuRight" CodeAvatarCancel="Back" CodeAvatarExit="Start" +[ScreenScoreTabOffsetPlot] +Class="ScreenWithMenuElements" +Fallback="ScreenWithMenuElements" +PrevScreen="ScreenSelectMusic" + +CodeNames="PlotCancel,PlotExit,PrevJudge,NextJudge,PlotThickens,PlotTwist,StarPlot64,SheriffOfPlottingham" +CodePlotCancel="Start","Left" +CodePlotExit="Back" +CodeNextJudge="EffectUp" +CodePrevJudge="EffectDown" +CodePlotThickens="MenuLeft" +CodePlotTwist="MenuRight" +CodeStarPlot64="MenuUp" +CodeSheriffOfPlottingham="MenuDown" + [ScreenColorChange] Class="ScreenWithMenuElements" Fallback="ScreenWithMenuElements"