Kanvas/Public/ecma/t.js

104 lines
2.9 KiB
JavaScript
Raw Permalink Normal View History

"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();