From 366f9b4bb49dddfd0ec4f505efec4f34f48e1e86 Mon Sep 17 00:00:00 2001 From: Tim Repke <timmothey@gmx.de> Date: Fri, 21 Aug 2015 19:37:00 +0200 Subject: [PATCH] slimmed down achievement prototype --- .../view/signups/game1/js/achievements.js | 83 +++++++------------ 1 file changed, 29 insertions(+), 54 deletions(-) diff --git a/registration-system/view/signups/game1/js/achievements.js b/registration-system/view/signups/game1/js/achievements.js index 80d8260..652c349 100644 --- a/registration-system/view/signups/game1/js/achievements.js +++ b/registration-system/view/signups/game1/js/achievements.js @@ -1,72 +1,49 @@ function Achievements() { this.achievements = { - 'started_game': { - message: "Bestes Anmeldesystem gestartet" - }, - 'first_step': { - message: "Erster Schritt getan" - } + 'started_game': 'Bestes Anmeldesystem gestartet', + 'first_step': 'Erster Schritt getan', + // TODO: add more! + 'achievement42': 'You just found the answer to everything!' }; this.achievedAchievements = []; - this.logElem = null; - this.statusBarElem = null; - this.statusTextElem = null; + this.domElems = null; this.triggerAchievement('started_game'); } +Achievements.prototype.numTotalAchievements = function() { + return Object.keys(this.achievements).length; +}; -Achievements.prototype.getLogElem = function () { - if(!this.logElem) - this.logElem = document.getElementById('achievement-log'); - return this.logElem; +Achievements.prototype.numCompletedAchievements = function() { + return Object.keys(this.achievedAchievements).length; }; -Achievements.prototype.getStatusBarElem = function () { - if(!this.statusBarElem) - this.statusBarElem = document.getElementById('achievement-progress').getElementsByClassName('status-bar-bar')[0]; - return this.statusBarElem; +Achievements.prototype.initDomElems = function () { + this.domElems = { + 'log': document.getElementById('achievement-log'), + 'statusBar': document.getElementById('achievement-progress').getElementsByClassName('status-bar-bar')[0], + 'statusText': document.getElementById('achievement-progress').getElementsByClassName('status-bar-text')[0] + }; }; -Achievements.prototype.getStatusTextElem = function () { - if(!this.statusTextElem) - this.statusTextElem = document.getElementById('achievement-progress').getElementsByClassName('status-bar-text')[0]; - return this.statusTextElem; +Achievements.prototype.getDomElem = function (elem) { + if(!this.domElems) this.initDomElems(); + return this.domElems[elem]; }; Achievements.prototype.updateStatusBar = function () { var percent = Math.ceil((this.numCompletedAchievements() / this.numTotalAchievements())*100); - this.getStatusBarElem().style.width = percent + '%'; + this.getDomElem('statusBar').style.width = percent + '%'; }; Achievements.prototype.updateStatusText = function () { var text = this.numCompletedAchievements() + '/' + this.numTotalAchievements(); - this.getStatusTextElem().innerText = text; -}; - -Achievements.prototype.numTotalAchievements = function() { - return Object.keys(this.achievements).length; -}; - -Achievements.prototype.numCompletedAchievements = function() { - return Object.keys(this.achievedAchievements).length; -}; - -/** - * returns status about a specific achievementId - * @param achievementId - * @returns {number} -1 = does not exist, 0 = achievable, 1 = already completed - */ -Achievements.prototype.achievementStatus = function(achievementId) { - if (!this.achievements[achievementId]) - return -1; - if (!this.achievedAchievements.indexOf(achievementId) >= 0) - return 0; - return 1; + this.getDomElem('statusText').innerText = text; }; Achievements.prototype.logMessage = function (message) { - var list = this.getLogElem(); + var list = this.getDomElem('log'); var newElem = document.createElement('li'); var newElemText = document.createTextNode(message); @@ -75,20 +52,18 @@ Achievements.prototype.logMessage = function (message) { list.insertBefore(newElem, list.childNodes[0]); }; -Achievements.prototype.getAchievementMessage = function (achievementId) { - return this.achievements[achievementId].message; -}; - Achievements.prototype.triggerAchievement = function (achievementId) { - var status = this.achievementStatus(achievementId); - if (status === 0) { + if (!this.achievements[achievementId]){ + console.error("No such achievement: " + achievementId); + } + else if (!this.achievedAchievements.indexOf(achievementId) >= 0) { this.achievedAchievements.push(achievementId); this.updateStatusBar(); this.updateStatusText(); - this.logMessage(this.getAchievementMessage(achievementId)); + this.logMessage(this.achievements[achievementId]); } - else if (status === -1) - console.error("No such achievement: " + achievementId); else console.warn("Achievement already achieved: " + achievementId); + + if (this.numCompletedAchievements() === 42 ) this.triggerAchievement('achievement42') }; \ No newline at end of file -- GitLab