Skip to content
Snippets Groups Projects
Commit 366f9b4b authored by Tim Repke's avatar Tim Repke
Browse files

slimmed down achievement prototype

parent 9f00bdee
No related branches found
No related tags found
No related merge requests found
function Achievements() { function Achievements() {
this.achievements = { this.achievements = {
'started_game': { 'started_game': 'Bestes Anmeldesystem gestartet',
message: "Bestes Anmeldesystem gestartet" 'first_step': 'Erster Schritt getan',
}, // TODO: add more!
'first_step': { 'achievement42': 'You just found the answer to everything!'
message: "Erster Schritt getan"
}
}; };
this.achievedAchievements = []; this.achievedAchievements = [];
this.logElem = null; this.domElems = null;
this.statusBarElem = null;
this.statusTextElem = null;
this.triggerAchievement('started_game'); this.triggerAchievement('started_game');
} }
Achievements.prototype.numTotalAchievements = function() {
return Object.keys(this.achievements).length;
};
Achievements.prototype.getLogElem = function () { Achievements.prototype.numCompletedAchievements = function() {
if(!this.logElem) return Object.keys(this.achievedAchievements).length;
this.logElem = document.getElementById('achievement-log');
return this.logElem;
}; };
Achievements.prototype.getStatusBarElem = function () { Achievements.prototype.initDomElems = function () {
if(!this.statusBarElem) this.domElems = {
this.statusBarElem = document.getElementById('achievement-progress').getElementsByClassName('status-bar-bar')[0]; 'log': document.getElementById('achievement-log'),
return this.statusBarElem; 'statusBar': document.getElementById('achievement-progress').getElementsByClassName('status-bar-bar')[0],
'statusText': document.getElementById('achievement-progress').getElementsByClassName('status-bar-text')[0]
};
}; };
Achievements.prototype.getStatusTextElem = function () { Achievements.prototype.getDomElem = function (elem) {
if(!this.statusTextElem) if(!this.domElems) this.initDomElems();
this.statusTextElem = document.getElementById('achievement-progress').getElementsByClassName('status-bar-text')[0]; return this.domElems[elem];
return this.statusTextElem;
}; };
Achievements.prototype.updateStatusBar = function () { Achievements.prototype.updateStatusBar = function () {
var percent = Math.ceil((this.numCompletedAchievements() / this.numTotalAchievements())*100); var percent = Math.ceil((this.numCompletedAchievements() / this.numTotalAchievements())*100);
this.getStatusBarElem().style.width = percent + '%'; this.getDomElem('statusBar').style.width = percent + '%';
}; };
Achievements.prototype.updateStatusText = function () { Achievements.prototype.updateStatusText = function () {
var text = this.numCompletedAchievements() + '/' + this.numTotalAchievements(); var text = this.numCompletedAchievements() + '/' + this.numTotalAchievements();
this.getStatusTextElem().innerText = text; this.getDomElem('statusText').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;
}; };
Achievements.prototype.logMessage = function (message) { Achievements.prototype.logMessage = function (message) {
var list = this.getLogElem(); var list = this.getDomElem('log');
var newElem = document.createElement('li'); var newElem = document.createElement('li');
var newElemText = document.createTextNode(message); var newElemText = document.createTextNode(message);
...@@ -75,20 +52,18 @@ Achievements.prototype.logMessage = function (message) { ...@@ -75,20 +52,18 @@ Achievements.prototype.logMessage = function (message) {
list.insertBefore(newElem, list.childNodes[0]); list.insertBefore(newElem, list.childNodes[0]);
}; };
Achievements.prototype.getAchievementMessage = function (achievementId) {
return this.achievements[achievementId].message;
};
Achievements.prototype.triggerAchievement = function (achievementId) { Achievements.prototype.triggerAchievement = function (achievementId) {
var status = this.achievementStatus(achievementId); if (!this.achievements[achievementId]){
if (status === 0) { console.error("No such achievement: " + achievementId);
}
else if (!this.achievedAchievements.indexOf(achievementId) >= 0) {
this.achievedAchievements.push(achievementId); this.achievedAchievements.push(achievementId);
this.updateStatusBar(); this.updateStatusBar();
this.updateStatusText(); this.updateStatusText();
this.logMessage(this.getAchievementMessage(achievementId)); this.logMessage(this.achievements[achievementId]);
} }
else if (status === -1)
console.error("No such achievement: " + achievementId);
else else
console.warn("Achievement already achieved: " + achievementId); console.warn("Achievement already achieved: " + achievementId);
if (this.numCompletedAchievements() === 42 ) this.triggerAchievement('achievement42')
}; };
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment