/
cto_ego
/
website
Обзор
Документация
Войти
/
cto_ego
/
website
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
mod/matrixControllerState.js
222 строки
8 KB
cto_ego
Create: styles.css, bugs.md, changelog.md, handbook.html, img_1.png, config.js, draw.js, formula.js, logger.js, mathf.js, matrixControllerState.js, matrixData.js, save.js, sound.js, ui.js, update.js, index.html, index.js
25 июн 2026, 20:55
Верифицирован
25 июн 2026, 20:55
cb1beff
Код
Авторство
О чём код?
class MatrixControllerState { constructor(data, camera) { this.camera = camera; this.data = data; this.setDefaultMode('classic'); }; setPause() { if (data.stop) { data.stop = false; document.getElementById('stopbtn').textContent = '||'; return; } else { data.stop = true; document.getElementById('stopbtn').textContent = '▶' return; } } /** * editing the animation speed * @param {number} speedMs * @returns */ setSpeed(speedMs) { if (typeof speedMs !== 'number') { Logger.error('Error setSpeed: speedMs must be a number'); return; }; if (speedMs < 1) { Logger.error('Error setSpeed: speedMs must be more than 1', {speedMs: speedMs}); return; }; const speedValue = document.getElementById('speedValue'); if (!speedValue) { Logger.errornf("Error setSpeed", "speedValue"); return; }; this.data.time_update = speedMs; if (this.intervalId) { this.data.time_update = speedMs; }; speedValue.textContent = speedMs; Logger.debug('SetSpeed: ', {speedMs: this.data.time_update}) }; /** * editing the animation fade rate * @param {floor} speed - [0, 1] */ setFillSpeed(speed) { if (typeof speed !== 'number') { Logger.error('Error setFillSpeed: speed must be a number'); return; }; if (speed < 0 || speed > 1) { Logger.error('Error setFillSpeed: speed must be in range[0, 1]', {speed: speed}); return; }; const speedFill = document.getElementById('speedFill') if (!speedFill) { Logger.errornf("Error setFillSpeed", "speedFill"); return; }; speedFill.textContent = speed.toFixed(3); this.data.color = `rgba(0, 0, 0, ${speed})`; Logger.debug('SetFillSpeed: ', {color: `rgba(0, 0, 0, ${speed}`}) }; /** * * @param {string} style * @returns */ setStyle(style) { if( Object.keys(TableParams['theme']).includes(style)) { this.data.additionally_mode = this.data.additionally_mode.filter(item => item !== 'time'); this.data.colors = TableParams['theme'][style]['colors']; document.querySelector(`input[name="typeStyle"][value=${style}]`).checked = true; return; } else if ( style === 'gradation' ) { this.data.additionally_mode.push('time'); this.data.ages = new Array(Math.ceil(this.data.columns)).fill(0); const check = document.querySelector(`input[name="typeStyle"][value="gradation"]`); if (!check) { Logger.errornf("Error setStyle", "gradation", "typeStyle" ); } else { check.checked = true; }; return; } else if (style === 'my') { this.data.colors = [ //! not checked document.getElementById('choose-a-color-i-1').value, document.getElementById('choose-a-color-i-2').value, document.getElementById('choose-a-color-i-3').value, document.getElementById('choose-a-color-i-4').value, document.getElementById('choose-a-color-i-5').value, ]; return; } Logger.error(`Style ${style} not found`); }; /** * * @param {Array} obj - list of characters */ setAlphabet(obj) { if (typeof obj !== 'object') { Logger.error('Error setAlphabet: obj must be an array', {obj: obj}); return; }; let alp = ""; obj.forEach(char => { if (char in TableParams['alphabet']) { alp += TableParams['alphabet'][char]; } else if (char == 'mytextradio'){ try { alp += document.getElementById('mytext').value; } catch (error) { Logger.warn('Warn setAlphabet:', {error: error}) }; } else if (char !== 'RandomMyText' && char !== 'CenterMyText'){ Logger.warn("Warn setAlphabet: I don't found alphabet", {object: char}); }; }); this.data.charArray_my = Array.from(alp); }; setCustomText(obj) { //! переделать if (typeof obj !== 'object') { Logger.error('Error setCustomText: object must be an array', {object:obj}) }; this.data.mode_matrix = 'classic'; let t = ''; let a; if (obj.includes('RandomMyText')) a = true else if (obj.includes('CenterMyText')) a = false else { alert("Error, You have a strange value"); return; }; if (a) { this.setAlphabet(obj); } else { this.data.mode_matrix = 'find'; this.data.cacheText = [document.getElementById('userTextcenterID').value, document.getElementById('userTextFillcenterID').value]; t += centerText( this.data.cacheText[0], this.data.cacheText[1], this.data.columns ); this.data.charArray_my = t; }; }; setDefaultMode(mode) { //! не меняет тему и скорость if ( typeof mode !== 'string' ) { Logger.error('Error setDefaultMode: mode must be a string', {mode: mode}); return; }; if (mode === 'only_formula') { this.data.mode_matrix = 'only_formula'; Logger.debug('formula mode'); Sound.playWhistle(); return; }; if (!(mode in TableParams.mode)) { Logger.error('Error setDefaultMode: mode not found', {mode: mode, table: TableParams.mode}); return; }; try { if (TableParams['mode'][mode]['center']) { this.data.mode_matrix = 'find'; this.data.charArray_my = centerText('I always find you', '*', this.data.columns); } else { this.data.mode_matrix = 'classic'; this.setAlphabet(TableParams['mode'][mode]['alphabet']); }; Sound.playWhistle(); } catch (error) { Logger.error('Error setDefaultMode: ', {error: error}); return; } }; setVisibleHideAxes () { try { this.data.draw_axes = !this.data.draw_axes; const btn_axes = document.getElementById('fVisibleHideAxes'); if (!btn_axes) { Logger.warn("Warn setVisibleHideAxes: I don't found element with id <fVisibleHideAxes> ") }; if (this.data.draw_axes) { btn_axes.textContent = 'Скрыть оси'; } else { btn_axes.textContent = 'Показать оси'; }; } catch (error) { Logger.error('Error setVisibleHideAxes: ', {error:error}); }; }; resetStartPointFormulas() { if (!mathf || !mathf.inputMathf || !mathf.inputMathf.formulas) return; Object.keys(mathf.inputMathf.formulas).forEach(key => { const formula = mathf.inputMathf.formulas[key]; formula.point = 0; formula.pointY = 0; formula.yValues = null; }); }; setRecording () { if (!this.data.isRecording) { // start this.data.isRecording = true; this.camera.start(); } else { this.data.isRecording = false; this.camera.stop(); } } }; window.control = new MatrixControllerState(data, null);