timerdefault.bmx 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. SuperStrict
  2. Rem
  3. bbdoc: Events/TimersDefault
  4. End Rem
  5. Module BRL.TimerDefault
  6. ModuleInfo "Version: 1.00"
  7. ModuleInfo "Author: Simon Armstrong, Mark Sibly, Bruce A Henderson"
  8. ModuleInfo "License: zlib/libpng"
  9. ModuleInfo "Copyright: Blitz Research Ltd"
  10. ModuleInfo "History: 1.00"
  11. ModuleInfo "History: Default/System Timer implementation."
  12. Import BRL.Timer
  13. Import BRL.SystemDefault
  14. ?Win32
  15. Import "timer.win32.c"
  16. ?MacOS
  17. Import "timer.macos.m"
  18. ?Linux
  19. Import "timer.linux.c"
  20. ?
  21. Extern
  22. Function bbTimerStart:Byte Ptr( hertz:Float,timer:TTimer )
  23. Function bbTimerStop( handle:Byte Ptr,timer:TTimer )
  24. End Extern
  25. Function _TimerFired( timer:TTimer ) { nomangle }
  26. timer.Fire
  27. End Function
  28. Type TDefaultTimer Extends TTimer
  29. Method Ticks:Int() Override
  30. Return _ticks
  31. End Method
  32. Method Stop() Override
  33. If Not _handle Return
  34. bbTimerStop _handle,Self
  35. _handle=0
  36. _event=Null
  37. End Method
  38. Method Fire() Override
  39. If Not _handle Return
  40. _ticks:+1
  41. If _event
  42. EmitEvent _event
  43. Else
  44. EmitEvent CreateEvent( EVENT_TIMERTICK,Self,_ticks )
  45. EndIf
  46. End Method
  47. Method Wait:Int() Override
  48. If Not _handle Return 0
  49. Local n:Int
  50. Repeat
  51. WaitSystem
  52. n=_ticks-_wticks
  53. Until n
  54. _wticks:+n
  55. Return n
  56. End Method
  57. Function Create:TTimer( hertz:Float,event:TEvent=Null ) Override
  58. Local t:TDefaultTimer =New TDefaultTimer
  59. Local handle:Byte Ptr=bbTimerStart( hertz,t )
  60. If Not handle Return Null
  61. t._event=event
  62. t._handle=handle
  63. Return t
  64. End Function
  65. Field _ticks:Int
  66. Field _wticks:Int
  67. 'Field _cycle:TTimer 'no longer used...see history
  68. Field _event:TEvent
  69. Field _handle:Byte Ptr
  70. End Type
  71. Type TDefaultTimerFactory Extends TTimerFactory
  72. Method GetName:String() Override
  73. Return "DefaultTimer"
  74. End Method
  75. Method Create:TTimer(hertz:Float,event:TEvent=Null) Override
  76. Return TDefaultTimer.Create( hertz,event )
  77. End Method
  78. End Type
  79. New TDefaultTimerFactory