Files
itgmania212121/Themes/_themekit-piu/BGAnimations/ScreenGameplay underlay.lua
T
2011-04-29 14:58:59 -04:00

115 lines
3.4 KiB
Lua

-- CH32 asked me if this was possible, and as you can see, it is!!
local function GetSpeedChanges()
local smfile = GAMESTATE:GetCurrentSong():GetSongFilePath()
local file = File.Read( smfile )
if not file then return end
-- search the tag
local find = string.find(file , "#SPEED:")
if not find then return end
-- search the next semicolon
local last = string.find(file , ";" , find)
local found = string.sub(file,find,last)
-- cleans
found = string.gsub(found, "\r", "")
found = string.gsub(found, "\n", "")
found = string.gsub(found, "#SPEED:", "")
found = string.gsub(found, ";", "")
-- make it a table
found = split(",", found)
-- return it
return found
end
local speeds = GetSpeedChanges()
-- what are those things made of?
local function update(self)
if speeds ~= nil then
for idx,Spd in ipairs(speeds) do
local part = split("=", Spd)
local ebeat = tonumber(part[1]) --WHERE
assert(ebeat)
local songbeat = GAMESTATE:GetSongBeat()
if songbeat >= ebeat
-- 1/20 beat
and songbeat <= ebeat + (1/20)
--and not GAMESTATE:GetSongFreeze()
--and not GAMESTATE:GetSongDelay()
then
local bps = 60 / GAMESTATE:GetCurrentSong():GetTimingData():GetBPMAtBeat( ebeat )
--local bps = GAMESTATE:GetSongBPS()
local value = tonumber(part[2]) --SPEED
local approach = part[3] --APPLY TIME
-- Odd, it needs to be a string to be evaluated o_o;
if not approach then approach = tostring(4*bps) end
if string.sub(approach,approach:len()) == "s" then
approach = string.sub(approach,1,approach:len()-1)
approach = tonumber(approach)
approach = 1/approach
else
approach = 1/(approach*bps)
end
local pastspeed = 1
if idx > 1 then
pastspeed = split("=", speeds[idx-1])
pastspeed = tonumber(pastspeed[2])
end
approach = approach * math.abs(value-pastspeed)
approach = approach + 0.05
--if value ~= 0 then
--approach = value/approach
--approach = scale(value,0,approach,0,1)
--end
MESSAGEMAN:Broadcast("SpeedModLaunched",{ Value = value ; Approach = approach });
--SCREENMAN:SystemMessage("APP: " .. approach .. " SPD: " .. value);
return
end
end
end
end
return Def.ActorFrame {
InitCommand=cmd(SetUpdateFunction,update);
SpeedModLaunchedMessageCommand=function(self,params)
local approach = params.Approach
local value = params.Value
local playerstate = GAMESTATE:GetPlayerState(PLAYER_1)
local playermods = playerstate:GetPlayerOptionsArray('ModsLevel_Preferred')
local found = false
for idx,Mod in ipairs(playermods) do
if string.find(Mod,"%dx") ~= nil
--or string.find(Mod,"%d.%dx") ~= nil
then
found = true
local xmod = playermods[idx]
xmod = string.gsub(xmod,"x","")
xmod = tonumber(xmod)
xmod = xmod * value
--duh, floats
xmod = string.format("*%.2f %.2fx",approach,xmod)
playermods[idx] = xmod
--SCREENMAN:SystemMessage(xmod)
end
end
if not found then
local xmod = string.format("*%.2f %.2fx",approach,value)
table.insert( playermods, xmod)
end
playermods = join(",",playermods)
playerstate:SetPlayerOptions('ModsLevel_Song', playermods)
--self:GetChild("_debug"):settext(playermods)
--SCREENMAN:SystemMessage(playerstate:GetPlayerOptions('ModsLevel_Preferred'));
--SCREENMAN:SystemMessage(value)
end;
--LoadFont()..{ Name="_debug"; InitCommand=cmd(x,50;CenterY;rotationz,90); };
}