File manager - Edit - /home/missmand/public_html/gameapp/js/GameController.js
Back
function GameController() { document.body.style.zoom = 1.4;//1 / window.devicePixelRatio; //Get dom elements this.container = $('.game_container'); this.container.show(); this.message = this.container.find('.message').hide(); this.answer = this.container.find('.answer'); this.score = this.container.find('.score').hide(); //this.scoreTotal = this.container.find('.score_total'); this.messageContainer = this.container.find('.message_container'); this.answerContainer = this.container.find('.answer_container').hide(); this.scoreContainer = this.container.find('.score_container').hide(); this.resultBtnContainer = this.container.find('.result_container').hide(); this.showResultBtn = this.container.find('.result_btn'); this.endMissionBtn = this.container.find('.end_mission').css('display', 'inline-block'); //Game data this.categories = {}; // environments this.events = []; // missions this.messagesByEvent = {}; // messages by mission this.answersByMessage = {}; // answers by message this.answerGains = {}; // gains by answer //TMP this.answersNotReady = [32, 34, 36, 37, 38, 39, 40, 43, 47, 50, 48, 49, 59, 60, 67, 68, 66, 69, 84]; //Game logic this.mission = 0; this.firstMessageByEvent = {}; this.totalGain = []; this.WAIT_MESSAGE = 1000; this.WAIT_ANSWER = 1000; this.WAIT_LENGTH_FACTOR = 24; //INIT this.loadData = function() { var parseIndex = window.location.href.lastIndexOf('?'); if (parseIndex < 0) { console.log('no mission selected'); return; } //Get game data var gameData = JSON.parse(window.localStorage.getItem('game_data')); this.onDataLoaded(gameData); var index = parseInt(window.location.href.substring(parseIndex + 1)); if (index >= 0 && index < this.events.length) { this.mission = index; this.startMission(this.mission); } } this.onDataLoaded = function(res) { this.categories = res.categories; this.answerGains = res.answer_gains; //Read environnements /* for (var id in res.categories) { this.eventsByCat[id] = {}; }*/ //Read missions this.events = res.events; for (var i = 0; i < res.events.length; i++) { var event = res.events[i]; this.messagesByEvent[event.id] = {}; this.firstMessageByEvent[event.id] = 0; } //Read messages for (var i = 0; i < res.messages.length; i++) { var message = res.messages[i]; if (!this.messagesByEvent.hasOwnProperty(message.event_id)) continue; // filtered this.messagesByEvent[message.event_id][message.id] = message; if (this.firstMessageByEvent[message.event_id] == 0) this.firstMessageByEvent[message.event_id] = message.id; // first message of this event this.answersByMessage[message.id] = {}; } //Read answers for (var i = 0; i < res.answers.length; i++) { var answer = res.answers[i]; if (!this.answersByMessage.hasOwnProperty(answer.message_id)) continue; // filtered this.answersByMessage[answer.message_id][answer.id] = answer; } //Init score for (var i = 0; i < GameConfig.GAUGE_NAMES.length; i++) { var score = MakeClone(this.score, 'score_' + i, this.score); score.show().find('.gauge_name').html(GameConfig.GAUGE_NAMES[i]); } this.showResultBtn.click(this.computeScore.bind(this)); //End mission button (shown with score) this.endMissionBtn.click(this.endMission.bind(this)); } //Start a mission this.startMission = function(index) { var event = this.events[index]; //Get first message var messId = this.firstMessageByEvent[event.id]; if (messId == 0) { alert('cette mission ne contient aucun message'); return; } //Set title this.container.find('h1').html(event.name); //Init total gain for (var i = 0; i < GameConfig.GAUGE_NAMES.length; i++) this.totalGain[i] = 0; //Show first message var messages = this.messagesByEvent[event.id]; //this.showMessage( messages[31]); this.showMessage(messages[messId]); this.container.click(); } //End the mission this.endMission = function() { document.location.href = 'select.html'; } //Show message this.showMessage = function(mess) { this.messageContainer.find('#message_tmp').remove(); this.appendMessage(mess.id, mess.text); //Check if we have a next var answers = this.answersByMessage[mess.id]; var answerIds = Object.keys(answers); if (answerIds.length == 1 && answers[answerIds[0]].text == '') { var message = MakeClone(this.message, 'message_tmp', this.message); message.html('<span>.</span><span>.</span><span>.</span>').addClass('message_top').show(); } if (mess.id == 80) this.endMessage(mess); else this.container.unbind('click').click(() => { this.container.unbind('click'); this.endMessage(mess); }); //Set timeout according to message length //var wait = this.WAIT_MESSAGE + mess.text.length * this.WAIT_LENGTH_FACTOR; //setTimeout(this.endMessage.bind(this, mess), wait); } this.appendMessage = function(id, text, isPlayer) { var message = MakeClone(this.message, 'message_' + id, this.message); message.html(text).show(); if (isPlayer === true) message.addClass('message_player'); else { //Handle icon var prev = message.prev(); while(prev.length > 0) { if (prev.hasClass('message_player')) break; if (prev.is('img')) { prev.remove(); break; } else prev.addClass('message_top'); prev = prev.prev(); } message.before('<img src="img/logo-mini.png">'); } //SHOW IMAGES if (id == 53) message.after("<div class='end_images message_top'><img src='img/perso-cuisinier.png'><img src='img/perso-jardinier.png'><img class='img_bricoleur' src='img/perso-bricoleur.png'><img class='img_mediateur' src='img/perso-mediateur.png'></div>"); else if (id == 59 || id == 76) message.after("<div class='end_images message_top'><img class='img_hesitation' src='img/hesitation.png'></div>"); else if (id == 60 || id == 48 || id == 67) message.after("<div class='end_images message_top'><img src='img/foule.png' class='img_foule'></div>"); else if (id == 31 || id == 78) { if (id == 31) { message.before("<div class='end_images message_top'><img src='img/parchemin_new.png' class='img_parchemin'></div>"); message.addClass('message_top'); } else message.after("<div class='end_images message_top'><img src='img/parchemin_final.png' class='img_parchemin'></div>"); } else if (id == 79) message.after("<div class='end_images message_top'><img src='img/discours_rocher.png' class='img_rocher'></div>"); else if (id == 85) message.after("<div class='end_images message_top'><img src='img/groupe.png' class='img_end'></div>"); else if (id == 86) message.after("<div class='end_images message_top'><img src='img/perso-mediateur.png' class='img_end'></div>"); else if (id == 69 || id == 80) { if (id == 80) message.hide(); else message.addClass('message_player');//after("<div class='end_images message_top'><img src='img/discours.png' class='img_parchemin'></div>"); } this.container.scrollTop(this.container.scrollTop() + message.offset().top); /* if (navigator.userAgent.match(/(Android)/)) window.scroll(0, message.offset().top); else if (navigator.userAgent.match(/(iPod|iPhone|iPad)/)) window.setTimeout(() => window.scrollTo(0, message.offset().top), 0); else $('html, body').scrollTop(message.offset().top); */ //$('html, body').scrollTop(this.container.height()); return message; } //End timeout this.endMessage = function(mess) { console.log(mess); this.messageContainer.find('#message_tmp').remove(); var answers = this.answersByMessage[mess.id]; var answerIds = Object.keys(answers); //No answers -> End mission if (answerIds.length == 0) { this.resultBtnContainer.show(); return; } //One answer if (answerIds.length == 1) { //Empty answer -> Go next if (answers[answerIds[0]].text == '') { var nextMess = this.messagesByEvent[mess.event_id][answers[answerIds[0]].next_ok]; if (nextMess) this.showMessage(nextMess); else alert ('next not configured (remove empty answer to end the mission)'); return; } else if (answers[answerIds[0]].text == 'FREE_ANSWER') { //TODO } } //Show answers this.answerContainer.children(':not(:last)').remove(); this.answer.before('<div class="choose_answer">Choisissez votre réponse :</div>'); this.answerContainer.show(); var first = true; for (var id in answers) { var answ = this.showAnswer(mess, answers[id]); /* if (!first && this.mission === 0) { answ.addClass('disabled'); answ.prev().addClass('disabled'); answ.unbind('click'); } first = false; */ } //$('html, body').scrollTop(this.container.height()); this.container.scrollTop(this.container.scrollTop() + this.answerContainer.offset().top); /* if (navigator.userAgent.match(/(Android)/)) window.scroll(0, this.answerContainer.offset().top); else if (navigator.userAgent.match(/(iPod|iPhone|iPad)/)) window.setTimeout(() => window.scrollTo(0, this.answerContainer.offset().top), 0); else $('html, body').scrollTop(this.answerContainer.offset().top); */ } //Show answer this.showAnswer = function(mess, ans) { var answer = MakeClone(this.answer, 'answer_' + ans.id, this.answer); answer.html(ans.text).css('display', 'inline-block'); answer.before('<img src="img/answer.png">'); if (this.answersNotReady.indexOf(ans.id) >= 0) answer.addClass('disabled'); else answer.click((e) => { e.stopPropagation(); this.chooseAnswer(mess, ans); }); return answer; } this.chooseAnswer = function(mess, ans) { this.answerContainer.hide(); this.appendMessage('', ans.text, true); this.message.before('<div class="clear"></div>'); var gains = this.answerGains[ans.id]; if (gains) { for (var i = 0; i < this.totalGain.length; i++) this.totalGain[i] += gains[i]; } setTimeout(this.endAnswer.bind(this, mess, ans), this.WAIT_ANSWER); } //End timeout this.endAnswer = function(mess, ans) { //Next message var nextMess = this.messagesByEvent[mess.event_id][ans.next_ok]; if (typeof(nextMess) == 'undefined') { alert ('next not configured for this answer'); return; } //Feedback if (ans.feedback != '') { this.appendMessage('', ans.feedback); var message = MakeClone(this.message, 'message_tmp', this.message); message.html('<span>.</span><span>.</span><span>.</span>').addClass('message_top').show(); this.container.unbind('click').click(() => { this.container.unbind('click'); this.showMessage(nextMess)}); //var wait = this.WAIT_MESSAGE + ans.feedback.length * this.WAIT_LENGTH_FACTOR; //setTimeout(this.showMessage.bind(this, nextMess), wait); } else this.showMessage(nextMess); } //Called at the end of mission (if no next message) this.computeScore = function() { this.container.find('h1').html('Résultats'); this.messageContainer.hide(); this.resultBtnContainer.hide(); this.scoreContainer.show(); this.container.scrollTop(0); /* if (navigator.userAgent.match(/(Android)/)) window.scroll(0, 0); else if (navigator.userAgent.match(/(iPod|iPhone|iPad)/)) window.setTimeout(() => window.scrollTo(0, 0), 0); else $('html, body').scrollTop(0); */ var scores = this.scoreContainer.children('.score'); var player = JSON.parse(window.localStorage.getItem('player')); var score = 0; for (var i = 0; i < this.totalGain.length; i++) { var gain = this.totalGain[i]; var gauge = scores.eq(i); var gainDom = gauge.find('.gauge_gain'); gainDom.html(gain >= 0 ? '+' + gain : gain); if (gain > 0) gainDom.addClass('positive'); else if (gain < 0) gainDom.addClass('negative'); score += gain * 500; player.gauge[i] += gain; if (player.gauge[i] > GameConfig.GAUGE_MAX_VALUE) player.gauge[i] = GameConfig.GAUGE_MAX_VALUE; if (player.gauge[i] < 0) player.gauge[i] = 0; gauge.find('.gauge_value').html(player.gauge[i]); gauge.find('.gauge_bar').css('width', ((player.gauge[i] * 100) / GameConfig.GAUGE_MAX_VALUE) + '%'); } this.scoreContainer.find('.result_player_name').html(player.name); player.mission[this.mission] = true; // mission done window.localStorage.setItem('player', JSON.stringify(player)); //this.scoreTotal.html('SCORE : ' + score); } } $(document).ready(function() { var controller = new GameController(); controller.loadData(); });
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0 |
proxy
|
phpinfo
|
Settings