Files
itgmania212121/Themes/rsr/Graphics/MusicWheelItem Song NormalPart/default.lua
T
Colby Klein cc57fc26c8 rsr: Upgrade music wheel
(Sourced from shakesoda/stepmania.)
2013-10-05 06:10:21 -07:00

151 lines
3.4 KiB
Lua

local t = Def.ActorFrame {}
local width = 330
local height = 46
local offset = -16
t.InitCommand=function(self)
--self:y(0.5)
end
-- background
t[#t+1] = Def.Quad {}
t[#t].InitCommand = function(self)
self:x(offset + 29)
self:setsize(width - 50, height)
self:diffuse({0, 0, 0, 0.6})
end
-- genre gen <3
local function GenerateRandomColors(song)
if not song then return 0, {} end
-- randomseed truncates float values, but we need more randomness.
-- move the number over several digits to compensate.
local length = song:MusicLengthSeconds()
-- BMS files without BGM mess with this (zero). Use 120 instead.
if length == 0 then
length = 120
elseif length == 105 then -- ITG length hack
length = 1001
end
local seed = 10000*length
math.randomseed(seed)
-- Vary the amount of words returned, based on the seed.
local rand = math.random()
-- chances for word amount:
-- 2/10 for one, 7/10 for two, 1/10 for three
if rand < 0.2 then num = 1
elseif rand > 0.9 then num = 3
else num = 2 end
colors = {}
for i=1,num do
colors[i] = {}
math.randomseed(seed)
colors[i][1] = math.random();
math.randomseed(seed+5)
colors[i][2] = math.random();
math.randomseed(seed+10)
colors[i][3] = math.random();
math.randomseed(seed+15)
colors[i][4] = clamp(math.random(), 0.75, 1.0)
seed = seed + 1
end
return num, colors
end
local t2 = Def.ActorFrame {
SetMessageCommand = function(self, params)
local song = params.Song
local num, colors = GenerateRandomColors(song)
local children = {}
for i=1,self:GetNumChildren() do
children[i] = self:GetChild("MusicWheel_Quad"..i)
end
for k, v in pairs(children) do
v:visible(false)
if k <= num and song then
v:visible(true)
v:y(math.ceil(-height/2 + ((height-1)/num)*(k-1)))
local sub = num % 2 == 0 and 1 or 0
v:setsize(50, math.ceil((height-sub)/num))
v:diffuse(colors[k])
end
end
end
}
for i=1,3 do
t2[#t2+1] = Def.Quad {
Name="MusicWheel_Quad"..i,
InitCommand=function(self)
self:horizalign(left)
self:vertalign(top)
self:y(math.ceil(-height/2))
self:x(-width/2 + offset)
self:setsize(50, height-1)
self:diffusealpha(0.0)
end
}
end
t[#t+1] = t2
t[#t+1] = LoadActor(THEME:GetPathG("", "_shigu"))
t[#t].InitCommand = cmd(visible,false;x,-width/2+3;zoom,0.25;animate,false)
t[#t].SetMessageCommand = function(self, params)
local song = params.Song
if song and string.lower(song:GetDisplayMainTitle()) == "sigsig" then
self:visible(true)
if params.HasFocus then
self:animate(true)
else
self:setstate(0)
self:animate(false)
end
else
self:visible(false)
end
end
t[#t+1] = LoadActor(THEME:GetPathG("", "_hax"))
t[#t].InitCommand = cmd(visible,false;x,-width/2-offset/2;zoom,0.25;animate,false)
t[#t].SetMessageCommand = function(self, params)
local song = params.Song
if song and song:MusicLengthSeconds() == 105 then
self:visible(true)
else
self:visible(false)
end
end
-- bottom border
t[#t+1] = Def.Quad {}
t[#t].InitCommand = function(self)
self:x(offset+10)
self:y(math.ceil(height/2)+1)
self:setsize(width+20, 2)
self:diffuse({0.0, 0.0, 0.0, 0.8})
end
-- left border
t[#t+1] = Def.Quad {}
t[#t].InitCommand = function(self)
self:x(-width/2+offset)
self:y(1)
self:setsize(2, height+2)
self:diffuse({0.0, 0.0, 0.0, 0.8})
end
return t