Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local tgs = nil
- transitionGameSpeed = function(value, duration, callback)
- if tgs ~= nil then
- outputDebugString("Error: transitionGameSpeed is already active", 1, 255, 0, 0)
- return false
- end
- if value == nil then
- outputDebugString("Error: transitionGameSpeed expected atleast 1 parameter", 1, 255, 0, 0)
- return false
- end
- tgs = {
- startTick = getTickCount(),
- initialSpeed = getGameSpeed(),
- targetSpeed = value,
- duration = duration or 1000,
- callback = callback or nil
- }
- addEventHandler("onClientRender", root, doGameSpeedEasing)
- end
- doGameSpeedEasing = function()
- local progress = (getTickCount() - tgs.startTick) / ((tgs.startTick + tgs.duration) - tgs.startTick)
- local currentSpeed = math.round(getGameSpeed(), 1, (tgs.initialSpeed > tgs.targetSpeed and "ceil" or "floor"))
- local newSpeed, _, _ = interpolateBetween(currentSpeed, 0.0, 0.0, tgs.targetSpeed, 0.0, 0.0, progress, "InOutQuad")
- newSpeed = math.round(newSpeed, 4, (tgs.initialSpeed > tgs.targetSpeed and "floor" or "ceil"))
- if tgs.initialSpeed > tgs.targetSpeed and newSpeed <= tgs.targetSpeed then
- newSpeed = math.round(newSpeed, 1, "ceil")
- elseif tgs.initialSpeed < tgs.targetSpeed and newSpeed >= tgs.targetSpeed then
- newSpeed = math.round(newSpeed, 1, "floor")
- end
- setGameSpeed(newSpeed)
- if newSpeed == tgs.targetSpeed then
- removeEventHandler("onClientRender", root, doGameSpeedEasing)
- if type(tgs.callback) == "function" then tgs.callback() end
- tgs = nil
- end
- end
- math.round = function(number, decimals, method)
- decimals = decimals or 0
- local factor = 10 ^ decimals
- if (method == "ceil" or method == "floor") then return math[method](number * factor) / factor
- else return tonumber(("%."..decimals.."f"):format(number)) end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement