Skip to content

Commit

Permalink
add code to recall offset plots for specific scores via a new screen
Browse files Browse the repository at this point in the history
  • Loading branch information
MinaciousGrace committed May 1, 2017
1 parent d7c17dc commit 3ad5aae
Show file tree
Hide file tree
Showing 5 changed files with 141 additions and 3 deletions.
90 changes: 90 additions & 0 deletions Themes/Til Death/BGAnimations/ScreenScoreTabOffsetPlot overlay.lua
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
5 changes: 5 additions & 0 deletions Themes/Til Death/Scripts/Scores.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
18 changes: 17 additions & 1 deletion Themes/Til Death/metrics.ini
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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"
Expand Down

0 comments on commit 3ad5aae

Please sign in to comment.