Advertisement
Guest User

timer.lua

a guest
Jan 19th, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.61 KB | None | 0 0
  1. --[[
  2.     Modeled after garry's mod's timer implementation.
  3.    
  4.     http://wiki.garrysmod.com/page/Category:timer
  5. ]]
  6.  
  7. timer = {
  8.     namedTimers = {},
  9.     --[[
  10.         active,
  11.         delay,
  12.         delayTimer, --dt gets added to it until it is delay
  13.         repetitions,
  14.         repetitionsDone, --gets added to each cycle,
  15.         func,
  16.     ]]
  17.     simpleTimers = {},
  18.     --[[
  19.         delay,
  20.         delayTimer, --dt gets added to it until it is delay
  21.         func,
  22.     ]]
  23. }
  24. --timer.namedTimers[identifier]
  25. -- repetitions=0 for infinity
  26. function timer.Adjust(identifier, delay, repetitions, func)
  27.     if timer.namedTimers[identifier] then
  28.         timer.namedTimers[identifier].delay = delay
  29.         -- check for lower?
  30.         timer.namedTimers[identifier].repetitions = repetitions
  31.         -- check for lower?
  32.         timer.namedTimers[identifier].func = func
  33.         return true
  34.     else
  35.         return false
  36.     end
  37. end
  38. timer.Check = timer.Update
  39. function timer.Update(dt)
  40.     for k,v in pairs(timer.namedTimers) do
  41.         if v.active then
  42.             v.delayTimer = v.delayTimer + dt
  43.             if v.delayTimer >= v.delay then
  44.                 v.func()
  45.                 v.repetitionsDone = v.repetitionsDone + 1
  46.                 if v.repetitions ~= 0 and v.repetitionsDone >= v.repetitions then
  47.                     timer.namedTimers[k] = nil
  48.                 else
  49.                     v.delayTimer -= v.delay
  50.                 end
  51.             end
  52.         end
  53.     end
  54.     for k,v in pairs(timer.simpleTimers) do
  55.         v.delayTimer = v.delayTimer + dt
  56.         if v.delayTimer >= v.delay then
  57.             v.func()
  58.             timer.simpleTimers[k]=nil
  59.         end
  60.     end
  61. end --[[internal: go through all functions and do whatever is done]]
  62. function timer.Create(identifier, delay, repetitions, func)
  63.     if delay <= 0 then return false end
  64.     timer.namedTimers[identifier] = {
  65.         active = false,
  66.         delay = delay,
  67.         delayTimer = delay,
  68.         repetitions = repetitions or 0,
  69.         repetitionsDone = repetitions or 0,
  70.         func = func
  71.     }
  72. end
  73. function timer.Destroy(identifier)
  74.     timer.namedTimers[identifier] = nil
  75. end
  76. function timer.Exists(identifier)
  77.     return timer.namedTimers[identifier]~=nil
  78. end
  79. function timer.Pause(identifier)
  80.     if timer.namedTimers[identifier] and timer.namedTimers[identifier].active then
  81.         timer.namedTimers[identifier].active = false
  82.         return true
  83.     else
  84.         return false
  85.     end
  86. end
  87. timer.Remove = timer.Destroy
  88. function timer.RepsLeft(identifier)
  89.     if timer.namedTimers[identifier] then
  90.         return timer.namedTimers[identifier].repetitionsLeft
  91.     end
  92. end
  93. function timer.Simple(delay, func)
  94.     table.insert(timer.simpleTimers, {delay=delay,delayTimer=0,func=func})
  95. end
  96. function timer.Start(identifier)
  97.     if timer.namedTimers[identifier] then
  98.         timer.namedTimers[identifier].active = true
  99.         timer.namedTimers[identifier].delayTimer = 0
  100.         timer.namedTimers[identifier].repetitionsDone = 0
  101.         return true
  102.     else
  103.         return false
  104.     end
  105. end
  106. function timer.Stop(identifier)
  107.     if timer.namedTimers[identifier] and timer.namedTimers[identifier].active then
  108.         timer.namedTimers[identifier].active = false
  109.         timer.namedTimers[identifier].delayTimer = 0
  110.         timer.namedTimers[identifier].repetitionsDone = 0
  111.         return true
  112.     else
  113.         return false
  114.     end
  115. end
  116. function timer.TimeLeft(identifier)
  117.     if timer.namedTimers[identifier] then
  118.         return timer.namedTimers[identifier].delay-timer.namedTimers[identifier].delayTimer
  119.     else
  120.         return 0
  121.     end
  122. end
  123. function timer.Toggle(identifier)
  124.     if timer.namedTimers[identifier] then
  125.         if timer.namedTimers[identifier].active then
  126.             timer.Pause(identifier)
  127.         else
  128.             timer.UnPause(identifier)
  129.         end
  130.         return timer.namedTimers[identifier].active
  131.     end
  132. end
  133. function timer.UnPause(identifier)
  134.     if timer.namedTimers[identifier] and not timer.namedTimers[identifier].active then
  135.         timer.namedTimers[identifier].active = true
  136.         return true
  137.     else
  138.         return false
  139.     end
  140. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement