You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
		
		
		
		
		
			
		
			
				
					
					
						
							59 lines
						
					
					
						
							1.5 KiB
						
					
					
				
			
		
		
	
	
							59 lines
						
					
					
						
							1.5 KiB
						
					
					
				| // Copyright © 2023 Entreprise SkamKraft | |
| 'use strict'; | |
| 
 | |
| export class Timer { | |
|     constructor(time, step, unit = "s") { | |
|         this.passed_time = 0; | |
|         this.time = time; | |
|         this.step = step; | |
|         this.continue = true; | |
|         switch (unit) { | |
|             case "ms":  | |
|                 this.unit = 1; | |
|                 break;   | |
|             case "s":  | |
|                 this.unit = 1000; | |
|                 break; | |
|             case "m":  | |
|                 this.unit = 60000; | |
|                 break; | |
|             case "h":  | |
|                 this.unit = 3600000; | |
|                 break; | |
|             default: | |
|                 this.unit = 1; | |
|                 break; | |
|         } | |
|     } | |
|     on(action, callback) { | |
|         switch(action) { | |
|             case "end": | |
|                 this.end_callback = callback; | |
|                 break; | |
|             case "step": | |
|                 this.step_callback = callback; | |
|                 break; | |
|         } | |
|     } | |
|     start() { | |
|         this.continue = true; | |
|         this.#time_step(); | |
|     } | |
| 
 | |
|     stop() { | |
|         this.continue = false; | |
|         this.passed_time = 0; | |
|     } | |
| 
 | |
|     #time_step() { | |
|         if (this.passed_time < this.time && this.continue) { | |
|             if (this.step_callback) this.step_callback(this.passed_time); | |
|             this.passed_time += this.step; | |
|             setTimeout(() => {  | |
|                 this.#time_step()  | |
|             }, this.step*this.unit);            | |
|         } else { | |
|             if (this.end_callback) this.end_callback(this.time); | |
|         } | |
|     } | |
| } |