March 05, 2021, 07:31:25 AM

Author Topic: [bb] alarm.bb by kochOn [ 1+ years ago ]  (Read 565 times)

Offline BlitzBot

[bb] alarm.bb by kochOn [ 1+ years ago ]
« on: June 29, 2017, 12:28:38 AM »
Title : alarm.bb
Author : kochOn
Posted : 1+ years ago

Description : This is a library for all Blitz languages except Blitz Max.

With it you could create multiple alarms and wait for them to be triggered.
There are many functions to help you through the process of making, setting and getting alarm states but also pausing and resuming single alarm or all at a time.

I' ve realized it cause I need to trigger events according to the Sprite Candy Effects timers, but I think it could be useful for most of you.


Code :
Code: BlitzBasic
  1. ;::::::::::::::::::::::::::::::
  2. ;:::::::::: alarm.bb ::::::::::
  3. ;::::::::::::::::::::::::::::::
  4. ;
  5. ; A simple alarm library to
  6. ; easily deal with multiple
  7. ; timers
  8. ;
  9. ; by Nicolas ATEK aka kochOn
  10. ; 01/03/2007
  11. ;
  12. ; www.kochonet.com
  13.  
  14. Const ALARM_TRIGGERED = 0
  15. Const ALARM_ACTIVED   = 1
  16. Const ALARM_PAUSED    = 2
  17. Const ALARM_SECONDS   = 3
  18. Const ALARM_MILLISECS = 4
  19. Const ALARM_INIT      = 5
  20.  
  21. Type TAlarm
  22.         Field set%, time%, active%, overflow%
  23.         Field paused%, stime%
  24. End Type
  25.  
  26. ; CreateAlarm%(time% = 0)
  27. ;
  28. ; time: period in millisecs before alarm starts 'ringing'
  29. ;         Setting time parameter empty, lesser or equal To 0 will desactive the alarm
  30. ;
  31. ; Return a handle of the newly created alarm
  32.  
  33. Function CreateAlarm%(time% = 0)
  34.         Local alarm.TAlarm
  35.        
  36.         alarm = New TAlarm
  37.        
  38.         If time <= 0 Then
  39.                 alarmset    = 0
  40.                 alarm   ime   = 0
  41.                 alarmactive = False
  42.         Else
  43.                 alarmset    = time
  44.                 alarm   ime   = MilliSecs() + time
  45.                 alarmactive = True
  46.         EndIf
  47.        
  48.         alarmoverflow = 0
  49.         alarmpaused = False
  50.         alarmstime  = 0
  51.        
  52.         Return Handle(alarm)
  53. End Function
  54.  
  55. ; SetAlarm(halarm%, time% = 0, overflow% = False)
  56. ;
  57. ; halarm  : handle of an existing alarm
  58. ; time    : period in millisecs before alarm starts 'ringing'
  59. ;         Setting time parameter empty, lesser or equal to 0 will desactive the alarm
  60. ; overflow: True to keep an accurate alarm when you perpetually set or reset it in a loop  
  61.  
  62. Function SetAlarm%(halarm%, time% = 0, overflow% = False)
  63.         Local alarm.TAlarm
  64.        
  65.         alarm = Object.TAlarm(halarm)
  66.         If alarm = Null Then Return -1
  67.        
  68.         If overflow = False Or alarmpaused = True Then alarmoverflow = 0
  69.         If time <= 0 Then
  70.                 alarmset    = 0
  71.                 alarm   ime   = 0
  72.                 alarmactive = False
  73.         Else
  74.                 alarmset    = time
  75.                 alarm   ime   = MilliSecs() + time + alarmoverflow
  76.                 alarmactive = True
  77.         EndIf
  78. End Function
  79.  
  80. ; ResetAlarm(halarm%, overflow% = False)
  81. ;         Reset the alarm to its last time initialized with CreateAlarm or SetAlarm
  82. ;
  83. ; halarm  : handle of an existing alarm
  84. ; overflow: True to keep an accurate alarm when you perpetually set or reset it in a loop  
  85.  
  86. Function ResetAlarm%(halarm%, overflow% = False)
  87.         Local alarm.TAlarm
  88.        
  89.         alarm = Object.TAlarm(halarm)
  90.         If alarm = Null Then Return -1
  91.        
  92.         If overflow = False Or alarmpaused = True Then alarmoverflow = 0
  93.         If alarmset > 0 Then
  94.                 alarm   ime   = MilliSecs() + alarmset + alarmoverflow
  95.                 alarmactive = True
  96.         EndIf
  97. End Function
  98.  
  99. ; DesactiveAlarm%(halarm%)
  100. ;
  101. ; halarm: handle of an existing alarm
  102.  
  103. Function DesactiveAlarm(halarm%)
  104.         Local alarm.TAlarm
  105.        
  106.         alarm = Object.TAlarm(halarm)
  107.         If alarm = Null Then Return -1
  108.        
  109.         alarmactive = False
  110.         alarmpaused = False
  111.         alarmstime  = 0
  112.         alarm   ime   = 0      
  113. End Function
  114.  
  115. ; PauseAlarm%(halarm%)
  116. ;
  117. ; halarm: handle of an existing alarm
  118.  
  119. Function PauseAlarm%(halarm%)
  120.         Local alarm.TAlarm
  121.        
  122.         alarm = Object.TAlarm(halarm)
  123.         If alarm = Null Then Return -1
  124.        
  125.         If alarmpaused = True Or alarmactive = False Then Return
  126.        
  127.         alarmpaused = True
  128.         alarmstime  = alarm     ime - MilliSecs()
  129. End Function
  130.  
  131. ; ResumeAlarm%(halarm%)
  132. ;
  133. ; halarm: handle of an existing alarm
  134.  
  135. Function ResumeAlarm%(halarm%)
  136.         Local alarm.TAlarm
  137.        
  138.         alarm = Object.TAlarm(halarm)
  139.         If alarm = Null Then Return -1
  140.        
  141.         If alarmpaused = False Or alarmactive = False Then Return
  142.        
  143.         alarmpaused = False
  144.         alarm   ime = MilliSecs() + alarmstime
  145. End Function
  146.  
  147. ; PauseAlarms()
  148.  
  149. Function PauseAlarms()
  150.         Local alarm.TAlarm
  151.        
  152.         For alarm = Each TAlarm
  153.                 If alarmactive = True Then
  154.                         If alarmpaused = False Then
  155.                                 alarmpaused = True
  156.                                 alarmstime  = alarm     ime - MilliSecs()
  157.                         EndIf
  158.                 EndIf
  159.         Next
  160. End Function
  161.  
  162. ; ResumeAlarms()
  163.  
  164. Function ResumeAlarms()
  165.         Local alarm.TAlarm
  166.        
  167.         For alarm = Each TAlarm
  168.                 If alarmactive = True Then
  169.                         If alarmpaused = True Then
  170.                                 alarmpaused = False
  171.                                 alarm   ime = MilliSecs() + alarmstime
  172.                         EndIf
  173.                 EndIf
  174.         Next
  175. End Function
  176.  
  177. ; GetAlarm%(halarm%, state% = 0)
  178. ;
  179. ; halarm: handle of an existing alarm
  180. ; state : use one of 0:ALARM_TRIGGERED, 1:ALARM_ACTIVED, 2:ALARM_PAUSED, 3:ALARM_SECONDS, 4:ALARM_MILLISECS, 5:ALARM_INIT
  181. ;         Default is 0 so you just need to use GetAlarm(halarm) without state parameter to know if an alamr is triggered
  182. ;
  183. ; Return the value according to the selected state or -1 if the alarm does not exist
  184.  
  185. Function GetAlarm%(halarm%, state% = 0)
  186.         Local alarm.TAlarm
  187.        
  188.         alarm = Object.TAlarm(halarm)
  189.         If alarm = Null Then Return -1
  190.                
  191.         Select state
  192.                 Case ALARM_TRIGGERED:
  193.                         If alarmactive = True Then
  194.                                 If alarmpaused = False Then
  195.                                         If MilliSecs() >= alarm ime Then
  196.                                                 alarmoverflow = alarm   ime - MilliSecs()
  197.                                                 alarm   ime   = 0
  198.                                                 alarmactive = False
  199.                                                 Return True
  200.                                         EndIf
  201.                                 Else
  202.                                         Return False
  203.                                 EndIf
  204.                         EndIf
  205.                         Return False
  206.                
  207.                 Case ALARM_ACTIVED:
  208.                         Return alarmactive
  209.                
  210.                 Case ALARM_PAUSED:
  211.                         Return alarmpaused
  212.                        
  213.                 Case ALARM_SECONDS:
  214.                         If alarmactive = True Then
  215.                                 If alarmpaused = True Then
  216.                                         Return alarmstime / 1000
  217.                                 Else
  218.                                         Return (alarm   ime - MilliSecs()) / 1000
  219.                                 EndIf
  220.                         Else
  221.                                 Return 0
  222.                         EndIf
  223.                        
  224.                 Case ALARM_MILLISECS:
  225.                         If alarmactive = True Then
  226.                                 If alarmpaused = True Then
  227.                                         Return alarmstime
  228.                                 Else
  229.                                         Return (alarm   ime - MilliSecs())
  230.                                 EndIf
  231.                         Else
  232.                                 Return 0
  233.                         EndIf
  234.                
  235.                 Case ALARM_INIT:
  236.                         Return alarmset
  237.                
  238.         End Select
  239. End Function
  240.  
  241. ; DestroyAlarm(halarm%)
  242. ;         Destroy the specified alarm
  243. ;
  244. ; halarm: handle of an existing alarm
  245.  
  246. Function DestroyAlarm(halarm%)
  247.         Local alarm.TAlarm
  248.        
  249.         alarm = Object.TAlarm(halarm)
  250.         If alarm = Null Then Return -1
  251.        
  252.         Delete alarm   
  253. End Function
  254.  
  255. ; DestroyAlarms()
  256. ;         Destroy all previously created alarms
  257.  
  258. Function DestroyAlarms()
  259.         Local alarm.TAlarm
  260.        
  261.         For alarm = Each TAlarm
  262.                 Delete alarm
  263.         Next   
  264. End Function
  265.  
  266. ;:::::::::: a little demo ::::::::::
  267.  
  268. ;       Graphics 640, 480, 32, 2
  269. ;       SetBuffer BackBuffer()
  270. ;      
  271. ;       ; Create 3 alarms with different values (test with other values)
  272. ;       Global alarm1 = CreateAlarm(500)
  273. ;       Global alarm2 = CreateAlarm(1000)
  274. ;       Global alarm3 = CreateAlarm(1500)
  275. ;
  276. ;       ; for alarms triggered message to be posted an amount of time
  277. ;       Global alarm1_triggered = CreateAlarm()
  278. ;       Global alarm2_triggered = CreateAlarm()
  279. ;       Global alarm3_triggered = CreateAlarm()
  280. ;      
  281. ;       While Not KeyDown(1)
  282. ;               Cls
  283. ;              
  284. ;               Color 255, 255, 255
  285. ;               Text 160, 200, "alarm1:" + GetAlarm(alarm1, ALARM_INIT) + " mil.", True, True
  286. ;               Text 160, 240, GetAlarm(alarm1, ALARM_MILLISECS), True, True    
  287. ;               Text 320, 200, "alarm2:" + GetAlarm(alarm2, ALARM_INIT) + " mil.", True, True
  288. ;               Text 320, 240, GetAlarm(alarm2, ALARM_MILLISECS), True, True    
  289. ;               Text 480, 200, "alarm3:" + GetAlarm(alarm3, ALARM_INIT) + " mil.", True, True
  290. ;               Text 480, 240, GetAlarm(alarm3, ALARM_MILLISECS), True, True    
  291. ;              
  292. ;               ; If alarms are triggered, reset them to their initial values
  293. ;               ; and set alarms_triggered for informations posting
  294. ;               ; ResetAlarm use the overflow parameter to keep accuracy (try False and compare)
  295. ;               If GetAlarm(alarm1) Then SetAlarm(alarm1_triggered, 250) : ResetAlarm(alarm1, True)
  296. ;               If GetAlarm(alarm2) Then SetAlarm(alarm2_triggered, 250) : ResetAlarm(alarm2, True)
  297. ;               If GetAlarm(alarm3) Then SetAlarm(alarm3_triggered, 250) : ResetAlarm(alarm3, True)
  298. ;              
  299. ;               Color 255, 0, 0
  300. ;               ; Check if alarms used to post triggered message are active
  301. ;               ; and so post informations     
  302. ;               If GetAlarm(alarm1_triggered, ALARM_ACTIVED) Then Text 160, 280, "Triggered", True, True
  303. ;               If GetAlarm(alarm2_triggered, ALARM_ACTIVED) Then Text 320, 280, "Triggered", True, True
  304. ;               If GetAlarm(alarm3_triggered, ALARM_ACTIVED) Then Text 480, 280, "Triggered", True, True
  305. ;              
  306. ;               ; Necessary to know when alarms will be triggered and so will become inactive
  307. ;               GetAlarm(alarm1_triggered)  
  308. ;               GetAlarm(alarm2_triggered)
  309. ;               GetAlarm(alarm3_triggered)
  310. ;              
  311. ;               Color 255, 255, 0
  312. ;               If GetAlarm(alarm1, ALARM_PAUSED) = False Then
  313. ;                       Text 320, 80, "PRESS SPACE TO PAUSE ALARMS", True, True
  314. ;               Else
  315. ;                       Text 320, 80, "PRESS SPACE TO RESUME ALARMS", True, True       
  316. ;               EndIf
  317. ;              
  318. ;               If KeyHit(57) Then
  319. ;                       If GetAlarm(alarm1, ALARM_PAUSED) Then
  320. ;                               ResumeAlarms()
  321. ;                       Else
  322. ;                               PauseAlarms()
  323. ;                       EndIf  
  324. ;               EndIf
  325. ;              
  326. ;               Flip
  327. ;       Wend


Comments :


Naughty Alien(Posted 1+ years ago)

 ..handy..I'm gonna use this..thanks!


 

SimplePortal 2.3.6 © 2008-2014, SimplePortal