How would I edit this code so I can play a different spritemap after the one thats currently playing?
Thanks!
Code:
gif = {}
gif.DecalURL1 = "http://www.roblox.com/asset/?id=2991554403"
gif.ImageSize = Vector2.new(800,450) -- The expected crop size for the gif.
gif.MapSize = Vector2.new(4000,2700) -- The expected sprite map size. May get changed if roblox's decal uploader changes the scale.
gif.Frames = 30 -- Number of frames in the gif.
gif.Interval = 0.1 -- How long to wait between each frame.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- Figure out the actual assetId
local assetId = tonumber(string.match(gif.DecalURL1,"?id=(%d+)"))
if not assetId then
error("Could not get assetId from supplied url: " .. gif.DecalURL)
end
function getType(a)
local info = game:GetService("MarketplaceService"):GetProductInfo(a)
return info.AssetTypeId
end
while true do
if getType(assetId) == 1 then
gif.SpriteMap = "rbxassetid://" .. assetId
break
else
assetId = assetId - 1
end
end
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
currentFrame = -1
root = math.floor(math.sqrt(gif.Frames))
function gif:GetImageSize()
if gif.MapSize.X > 1024 or gif.MapSize.Y > 1024 then
local ratio = gif.ImageSize.Y/gif.ImageSize.X
local expected = Vector2.new(1024,1024*ratio)
local alpha = (expected/gif.MapSize).X
return gif.ImageSize * alpha
else
return gif.ImageSize
end
end
function gif:GetRectOffset(frame)
-- Returns an ImageRectOffset to be used by an ImageLabel based on the current frame, and the data supplied above.
local size = gif:GetImageSize()
local x = (currentFrame % root) * size.X
local y = math.floor( (currentFrame / root) ) * size.Y
return Vector2.new(x,y)
end
function gif:NextFrame()
-- Properly increments the frames and returns a RectOffset for that frame.
-- Used for playback.
if currentFrame == gif.Frames-1 then
currentFrame = 0
else
currentFrame = currentFrame + 1
end
return gif:GetRectOffset(currentFrame)
end
function gif:SetFrame(frame)
if type(frame) == "number" then
currentFrame = math.floor(frame)
end
end
function gif:Init(image)
if image:IsA("ImageLabel") or image:IsA("ImageButton") then
local size = gif:GetImageSize()
image.ImageRectSize = size
image.Image = gif.SpriteMap
end
end
function gif:Yield()
-- Waits until "gif.Interval" seconds pass.
local t = tick()
local rs = game:GetService("RunService")
while tick()-t < gif.Interval do
rs.RenderStepped:wait()
end
end
return gif
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
