Advertisement
Infra_

Untitled

May 31st, 2020
1,056
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.76 KB | None | 0 0
  1. local tgs = nil
  2. transitionGameSpeed = function(value, duration, callback)
  3.     if tgs ~= nil then
  4.         outputDebugString("Error: transitionGameSpeed is already active", 1, 255, 0, 0)
  5.         return false
  6.     end
  7.  
  8.     if value == nil then
  9.         outputDebugString("Error: transitionGameSpeed expected atleast 1 parameter", 1, 255, 0, 0)
  10.         return false
  11.     end
  12.  
  13.     tgs = {
  14.         startTick = getTickCount(),
  15.         initialSpeed = getGameSpeed(),
  16.         targetSpeed = value,
  17.         duration = duration or 1000,
  18.         callback = callback or nil
  19.     }
  20.     addEventHandler("onClientRender", root, doGameSpeedEasing)
  21. end
  22.  
  23. doGameSpeedEasing = function()
  24.     local progress = (getTickCount() - tgs.startTick) / ((tgs.startTick + tgs.duration) - tgs.startTick)
  25.     local currentSpeed = math.round(getGameSpeed(), 1, (tgs.initialSpeed > tgs.targetSpeed and "ceil" or "floor"))
  26.     local newSpeed, _, _ = interpolateBetween(currentSpeed, 0.0, 0.0, tgs.targetSpeed, 0.0, 0.0, progress, "InOutQuad")
  27.  
  28.     newSpeed = math.round(newSpeed, 4, (tgs.initialSpeed > tgs.targetSpeed and "floor" or "ceil"))
  29.     if tgs.initialSpeed > tgs.targetSpeed and newSpeed <= tgs.targetSpeed then
  30.         newSpeed = math.round(newSpeed, 1, "ceil")
  31.     elseif tgs.initialSpeed < tgs.targetSpeed and newSpeed >= tgs.targetSpeed then
  32.         newSpeed = math.round(newSpeed, 1, "floor")
  33.     end
  34.  
  35.     setGameSpeed(newSpeed)
  36.     if newSpeed == tgs.targetSpeed then
  37.         removeEventHandler("onClientRender", root, doGameSpeedEasing)
  38.         if type(tgs.callback) == "function" then tgs.callback() end
  39.         tgs = nil
  40.     end
  41. end
  42.  
  43. math.round = function(number, decimals, method)
  44.     decimals = decimals or 0
  45.     local factor = 10 ^ decimals
  46.     if (method == "ceil" or method == "floor") then return math[method](number * factor) / factor
  47.     else return tonumber(("%."..decimals.."f"):format(number)) end
  48. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement