Mind-Controlled-Shock-Collar/static/js/playMinecraft.js

152 lines
5.4 KiB
JavaScript
Raw Normal View History

2024-06-19 21:32:41 -07:00
let myChart; // Make chart global
let maxValues = 50;
const canvas = document.querySelector("canvas"); // Set correct canvas size
canvas.width = window.innerWidth - (window.innerWidth * .4)
canvas.height = window.innerHeight - (window.innerHeight * .6)
Chart.defaults.color = '#232634';
window.onresize = function(){ location.reload(); }
console.log("Current threshold is: "+threshold);
window.addEventListener('resize', function(event) { // TODO: Fix
console.log("Resize event!");
canvas.width = window.innerWidth
canvas.height = window.innerHeight
// initialRender();
}, true);
async function fetchData() {
const response = await fetch('/headset-data');
const data = await response.json();
return data;
}
async function updateChart() {
const data = await fetchData();
const latestData = data.slice(-maxValues);
// const labels = latestData.map(item => item.index);
// const strength = latestData.map(item => item.strength);
// const attention = latestData.map(item => item.attention);
const meditation = latestData.map(item => item.meditation);
// const delta = latestData.map(item => item.delta);
// const theta = latestData.map(item => item.theta);
// const low_alpha = latestData.map(item => item.low_alpha);
// const high_alpha = latestData.map(item => item.high_alpha);
// const low_beta = latestData.map(item => item.low_beta);
// const high_beta = latestData.map(item => item.high_beta);
// const low_gamma = latestData.map(item => item.low_gamma);
// const high_gamma = latestData.map(item => item.high_gamma);
myChart.data.labels = latestData.map(item => item.index);
myChart.data.datasets[0].data = latestData.map(item => item.strength);
myChart.data.datasets[1].data = latestData.map(item => item.attention);
myChart.data.datasets[2].data = latestData.map(item => item.meditation);
myChart.data.datasets[3].data = Array.from({ length: meditation.length }, () => threshold);
// myChart.data.datasets[3].data = latestData.map(item => item.delta);
// myChart.data.datasets[4].data = latestData.map(item => item.theta);
// myChart.data.datasets[5].data = latestData.map(item => item.low_alpha);
// myChart.data.datasets[6].data = latestData.map(item => item.high_alpha);
// myChart.data.datasets[7].data = latestData.map(item => item.low_beta);
// myChart.data.datasets[8].data = latestData.map(item => item.high_beta);
// myChart.data.datasets[9].data = latestData.map(item => item.low_gamma);
// myChart.data.datasets[10].data = latestData.map(item => item.high_gamma);
if (latestData.length >= maxValues) {
myChart.update('none'); // Prevent animations when shifting the whole chart.
} else {
myChart.update();
}
}
async function initialRender() {
const data = await fetchData();
const latestData = data.slice(-maxValues);
const labels = latestData.map(item => item.index);
const strength = latestData.map(item => item.strength);
const attention = latestData.map(item => item.attention);
const meditation = latestData.map(item => item.meditation);
const thresholdArr = Array.from({ length: meditation.length }, () => threshold);
// const delta = latestData.map(item => item.delta);
// const theta = latestData.map(item => item.theta);
// const low_alpha = latestData.map(item => item.low_alpha);
// const high_alpha = latestData.map(item => item.high_alpha);
// const low_beta = latestData.map(item => item.low_beta);
// const high_beta = latestData.map(item => item.high_beta);
// const low_gamma = latestData.map(item => item.low_gamma);
// const high_gamma = latestData.map(item => item.high_gamma);
const ctx = document.getElementById('myChart').getContext('2d');
myChart = new Chart(ctx, {
type: 'line',
data: {
labels: labels,
datasets: [{
label: 'Signal Strength',
data: strength,
borderWidth: 1,
borderColor: 'orange',
fill: false
},{
label: 'Attention',
data: attention,
borderWidth: 1,
borderColor: 'green',
fill: false
},{
label: 'Meditation',
data: meditation,
borderWidth: 1,
borderColor: 'blue',
fill: false
},{
label: 'Threshold',
data: thresholdArr,
borderWidth: 1,
borderColor: 'red',
fill: false
}]
},
options: {
scales: {
y: {
beginAtZero: true
}
}
}
});
}
function settingsPrompt() {
maxValues = prompt("How many samples should be shown at once?", "50");
if (maxValues == null || maxValues == "") {
text = "User cancelled the prompt.";
}
}
function home() {
window.location.href = "/";
}
function sendShock(shockLvl) {
fetch("/shock?power="+shockLvl)
.then((response) => response.json())
.then((json) => console.log(json));
}
function restartHeadset() {
fetch("/restart-headset")
.then((response) => response.json())
.then((json) => console.log(json));
}
function eStop() {
fetch("/stop")
.then((response) => response.json())
.then((json) => console.log(json));
}
initialRender();
setInterval(updateChart, 800);