|
@@ -0,0 +1,380 @@
|
|
|
+// --- variáveis de estilo ---
|
|
|
+var estilo = { font: "40px Arial", fill: "#fff", align: "center" };
|
|
|
+var educativo = { font: "40px Arial", fill: "#000", align: "justify" };
|
|
|
+var infos = { font: "40px Arial", fill: "#fff", align: "justify" };
|
|
|
+var titulo = { font: "50px Arial", fill: "#000", align: "justify" };
|
|
|
+
|
|
|
+// --- variáveis para posicionamento na tela ---
|
|
|
+var pagina = 975;
|
|
|
+var posImg = 285;
|
|
|
+var posTxt = 450;
|
|
|
+var posPorc = 420;
|
|
|
+var posCoracao = 285;
|
|
|
+var posPulmao = 485;
|
|
|
+var posBalanca = 685;
|
|
|
+var ponteiro = 1;
|
|
|
+
|
|
|
+// --- variáveis de tratamento de dados ---
|
|
|
+var qtdCaminhadas = 0;
|
|
|
+var arrResultados = new Array();
|
|
|
+var meta = 200;
|
|
|
+
|
|
|
+var Resultados = new Phaser.Class({
|
|
|
+
|
|
|
+ Extends: Phaser.Scene,
|
|
|
+
|
|
|
+ initialize:
|
|
|
+
|
|
|
+ function Resultados ()
|
|
|
+ {
|
|
|
+ Phaser.Scene.call(this, { key: 'resultados' });
|
|
|
+ },
|
|
|
+
|
|
|
+ preload: function ()
|
|
|
+ {
|
|
|
+ this.load.image('fundo', 'img/background.jpg');
|
|
|
+ this.load.image('btVoltar', 'img/bto_voltar.png');
|
|
|
+ this.load.image('btFrente', 'img/bto_frente.png');
|
|
|
+ this.load.image('btTras', 'img/bto_tras.png');
|
|
|
+ this.load.image('iHealth', 'img/iHealth.png');
|
|
|
+ this.load.image('coracao', 'img/ico_coracao.png');
|
|
|
+ this.load.image('pulmao', 'img/ico_pulmao.png');
|
|
|
+ this.load.image('balanca', 'img/ico_balanca.png');
|
|
|
+ },
|
|
|
+
|
|
|
+ create: function ()
|
|
|
+ {
|
|
|
+
|
|
|
+ // --- componentes da tela ---
|
|
|
+
|
|
|
+ this.fundo = this.add.image(487, 775, 'fundo');
|
|
|
+ const btoVoltar = this.add.image(500, 1300, 'btVoltar', { fill: '#0f0' })
|
|
|
+ .setInteractive()
|
|
|
+ .on('pointerdown', () => this.doVoltar() );
|
|
|
+
|
|
|
+ this.grpCaminhadas = this.add.group();
|
|
|
+ this.grpEducativo = this.add.group();
|
|
|
+ //this.cursores = this.input.keyboard.createCursorKeys();
|
|
|
+
|
|
|
+ //--------- INÍCIO DO TRATAMENTO DOS DADOS -------------------------------
|
|
|
+ //--- separa os registros de localização por ocorrências de caminhada ----
|
|
|
+ var dbData = localStorage.getItem('Data'); // todos os registros de data
|
|
|
+ var dbCoor = localStorage.getItem('Local');
|
|
|
+ var arrDBData = dbData.split('|'); // registros separados por dia
|
|
|
+ var arrDBCoor = dbCoor.split('|');
|
|
|
+
|
|
|
+ var x1 = 1;
|
|
|
+ do {
|
|
|
+ //--- analisa o percurso e calcula tempo, distância e velocidade média ---
|
|
|
+ var datafim = '';
|
|
|
+ var coorfim = '';
|
|
|
+ var distancia = 0;
|
|
|
+ var tempo = 0;
|
|
|
+ var velocidade = 0;
|
|
|
+ var calorias = 0;
|
|
|
+ var x2 = 0;
|
|
|
+
|
|
|
+ var arrData = arrDBData[x1].split(','); // registros individuais de data
|
|
|
+ var arrCoor = arrDBCoor[x1].split(','); // registros individuais de localização
|
|
|
+ do {
|
|
|
+ if (arrData[x2] != '' && arrData[x2] != null && arrData[x2] != 'null') {
|
|
|
+ var date1 = new Date(arrData[x2]);
|
|
|
+ var date2 = new Date(datafim);
|
|
|
+ if (date1.getDate() == date2.getDate() && date1.getMonth() == date2.getMonth() && date1.getYear() == date2.getYear()) {
|
|
|
+
|
|
|
+ // --- calcula o tempo entre os registros ---
|
|
|
+ var t = Math.abs(date1 - date2) / 3600000; // tempo total em horas incluindo os minutos
|
|
|
+ if (t < 0) t = t * (-1);
|
|
|
+
|
|
|
+ // --- calcula a distância em metros entre os regitros ---
|
|
|
+ if (arrCoor[x2].trim() == 'SIMULAR DADOS') {
|
|
|
+ // --- Considera o tempo em que o jogo ficou aberto na caminhada e multiplica por 5 ( velocidade média em uma caminhada em k/h )
|
|
|
+ var d = (tempo * 5);
|
|
|
+ } else {
|
|
|
+ // --- Calcula a distância em kilometros ---
|
|
|
+ var PI = 3.14159265358979323846;
|
|
|
+
|
|
|
+ if (arrCoor[x2].trim() != '' && coorfim.trim() != '' && (arrCoor[x2].trim() != coorfim.trim())) {
|
|
|
+
|
|
|
+ var lat1 = parseFloat(arrCoor[x2].substr((arrCoor[x2].indexOf('la:')+4),(arrCoor[x2].indexOf('lo:')-6)));
|
|
|
+ var lon1 = parseFloat(arrCoor[x2].substr((arrCoor[x2].indexOf('lo:')+4),arrCoor[x2].length));
|
|
|
+ var lat2 = parseFloat(coorfim.substr((coorfim.indexOf('la:')+4),(coorfim.indexOf('lo:')-6)));
|
|
|
+ var lon2 = parseFloat(coorfim.substr((coorfim.indexOf('lo:')+4),coorfim.length));
|
|
|
+
|
|
|
+ rad = function(x) {return x*Math.PI/180;}
|
|
|
+
|
|
|
+ var R = 6378.137; //Raio da Terra no km (WGS84)
|
|
|
+ var dLat = rad( lat2 - lat1 );
|
|
|
+ var dLong = rad( lon2 - lon1 );
|
|
|
+
|
|
|
+ var a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos(rad(lat1)) * Math.cos(rad(lat2)) * Math.sin(dLong/2) * Math.sin(dLong/2);
|
|
|
+ var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
|
|
|
+ var d = R * c;
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // ----- calcula a velocidade -------
|
|
|
+ var v = d / t;
|
|
|
+
|
|
|
+ // --- acumula os dados
|
|
|
+ tempo = tempo + t; // horas
|
|
|
+ velocidade = velocidade + v; // k/h
|
|
|
+ distancia = distancia + d; // quilometros
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ datafim = arrData[x2];
|
|
|
+ coorfim = arrCoor[x2];
|
|
|
+ x2 = x2 + 1;
|
|
|
+
|
|
|
+ } while (x2 < arrData.length); // cada um dos registros de localização
|
|
|
+
|
|
|
+ if (distancia > 0) {
|
|
|
+ arrResultados = [];
|
|
|
+ var arrTemp = new Array;
|
|
|
+
|
|
|
+ // --- organiza os resultados do último dia ---
|
|
|
+ var horas = parseInt(tempo); // apenas as horas
|
|
|
+ var minutos = Math.round((tempo - parseInt(tempo)) * 60); // apenas os minutos
|
|
|
+
|
|
|
+ distancia = distancia * 1000; // converte para metros
|
|
|
+ calorias = ((horas * 60) + minutos) * 5; // calcula o gasto energético
|
|
|
+
|
|
|
+ velocidade = parseFloat(velocidade/(x2-1)).toFixed(2);
|
|
|
+
|
|
|
+ var arrTemp = [
|
|
|
+ date2,
|
|
|
+ distancia,
|
|
|
+ horas,
|
|
|
+ minutos,
|
|
|
+ velocidade,
|
|
|
+ calorias
|
|
|
+ ];
|
|
|
+ arrResultados.push(arrTemp);
|
|
|
+
|
|
|
+ qtdCaminhadas++; // --- registra esta caminhada no contador
|
|
|
+ }
|
|
|
+ x1 = x1 + 1;
|
|
|
+
|
|
|
+ } while (x1 < arrDBData.length); // cada uma das caminhadas
|
|
|
+ if (qtdCaminhadas < 1) var Texto1 = this.add.text(250,500,'Comece suas caminhadas\ne veja aqui os resultados',estilo);
|
|
|
+ const btoTras = this.add.image(246, 1150, 'btTras', { fill: '#0f0' })
|
|
|
+ .setInteractive()
|
|
|
+ .on('pointerdown', () => this.moveCaminhadas('-') );
|
|
|
+ const btoFrente = this.add.image(728, 1150, 'btFrente', { fill: '#0f0' })
|
|
|
+ .setInteractive()
|
|
|
+ .on('pointerdown', () => this.moveCaminhadas('+') );
|
|
|
+
|
|
|
+ this.mostraResultados();
|
|
|
+ this.mostraProjecao();
|
|
|
+ this.poeConteudo();
|
|
|
+ },
|
|
|
+
|
|
|
+ update: function ()
|
|
|
+ {
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+ mostraResultados: function ()
|
|
|
+ {
|
|
|
+ // --- mostra os resultados na tela separados por data, finalizando com as projeções ---
|
|
|
+ for (y = 0; y < arrResultados.length; y++ ) {
|
|
|
+ eval('var Destaque' + y + ' = this.add.image(' + posImg + ', 650, "iHealth");');
|
|
|
+ eval('var Texto' + y + ' = this.add.text(' + posTxt + ', 450, "Data: ' + arrResultados[y][0].getDate() + '/' + arrResultados[y][0].getMonth() + '/' + arrResultados[y][0].getFullYear() + ' \\n\\nDistância: ' + parseFloat(arrResultados[y][1]).toFixed(2) + ' m\\n\\nTempo: ' + arrResultados[y][2] + ' h ' + arrResultados[y][3] +' m\\n\\nVelocidade: ' + arrResultados[y][4] + ' k/h\\n\\nGasto calórico: ' + arrResultados[y][5] + '", infos);');
|
|
|
+ eval('var Coracao' + y + ' = this.add.image(' + posCoracao + ', 950, "coracao");');
|
|
|
+ eval('var Pulmao' + y + ' = this.add.image(' + posPulmao + ', 950, "pulmao");');
|
|
|
+ eval('var Balanca' + y + ' = this.add.image(' + posBalanca + ', 950, "balanca");');
|
|
|
+
|
|
|
+ eval('this.grpCaminhadas.add(Destaque' + y + ');');
|
|
|
+ eval('this.grpCaminhadas.add(Texto' + y + ');');
|
|
|
+ eval('this.grpCaminhadas.add(Coracao' + y + ');');
|
|
|
+ eval('this.grpCaminhadas.add(Pulmao' + y + ');');
|
|
|
+ eval('this.grpCaminhadas.add(Balanca' + y + ');');
|
|
|
+
|
|
|
+ this.mostraBarra(meta, arrResultados[y][1], posPorc);
|
|
|
+
|
|
|
+ // --- ajusta a posição para mostrar os dados da próxima caminhada ---
|
|
|
+ posImg = posImg - pagina;
|
|
|
+ posTxt = posTxt - pagina;
|
|
|
+ posPorc = posPorc - pagina;
|
|
|
+ posCoracao = posCoracao - pagina;
|
|
|
+ posPulmao = posPulmao - pagina;
|
|
|
+ posBalanca = posBalanca - pagina;
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ mostraProjecao: function ()
|
|
|
+ {
|
|
|
+ var y = arrResultados.length;
|
|
|
+
|
|
|
+ // --- tira a média ---
|
|
|
+ var medDistancia = 0;
|
|
|
+ var medHoras = 0;
|
|
|
+ var medMinutos = 0;
|
|
|
+ var medVelocidade = 0;
|
|
|
+ var medCalorias = 0;
|
|
|
+ for (x3 = 0; x3 < arrResultados.length; x3++) {
|
|
|
+ medDistancia = medDistancia + arrResultados[x3][1];
|
|
|
+ medHoras = medHoras + arrResultados[x3][2];
|
|
|
+ medMinutos = medMinutos + arrResultados[x3][3];
|
|
|
+ medVelocidade = medVelocidade + arrResultados[x3][4];
|
|
|
+ medCalorias = medCalorias + arrResultados[x3][5];
|
|
|
+ }
|
|
|
+
|
|
|
+ medDistancia = (medDistancia / x3) * 3;
|
|
|
+ medHoras = (medHoras / x3) * 3;
|
|
|
+ medMinutos = (medMinutos / x3) * 3;
|
|
|
+ medVelocidade = (medVelocidade / x3);
|
|
|
+ medCalorias = (medCalorias / x3) * 3;
|
|
|
+
|
|
|
+ eval('var Destaque' + y + ' = this.add.image(1260, 650, "iHealth");');
|
|
|
+ eval('var Texto' + y + ' = this.add.text(1425, 450, "Data: daqui 3 meses \\n\\nDistância: ' + parseFloat(medDistancia).toFixed(2) + ' m\\n\\nTempo: ' + medHoras + ' h ' + medMinutos +' m\\n\\nVelocidade: ' + parseFloat(medVelocidade).toFixed(2) + ' k/h\\n\\nGasto calórico: ' + medCalorias + '", infos);');
|
|
|
+ //eval('alert(Texto' + qtdCaminhadas + '.text);');
|
|
|
+ //eval('var Coracao' + y + ' = this.add.image(' + posCoracao + ', 950, "coracao");');
|
|
|
+ //eval('var Pulmao' + y + ' = this.add.image(' + posPulmao + ', 950, "pulmao");');
|
|
|
+ //eval('var Balanca' + y + ' = this.add.image(' + posBalanca + ', 950, "balanca");');
|
|
|
+
|
|
|
+ eval('this.grpCaminhadas.add(Destaque' + y + ');');
|
|
|
+ eval('this.grpCaminhadas.add(Texto' + y + ');');
|
|
|
+ //eval('this.grpCaminhadas.add(Coracao' + y + ');');
|
|
|
+ //eval('this.grpCaminhadas.add(Pulmao' + y + ');');
|
|
|
+ //eval('this.grpCaminhadas.add(Balanca' + y + ');');
|
|
|
+
|
|
|
+ this.mostraBarra(meta, -1, 1395);
|
|
|
+ },
|
|
|
+
|
|
|
+ poeConteudo: function ()
|
|
|
+ {
|
|
|
+ /*
|
|
|
+ //var boxFechar = this.add.graphics();
|
|
|
+ var boxConteudo1 = this.add.graphics();
|
|
|
+
|
|
|
+ //boxFechar.fillStyle(0xffffff, 1);
|
|
|
+ //boxFechar.fillCirc(120, 150, 740);
|
|
|
+ //const btoFechar = this.add.text(500, 200, 'X', { fill: '#0f0' })
|
|
|
+ // .setInteractive()
|
|
|
+ // .on('pointerdown', () => boxConteudo1.visible = false; boxCoracao1.visible = false; boxConteudo1.visible = false; );
|
|
|
+
|
|
|
+ boxConteudo1.fillStyle(0xffffff, 1);
|
|
|
+ boxConteudo1.fillRect(120, 150, 740, 1000);
|
|
|
+ eval('var boxCoracao' + qtdCaminhadas + ' = this.add.image(240, 250, "coracao");');
|
|
|
+ eval('var boxTitCoracao' + qtdCaminhadas + ' = this.add.text(350, 220,"Saúde Cardíaca", titulo);');
|
|
|
+ eval('var boxTxtCoracao' + qtdCaminhadas + ' = this.add.text(180, 350,"As caminhadas que você fez\\naceleraram seu coração aumentando\\no fluxo sanguíneo em seu sistema\\ncirculatório.\\n\\nEntre outros benefícios, isso fortalece\\nseu coração e acelera a troca de\\nnutrientes e de gases entre as células,\\npromovendo maior consumo de\\nenergia, ou seja, emagrecimento\\nsaudável. ", educativo);');
|
|
|
+
|
|
|
+
|
|
|
+ boxConteudo1.visible = false;
|
|
|
+ boxCoracao1.visible = false;
|
|
|
+ boxTitCoracao1.visible = false;
|
|
|
+ boxTxtCoracao1.visible = false;
|
|
|
+
|
|
|
+ var boxConteudo2 = this.add.graphics();
|
|
|
+
|
|
|
+ boxConteudo2.fillStyle(0xffffff, 1);
|
|
|
+ boxConteudo2.fillRect(120, 150, 740, 1000);
|
|
|
+ boxConteudo2.visible = false;
|
|
|
+
|
|
|
+ var boxConteudo3 = this.add.graphics();
|
|
|
+
|
|
|
+ boxConteudo3.fillStyle(0xffffff, 1);
|
|
|
+ boxConteudo3.fillRect(120, 150, 740, 1000);
|
|
|
+ boxConteudo3.visible = false;*/
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+ converteMes: function (mes)
|
|
|
+ {
|
|
|
+ if (mes == 'Jan') return '01';
|
|
|
+ if (mes == 'Feb') return '02';
|
|
|
+ if (mes == 'Mar') return '03';
|
|
|
+ if (mes == 'Apr') return '04';
|
|
|
+ if (mes == 'May') return '05';
|
|
|
+ if (mes == 'Jun') return '06';
|
|
|
+ if (mes == 'Jul') return '07';
|
|
|
+ if (mes == 'Aug') return '08';
|
|
|
+ if (mes == 'Sep') return '09';
|
|
|
+ if (mes == 'Oct') return '10';
|
|
|
+ if (mes == 'Nov') return '11';
|
|
|
+ if (mes == 'Dec') return '12';
|
|
|
+ },
|
|
|
+
|
|
|
+ getDistanceFromLatLonInKm: function (position1, position2) {
|
|
|
+ "use strict";
|
|
|
+ var deg2rad = function (deg) { return deg * (Math.PI / 180); },
|
|
|
+ R = 6371,
|
|
|
+ dLat = deg2rad(position2.lat - position1.lat),
|
|
|
+ dLng = deg2rad(position2.lng - position1.lng),
|
|
|
+ a = Math.sin(dLat / 2) * Math.sin(dLat / 2)
|
|
|
+ + Math.cos(deg2rad(position1.lat))
|
|
|
+ * Math.cos(deg2rad(position1.lat))
|
|
|
+ * Math.sin(dLng / 2) * Math.sin(dLng / 2),
|
|
|
+ c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
|
|
|
+ return ((R * c *1000).toFixed());
|
|
|
+ },
|
|
|
+
|
|
|
+ doVoltar: function ()
|
|
|
+ {
|
|
|
+ this.scene.start('inicio');
|
|
|
+ },
|
|
|
+
|
|
|
+ /*moveEsquerda: function ()
|
|
|
+ {
|
|
|
+ this.cursores.left.isDown = false;
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+ moveDireita: function ()
|
|
|
+ {
|
|
|
+ this.cursores.right.isDown = false;
|
|
|
+ },*/
|
|
|
+
|
|
|
+ moveCaminhadas: function (direcao)
|
|
|
+ {
|
|
|
+ if ((ponteiro < qtdCaminhadas && direcao == '-') || (ponteiro == 1 && direcao == '+')) {
|
|
|
+ if (direcao == '+') ponteiro--;
|
|
|
+ else ponteiro++;
|
|
|
+ var grpMovel = this.grpCaminhadas.getChildren();
|
|
|
+ for (var i = 0; i < grpMovel.length; i++) {
|
|
|
+ //alert(grpMovel[i].x + ' -> ' +grpMovel[i].text) ;
|
|
|
+ if (direcao == '+') grpMovel[i].x -= pagina;
|
|
|
+ else grpMovel[i].x += pagina;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ mostraBarra: function (meta, distancia, posPorc)
|
|
|
+ {
|
|
|
+ //--- barra de progressão da caminhada ---
|
|
|
+ if (distancia > 0) {
|
|
|
+ eval('var progressBox' + qtdCaminhadas + ' = this.add.graphics();');
|
|
|
+ var porcentagem = (distancia*100)/meta;
|
|
|
+ var compBarra = (parseInt(porcentagem*330)/100) + 200;
|
|
|
+
|
|
|
+ eval('progressBox' + qtdCaminhadas + '.fillStyle(0xffffff, 0.8);');
|
|
|
+ eval('progressBox' + qtdCaminhadas + '.fillRect(210, 320, compBarra, 50);');
|
|
|
+
|
|
|
+ eval('progressBox' + qtdCaminhadas + '.fillStyle(0xcccccc, 0.8);');
|
|
|
+ eval('progressBox' + qtdCaminhadas + '.fillRect(200, 310, 550, 70); ');
|
|
|
+ }
|
|
|
+
|
|
|
+ if (distancia > 0) {
|
|
|
+ var txtTopo = '';
|
|
|
+ if (porcentagem <= 30) txtTopo = "DÁ PRA MELHORAR!";
|
|
|
+ if (porcentagem > 30 && porcentagem <= 60) txtTopo = "JÁ FOI UM COMEÇO!";
|
|
|
+ if (porcentagem > 60 && porcentagem < 100) txtTopo = "MUITO BEM, CONTINUE!";
|
|
|
+ if (porcentagem == 100) txtTopo = "CONQUISTA DESBLOQUEADA!";
|
|
|
+
|
|
|
+ txtTopo = txtTopo + '\\n\\nmeta: ' + meta + ' metros';
|
|
|
+ eval('var txtTopo' + qtdCaminhadas + ' = this.add.text(260, 150, "' + txtTopo + '", estilo);');
|
|
|
+ eval('var Porcentagem' + qtdCaminhadas + ' = this.add.text(' + posPorc + ',325, parseFloat(' + porcentagem + ').toFixed(2) + "%",{ font: "40px Arial", fill: "#CD5C5C", align: "justify" });');
|
|
|
+
|
|
|
+ eval('this.grpCaminhadas.add(progressBox' + qtdCaminhadas + ');');
|
|
|
+ eval('this.grpCaminhadas.add(txtTopo' + qtdCaminhadas + ');');
|
|
|
+ eval('this.grpCaminhadas.add(Porcentagem' + qtdCaminhadas + ');');
|
|
|
+ } else {
|
|
|
+ eval('var txtTopo' + qtdCaminhadas + ' = this.add.text(1200, 150, "PROJEÇÃO PARA 3 MESES!", estilo);');
|
|
|
+ eval('this.grpCaminhadas.add(txtTopo' + qtdCaminhadas + ');');
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+});
|