Timer.cs 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. //====================================
  2. /// Timer
  3. /// @neoyang
  4. /// @2015.03.18
  5. //====================================
  6. using System;
  7. using UnityEngine;
  8. using System.Collections;
  9. using System.Collections.Generic;
  10. using LuaInterface;
  11. //计时器参数
  12. public struct stTimerParams
  13. {
  14. public UInt64 commonUInt64;
  15. }
  16. public class Timer
  17. {
  18. //delegate
  19. public delegate void OnTimeUpHandler(int timerSequence);
  20. private OnTimeUpHandler m_timeUpHandler;
  21. //delegate with custom params
  22. public delegate void OnTimeUpWithParamsHandler(int timerSequence, stTimerParams timerParams);
  23. private OnTimeUpWithParamsHandler m_timeUpWithParamsHandler;
  24. private LuaTable m_luaTable;
  25. private LuaFunction m_luaTimeUpFunction;
  26. private LuaTable m_luaParams;
  27. //循环次数( < 0 表示无限循环)
  28. private int m_loop = 1;
  29. //计时(ms)
  30. private int m_totalTime;
  31. private int m_currentTime;
  32. //是否完成
  33. private bool m_isFinished;
  34. //是否处于运行状态
  35. private bool m_isRunning;
  36. //序列号
  37. private int m_sequence;
  38. public int CurrentTime
  39. {
  40. get { return m_currentTime; }
  41. }
  42. //计时器参数
  43. private stTimerParams m_timerParams;
  44. //--------------------------------------
  45. /// 构造函数
  46. //--------------------------------------
  47. public Timer(int time, int loop, OnTimeUpHandler timeUpHandler, int sequence)
  48. {
  49. if (loop == 0)
  50. {
  51. loop = -1;
  52. }
  53. m_totalTime = time;
  54. m_loop = loop;
  55. m_timeUpHandler = timeUpHandler;
  56. m_sequence = sequence;
  57. m_currentTime = 0;
  58. m_isRunning = true;
  59. m_isFinished = false;
  60. }
  61. public Timer(int time, int loop, OnTimeUpWithParamsHandler timeUpWithParamsHandler, int sequence, stTimerParams timerParams)
  62. {
  63. if (loop == 0)
  64. {
  65. loop = -1;
  66. }
  67. m_totalTime = time;
  68. m_loop = loop;
  69. m_timeUpWithParamsHandler = timeUpWithParamsHandler;
  70. m_sequence = sequence;
  71. m_timerParams = timerParams;
  72. m_currentTime = 0;
  73. m_isRunning = true;
  74. m_isFinished = false;
  75. }
  76. public Timer(int time, int loop, int sequence, LuaFunction timeUpHandler, LuaTable param)
  77. {
  78. if (loop == 0)
  79. {
  80. loop = -1;
  81. }
  82. m_totalTime = time;
  83. m_loop = loop;
  84. m_luaTable = null;
  85. m_luaTimeUpFunction = timeUpHandler;
  86. m_luaParams = param;
  87. m_sequence = sequence;
  88. m_currentTime = 0;
  89. m_isRunning = true;
  90. m_isFinished = false;
  91. }
  92. public Timer(int time,int loop,int sequence,LuaTable table,LuaFunction timeUpHandler,LuaTable param)
  93. {
  94. if (loop == 0)
  95. {
  96. loop = -1;
  97. }
  98. m_totalTime = time;
  99. m_loop = loop;
  100. m_luaTable = table;
  101. m_luaTimeUpFunction = timeUpHandler;
  102. m_luaParams = param;
  103. m_sequence = sequence;
  104. m_currentTime = 0;
  105. m_isRunning = true;
  106. m_isFinished = false;
  107. }
  108. //--------------------------------------
  109. /// Update
  110. /// @deltaTime
  111. //--------------------------------------
  112. public void Update(int deltaTime)
  113. {
  114. if (m_isFinished || !m_isRunning)
  115. {
  116. return;
  117. }
  118. if (m_loop == 0)
  119. {
  120. m_isFinished = true;
  121. }
  122. else
  123. {
  124. m_currentTime += deltaTime;
  125. if (m_currentTime >= m_totalTime)
  126. {
  127. if (m_timeUpHandler != null)
  128. {
  129. m_timeUpHandler(m_sequence);
  130. }
  131. if (m_timeUpWithParamsHandler != null)
  132. {
  133. m_timeUpWithParamsHandler(m_sequence, m_timerParams);
  134. }
  135. if (m_luaTimeUpFunction != null)
  136. {
  137. if (m_luaTable!=null)
  138. {
  139. m_luaTimeUpFunction.Call(m_luaTable,m_sequence, m_luaParams);
  140. }
  141. else
  142. {
  143. m_luaTimeUpFunction.Call(m_sequence, m_luaParams);
  144. }
  145. }
  146. m_currentTime = 0;
  147. m_loop--;
  148. }
  149. }
  150. }
  151. //--------------------------------------
  152. /// 还差多少时间
  153. //--------------------------------------
  154. public int GetLeftTime()
  155. {
  156. return m_totalTime - m_currentTime;
  157. }
  158. //--------------------------------------
  159. /// 结束Timer
  160. //--------------------------------------
  161. public void Finish()
  162. {
  163. m_isFinished = true;
  164. }
  165. //--------------------------------------
  166. /// 是否完成
  167. //--------------------------------------
  168. public bool IsFinished()
  169. {
  170. return m_isFinished;
  171. }
  172. //--------------------------------------
  173. /// 暂停
  174. //--------------------------------------
  175. public void Pause()
  176. {
  177. m_isRunning = false;
  178. }
  179. //--------------------------------------
  180. /// 恢复
  181. //--------------------------------------
  182. public void Resume()
  183. {
  184. m_isRunning = true;
  185. }
  186. //--------------------------------------
  187. /// 重置
  188. //--------------------------------------
  189. public void Reset()
  190. {
  191. m_currentTime = 0;
  192. }
  193. //--------------------------------------
  194. /// 重设倒计时
  195. //--------------------------------------
  196. public void ResetTotalTime(int totalTime)
  197. {
  198. if (m_totalTime == totalTime) return;
  199. m_currentTime = 0;
  200. m_totalTime = totalTime;
  201. }
  202. //--------------------------------------
  203. /// 检查sequence是否匹配
  204. //--------------------------------------
  205. public bool IsSequenceMatched(int sequence)
  206. {
  207. return (m_sequence == sequence);
  208. }
  209. //--------------------------------------
  210. /// 检查delegate是否匹配
  211. //--------------------------------------
  212. public bool IsDelegateMatched(OnTimeUpHandler timeUpHandler)
  213. {
  214. return (m_timeUpHandler == timeUpHandler);
  215. }
  216. public bool IsDelegateWithParamsMatched(OnTimeUpWithParamsHandler timeUpWithParamsHandler)
  217. {
  218. return (m_timeUpWithParamsHandler == timeUpWithParamsHandler);
  219. }
  220. public bool IsLuaFunctionMatched(LuaFunction timeUpHandler)
  221. {
  222. return (m_luaTimeUpFunction == timeUpHandler);
  223. }
  224. //--------------------------------------
  225. /// 获取计时器参数
  226. //--------------------------------------
  227. public stTimerParams GetTimerParams()
  228. {
  229. return m_timerParams;
  230. }
  231. };