From cc57fc26c801182a414ae0e95ef2fe7fd9c61ae8 Mon Sep 17 00:00:00 2001 From: Colby Klein Date: Sat, 5 Oct 2013 06:10:21 -0700 Subject: [PATCH] rsr: Upgrade music wheel (Sourced from shakesoda/stepmania.) --- .../MusicWheelItem Roulette NormalPart.lua | 60 +++++++ ...cWheelItem SectionCollapsed NormalPart.lua | 44 +++++ ...icWheelItem SectionExpanded NormalPart.lua | 44 +++++ .../MusicWheelItem Song ColorPart.lua | 17 +- .../MusicWheelItem Song NormalPart.lua | 6 - .../default.lua | 150 ++++++++++++++++++ Themes/rsr/Graphics/_hax.png | Bin 0 -> 3856 bytes Themes/rsr/Graphics/_shigu 3x1.png | Bin 0 -> 23530 bytes 8 files changed, 301 insertions(+), 20 deletions(-) create mode 100644 Themes/rsr/Graphics/MusicWheelItem Roulette NormalPart.lua create mode 100644 Themes/rsr/Graphics/MusicWheelItem SectionCollapsed NormalPart.lua create mode 100644 Themes/rsr/Graphics/MusicWheelItem SectionExpanded NormalPart.lua delete mode 100644 Themes/rsr/Graphics/MusicWheelItem Song NormalPart.lua create mode 100644 Themes/rsr/Graphics/MusicWheelItem Song NormalPart/default.lua create mode 100644 Themes/rsr/Graphics/_hax.png create mode 100644 Themes/rsr/Graphics/_shigu 3x1.png diff --git a/Themes/rsr/Graphics/MusicWheelItem Roulette NormalPart.lua b/Themes/rsr/Graphics/MusicWheelItem Roulette NormalPart.lua new file mode 100644 index 0000000000..fee0e98fd1 --- /dev/null +++ b/Themes/rsr/Graphics/MusicWheelItem Roulette NormalPart.lua @@ -0,0 +1,60 @@ +local t = Def.ActorFrame {} + +local width = 330 +local height = 46 +local offset = -16 + +-- background mask +t[#t+1] = Def.Quad {} +t[#t].InitCommand = function(self) + self:x(offset) + self:setsize(width, height) + self:diffuse({0, 0, 0, 0.6}) +end + +t[#t+1] = LoadActor(THEME:GetPathG("", "_texture checkerboard")) +t[#t].InitCommand = function(self) + self:rainbow() + self:diffusealpha(0.05) + self:stretchto(-width/2 + offset, -height/2, width/2 + offset, height/2) + self:customtexturerect(0, 0, width/32, height/32) + self:texcoordvelocity(0.5, 0.25) +end + +t[#t+1] = LoadActor(THEME:GetPathG("", "_texture checkerboard")) +t[#t].InitCommand = function(self) + self:rainbow() + self:diffusealpha(0.05) + self:stretchto(-width/2 + offset, -height/2, width/2 + offset, height/2) + self:customtexturerect(0, 0, width/32, height/32) + self:texcoordvelocity(0.5, -0.25) +end + +t[#t+1] = LoadActor(THEME:GetPathG("", "_texture checkerboard")) +t[#t].InitCommand = function(self) + self:rainbow() + self:diffusealpha(0.05) + self:stretchto(-width/2 + offset, -height/2, width/2 + offset, height/2) + self:customtexturerect(0, 0, width/32, height/32) + self:texcoordvelocity(-0, 0.5) +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 diff --git a/Themes/rsr/Graphics/MusicWheelItem SectionCollapsed NormalPart.lua b/Themes/rsr/Graphics/MusicWheelItem SectionCollapsed NormalPart.lua new file mode 100644 index 0000000000..9c1faf949c --- /dev/null +++ b/Themes/rsr/Graphics/MusicWheelItem SectionCollapsed NormalPart.lua @@ -0,0 +1,44 @@ +local t = Def.ActorFrame {} + +local width = 330 +local height = 46 +local offset = -16 + +-- background top +t[#t+1] = Def.Quad {} +t[#t].InitCommand = function(self) + self:x(offset) + self:vertalign(bottom) + self:setsize(width, height/2) + self:diffusetopedge({0.05, 0.05, 0.05, 0.6}) + self:diffusebottomedge({0.0, 0.0, 0.0, 0.6}) +end + +-- background bottom +t[#t+1] = Def.Quad {} +t[#t].InitCommand = function(self) + self:x(offset) + self:vertalign(top) + self:setsize(width, height/2) + self:diffuse({0, 0, 0, 0.6}) +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 diff --git a/Themes/rsr/Graphics/MusicWheelItem SectionExpanded NormalPart.lua b/Themes/rsr/Graphics/MusicWheelItem SectionExpanded NormalPart.lua new file mode 100644 index 0000000000..82f52ba244 --- /dev/null +++ b/Themes/rsr/Graphics/MusicWheelItem SectionExpanded NormalPart.lua @@ -0,0 +1,44 @@ +local t = Def.ActorFrame {} + +local width = 330 +local height = 46 +local offset = -16 + +-- background top +t[#t+1] = Def.Quad {} +t[#t].InitCommand = function(self) + self:x(offset) + self:vertalign(bottom) + self:setsize(width, height/2) + self:diffuse({0.1, 0.1, 0.1, 0.6}) +end + +-- background bottom +t[#t+1] = Def.Quad {} +t[#t].InitCommand = function(self) + self:x(offset) + self:vertalign(top) + self:setsize(width, height/2) + self:diffusebottomedge({0.2, 0.2, 0.2, 0.6}) + self:diffusetopedge({0.1, 0.1, 0.1, 0.6}) +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 diff --git a/Themes/rsr/Graphics/MusicWheelItem Song ColorPart.lua b/Themes/rsr/Graphics/MusicWheelItem Song ColorPart.lua index d3d0df30f3..16702e25d7 100644 --- a/Themes/rsr/Graphics/MusicWheelItem Song ColorPart.lua +++ b/Themes/rsr/Graphics/MusicWheelItem Song ColorPart.lua @@ -1,14 +1,3 @@ -return Def.ActorFrame { - Def.Quad { - InitCommand=cmd(x,-128+4;zoomto,4,46); --- OnCommand=cmd(diffuse,color("0,0,0,0.5")); - }; ---[[ Def.Quad { - InitCommand=cmd(x,-128+16+6;zoomto,32,46); --- OnCommand=cmd(faderight,1;diffusealpha,0.5); - }; --]] ---[[ Def.Quad { - InitCommand=cmd(x,2;y,23;zoomto,320,1); --- OnCommand=cmd(diffuse,color("0,0,0,0.5")); - }; --]] -}; \ No newline at end of file +return Def.Quad { + InitCommand=cmd(x,-129;zoomto,4,46) +} diff --git a/Themes/rsr/Graphics/MusicWheelItem Song NormalPart.lua b/Themes/rsr/Graphics/MusicWheelItem Song NormalPart.lua deleted file mode 100644 index 7c5b876099..0000000000 --- a/Themes/rsr/Graphics/MusicWheelItem Song NormalPart.lua +++ /dev/null @@ -1,6 +0,0 @@ -return Def.ActorFrame { - Def.Quad { - InitCommand=cmd(x,4;zoomto,256-4,46); - OnCommand=cmd(diffuse,color("0,0,0,0.5")); - }; -}; \ No newline at end of file diff --git a/Themes/rsr/Graphics/MusicWheelItem Song NormalPart/default.lua b/Themes/rsr/Graphics/MusicWheelItem Song NormalPart/default.lua new file mode 100644 index 0000000000..a51290f5ee --- /dev/null +++ b/Themes/rsr/Graphics/MusicWheelItem Song NormalPart/default.lua @@ -0,0 +1,150 @@ +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 diff --git a/Themes/rsr/Graphics/_hax.png b/Themes/rsr/Graphics/_hax.png new file mode 100644 index 0000000000000000000000000000000000000000..cf49202ce0298076791a4b0fd422a1b370542198 GIT binary patch literal 3856 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