104 lines
2.9 KiB
JavaScript
104 lines
2.9 KiB
JavaScript
"use strict";
|
|
|
|
/**
|
|
* @class
|
|
* @constructor
|
|
* @returns {void}
|
|
* @access public
|
|
*/
|
|
const X = (function(){
|
|
|
|
/**
|
|
* @constructs X
|
|
* @returns {void}
|
|
* @access private
|
|
*/
|
|
const X = function(){
|
|
|
|
/** @type {X} */
|
|
const self = this;
|
|
|
|
/** @type {number} */
|
|
this.frames_per_second = 60;
|
|
/** @type {number} */
|
|
this.threads_mode = X.THREADS_MODE_ANIMATION;
|
|
|
|
/**
|
|
* @returns {number}
|
|
* @access private
|
|
*/
|
|
const thread_timer = () => self.frames_per_second && 1000 / self.frames_per_second;
|
|
|
|
/**
|
|
* @returns {void}
|
|
* @access private
|
|
*/
|
|
const execute_threads_by_mode = () => {
|
|
switch(self.threads_mode){
|
|
case X.THREADS_MODE_INTERVAL:
|
|
|
|
/** @type {Object.<string, number>} */
|
|
const cache = {
|
|
frames_per_second : self.frames_per_second,
|
|
mode : self.threads_mode
|
|
},
|
|
/** @type {number} */
|
|
interval = setInterval(() => {
|
|
execute_threads();
|
|
if(
|
|
cache.frames_per_seconds != self.frames_per_second ||
|
|
cache.mode != self.threads_mode
|
|
){
|
|
clearInterval(interval);
|
|
execute_threads_by_mode();
|
|
};
|
|
}, thread_timer());
|
|
|
|
break;
|
|
case X.THREADS_MODE_TIMEOUT:
|
|
setTimeout(() => {
|
|
execute_threads();
|
|
execute_threads_by_mode();
|
|
}, thread_timer());
|
|
break;
|
|
case X.THREADS_MODE_ANIMATION:
|
|
default:
|
|
|
|
/** @type {number} */
|
|
const time = Date.now(),
|
|
/** @type {number} */
|
|
timer = thread_timer();
|
|
|
|
requestAnimationFrame(() => {
|
|
execute_threads();
|
|
setTimeout(() => {
|
|
execute_threads_by_mode();
|
|
}, timer - (Date.now() - time));
|
|
});
|
|
|
|
break;
|
|
};
|
|
};
|
|
|
|
/** @type {number} */
|
|
X.THREADS_MODE_INTERVAL = 1 << 0;
|
|
/** @type {number} */
|
|
X.THREADS_MODE_TIMEOUT = 1 << 1;
|
|
/** @type {number} */
|
|
X.THREADS_MODE_ANIMATION = 1 << 2;
|
|
|
|
/**
|
|
* @returns {void}
|
|
* @access private
|
|
*/
|
|
const execute_threads = () => {};
|
|
|
|
execute_threads_by_mode();
|
|
|
|
};
|
|
|
|
return X;
|
|
})();
|
|
|
|
/** @type {X} */
|
|
const x = X(); |