Files
itgmania212121/Themes/_themekit-piu/BGAnimations/ScreenSelectMusic overlay/default.lua
T
2011-04-29 14:58:59 -04:00

224 lines
6.4 KiB
Lua

--Whew... this one took some time...
local function ModIcons(p)
local oldmods
--todo: add more
local noteskinbuttons = {
pump = "UpLeft";
dance ="Down";
};
local function ModiconRow(caption)
return Def.ActorFrame {
Draw.RoundBox(35,35,6,6,color("#32ff00"));
Draw.RoundBox(25,25,3,3,color("#32c800"));
LoadFont("_arial black")..{
Name="caption";
Text=caption or "";
};
LoadActor("i can flash")..{
Name="sfx";
InitCommand=cmd(blend,Blend.Add;zoom,0.125);
SFXCommand=cmd(stoptweening;diffusealpha,1;zoom,0.5;linear,0.2;zoom,1;diffusealpha,0);
};
}
end
--ActorScrollers <3
return Def.ActorScroller {
--TransformFunctions are both love and hate...
TransformFunction=function(self, offset, itemIndex, numItems)
self:y(offset * 40);
end;
InitCommand=function(self)
local items = self:GetNumChildren()
self:SetCurrentAndDestinationItem(items/2);
if SSC then
self:SetNumItemsToDraw(items);
end
self:SetLoop(true);
self:playcommand("Set");
end;
PlayerOptionsChangedMessageCommand=cmd(playcommand,"Set");
PlayerJoinedMessageCommand=cmd(playcommand,"Set");
--Here's where the magic happens
SetCommand=function(self)
local playermods = GAMESTATE:GetPlayerState(p):GetPlayerOptionsArray('ModsLevel_Preferred')
--clean (invisible everything)
for k,v in pairs(self:GetChildren()) do
self:GetChild(k):visible(false);
end
--stop early
if not GAMESTATE:IsHumanPlayer(p) then return end;
--this thing is based on iteration... ugh
for k,v in ipairs(playermods) do
--check if it's speed
if string.find(v,"%dx") ~= nil then
local c = self:GetChild("%dx")
c:visible(true);
c:GetChild("caption"):settext(v);
c:GetChild("sfx"):playcommand("SFX");
else
--check if it's noteskin
local noteskins = NOTESKIN:GetNoteSkinNames()
for i,n in ipairs(noteskins) do
if n == v then
local c = self:GetChild("Noteskin")
local button = noteskinbuttons[sGame] or "fallback"
local toload = NOTESKIN:GetPathForNoteSkin(button, "Tap Note", v)
--make it visible
c:visible(true);
--adjust sizes here
c:GetChild("skingraphic"):Load(toload);
c:GetChild("skingraphic"):zoom(0.45);
--effects
c:GetChild("skinframe"):GetChild("sfx"):playcommand("SFX");
else
--it's anything else then
local c = self:GetChild(v)
if c then
c:visible(true);
c:GetChild("sfx"):playcommand("SFX");
end
end
end
end
--yeah whatever...
self:GetChild("revg"):visible(getenv("GradeReverse"..p));
self:GetChild("revg"):GetChild("sfx"):playcommand("SFX");
end
oldmods = playermods
end;
--speed
ModiconRow("1x")..{ Name="%dx" };
--reserved for noteskins
Def.ActorFrame {
Name="Noteskin";
ModiconRow("")..{ Name="skinframe"; };
Def.Sprite { Name="skingraphic"; };
};
--the rest
ModiconRow("RS")..{ Name="SuperShuffle" };
ModiconRow("MR")..{ Name="Left" };
ModiconRow("VN")..{ Name="Hidden" };
ModiconRow("FD")..{ Name="Dark" };
ModiconRow("XM")..{ Name="XMode" };
ModiconRow("RG")..{ Name="revg" };
}
end
local function DifficultyMeter(p)
return LoadFont("_impact 50px")..{
Text="";
SetCommand=function(self)
if not GAMESTATE:IsHumanPlayer(p) then return end;
local steps = GAMESTATE:GetCurrentSteps(p)
local diff = steps:GetDifficulty()
local stype = steps:GetStepsType()
local desc = steps:GetDescription()
local meter = steps:GetMeter()
--local autogen = steps:IsAutogen() and "AUTO " or ""
--compatible
local text = DifficultyAndStepstypeToString(diff,stype,desc)
text = string.upper(text);
self:settextf("%s [%d]",text,meter);
end;
CurrentSongChangedMessageCommand=function(self)
local song = GAMESTATE:GetCurrentSong()
if not song then self:visible(false); return end
self:visible(true);
end;
};
end
local function SongInformationDisplay()
local index = 1
return LoadFont("_arial black 20px")..{
--Text="asd";
SetCommand=function(self)
local song = GAMESTATE:GetCurrentSong()
if not song then self:diffusealpha(0); return end
local title = song:GetDisplayFullTitle();
local artist = song:GetDisplayArtist();
local bpm = song:GetDisplayBpms() --GetTimmingData():GetActualBPM()
local group = song:GetGroupName();
local length = song:MusicLengthSeconds();
if length == 150 then
length = "Lengthless"
else
local longmara
if song:IsLong() then
longmara = " Long song"
elseif song:IsMarathon() then
longmara = " Marathon song"
else
longmara = ""
end
length = string.format("%02d:%02d%s",length/60,length%60,longmara)
end
if bpm[1] == bpm[2] then
bpm = string.format("BPM %d", bpm[1])
else
bpm = string.format("BPM %d - %d",bpm[1],bpm[2])
end
local metadata = {title,artist,bpm,group,length}
local toset = metadata[index]
index = index+1
if index > #metadata then index = 1 end
--self:finishtweening();
self:settext(toset);
self:linear(0.2);
self:diffusealpha(1);
self:sleep(1);
self:linear(0.2)
self:diffusealpha(0);
self:queuecommand("Set");
end;
CurrentSongChangedMessageCommand=function(self)
--reset index
index = 1
--start looping
self:stoptweening();
self:linear(0.2)
self:diffusealpha(0);
self:queuecommand("Set")
end;
OffCommand=cmd(finishtweening);
};
end
return Def.ActorFrame {
DifficultyMeter(PLAYER_1)..{
InitCommand=cmd(FromCenterX,-120;FromTop,100;zoom,0.75;diffuse,color("#646464");Stroke,color("#ffffff"));
CurrentStepsP1ChangedMessageCommand=cmd(playcommand,"Set");
};
DifficultyMeter(PLAYER_2)..{
InitCommand=cmd(FromCenterX,120;FromTop,100;zoom,0.75;diffuse,color("#646464");Stroke,color("#ffffff"));
CurrentStepsP2ChangedMessageCommand=cmd(playcommand,"Set");
};
Draw.RoundBox(SCREEN_WIDTH*0.75+10,50,color("#ffffff"))..{
InitCommand=cmd(CenterX;FromBottom,-75);
};
Draw.RoundBox(SCREEN_WIDTH*0.75,40,5,5,color("#0000c8"))..{
InitCommand=cmd(CenterX;FromBottom,-75);
};
SongInformationDisplay()..{
InitCommand=cmd(CenterX;FromBottom,-75;diffuse,color("#009600");Stroke,color("#000000"));
};
ModIcons(PLAYER_1)..{
InitCommand=cmd(FromLeft,30;FromTop,240);
Condition=not GetUserPrefB("OptionsMode");
};
ModIcons(PLAYER_2)..{
InitCommand=cmd(FromRight,-30;FromTop,240);
Condition=not GetUserPrefB("OptionsMode");
};
}