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() {
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
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