Advertisement
dimmpixeye

Untitled

Apr 28th, 2018
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.60 KB | None | 0 0
  1.     public class Timer : ITick
  2.     {
  3.         public object id;
  4.         public float timer;
  5.         public Action callBackAction;
  6.         public float finishTime;
  7.         public float timeScale = 1;
  8.  
  9.         public bool IsRunning { get; set; }
  10.  
  11.  
  12.         public static List<Timer> FindAllTimers(object possibleHolder)
  13.         {
  14.             return Toolbox.Get<ProcessingTimer>().allWorkingTimers.FindAll(t => t.id != null && t.id == possibleHolder);
  15.         }
  16.  
  17.         public static Timer Add(float finishTime, Action actionComplete, bool isRunning = true)
  18.         {
  19.             if (finishTime == 0)
  20.             {
  21.                 actionComplete();
  22.                 return null;
  23.             }
  24.  
  25.             if (Toolbox.applicationIsQuitting) return null;
  26.  
  27.             var mng = Toolbox.Get<ProcessingTimer>();
  28.             if (mng == null) return null;
  29.             var freeTimer = mng.poolTimers.Find(t => t.IsRunning == false);
  30.             if (freeTimer == null)
  31.             {
  32.                 var timer = new Timer(actionComplete, finishTime);
  33.                 mng.poolTimers.Add(timer);
  34.                 timer.IsRunning = isRunning;
  35.                 timer.Restart();
  36.  
  37.                 return timer;
  38.             }
  39.  
  40.  
  41.             var _ft = freeTimer;
  42.             _ft.id = null;
  43.             _ft.timer = 0;
  44.             _ft.callBackAction = actionComplete;
  45.             _ft.IsRunning = isRunning;
  46.             _ft.Restart(actionComplete, finishTime);
  47.  
  48.             return _ft;
  49.         }
  50.  
  51.  
  52.         public Timer(Action callBackAction, float finishTime)
  53.         {
  54.             this.finishTime = finishTime;
  55.             this.callBackAction = callBackAction;
  56.             timer = 0.0f;
  57.         }
  58.  
  59.         public Timer AddID(object id)
  60.         {
  61.             this.id = id;
  62.             var mono = id as MonoCached;
  63.             if (mono)
  64.                 timeScale = mono.timeScale;
  65.             return this;
  66.         }
  67.  
  68.         public static void Stop(Timer obj)
  69.         {
  70.             if (obj == null) return;
  71.             obj.Stop();
  72.         }
  73.  
  74.         public static void Kill(Timer obj)
  75.         {
  76.             if (obj == null) return;
  77.             obj.Stop();
  78.             obj.Dispose();
  79.         }
  80.  
  81.         public void Stop()
  82.         {
  83.             Toolbox.Get<ProcessingUpdate>().Remove(this);
  84.             IsRunning = false;
  85.             timer = 0.0f;
  86.         }
  87.  
  88.         public Timer SetTimeScale(float timeScale)
  89.         {
  90.             this.timeScale = timeScale;
  91.             return this;
  92.         }
  93.  
  94.  
  95.         public Timer Restart(float finishTime = 0.0f)
  96.         {
  97.             if (finishTime != 0.0f)
  98.                 this.finishTime = finishTime;
  99.  
  100.  
  101.             if (timer > 0)
  102.             {
  103.                 timer = 0.0f;
  104.                 IsRunning = true;
  105.  
  106.                 return this;
  107.             }
  108.  
  109.             timer = 0.0f;
  110.             IsRunning = true;
  111.             Toolbox.Get<ProcessingTimer>().allWorkingTimers.Add(this);
  112.             Toolbox.Get<ProcessingUpdate>().Add(this);
  113.             return this;
  114.         }
  115.  
  116.         public Timer Restart(Action callBackAction, float finishTime = 0.0f)
  117.         {
  118.             if (callBackAction != null)
  119.                 this.callBackAction = callBackAction;
  120.  
  121.             if (finishTime != 0.0f)
  122.                 this.finishTime = finishTime;
  123.  
  124.             if (timer > 0)
  125.             {
  126.                 timer = 0.0f;
  127.                 IsRunning = true;
  128.                 return this;
  129.             }
  130.  
  131.             timer = 0.0f;
  132.             IsRunning = true;
  133.             Toolbox.Get<ProcessingTimer>().allWorkingTimers.Add(this);
  134.             Toolbox.Get<ProcessingUpdate>().Add(this);
  135.             return this;
  136.         }
  137.  
  138.  
  139.         public void Finish()
  140.         {
  141.             timer += finishTime;
  142.         }
  143.  
  144.  
  145.         public void Tick()
  146.         {
  147.             if (timer == 0 && !IsRunning)
  148.             {
  149.                 Toolbox.Get<ProcessingUpdate>().Remove(this);
  150.                 Toolbox.Get<ProcessingTimer>().allWorkingTimers.Remove(this);
  151.             }
  152.  
  153.             if (!IsRunning) return;
  154.             Execute();
  155.         }
  156.  
  157.         public void Execute()
  158.         {
  159.             timer += Time.deltaTime * timeScale;
  160.  
  161.             if (timer < finishTime) return;
  162.             timer = 0.0f;
  163.             IsRunning = false;
  164.             Toolbox.Get<ProcessingUpdate>().Remove(this);
  165.             Toolbox.Get<ProcessingTimer>().allWorkingTimers.Remove(this);
  166.             callBackAction();
  167.         }
  168.  
  169.         public void Dispose()
  170.         {
  171.             timer = 0.0f;
  172.             IsRunning = false;
  173.             id = null;
  174.  
  175.             Toolbox.Get<ProcessingUpdate>().Remove(this);
  176.             Toolbox.Get<ProcessingTimer>().allWorkingTimers.Remove(this);
  177.             callBackAction = delegate { };
  178.         }
  179.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement