function ScoreManager() { this.onChangeScoreListeners = []; this.onChangeHighScoreListeners = []; this.resetScore(); } ScoreManager.prototype.resetScore = function() { // this.score = Number(sessionStorageManager.record); this.score = 0; sessionStorageManager.record = this.score; if(sessionStorageManager.bestRecord === null) this.highScore = 0; else this.highScore = Number(sessionStorageManager.bestRecord); } ScoreManager.prototype.callListener = function(functionArray) { if(functionArray.length > 0) { for(var i = 0; i < functionArray.length; i++) { functionArray[i](this.score); } } } ScoreManager.prototype.addOnChangeScoreListener = function(onChangeFunction) { this.onChangeScoreListeners.push(onChangeFunction); } ScoreManager.prototype.removeOnChangeScoreListener = function(onChangeFunction) { var itemIndex = this.onChangeScoreListeners.indexOf(onChangeFunction); if(itemIndex > -1) this.onChangeScoreListeners.splice(itemIndex, 1); } ScoreManager.prototype.addOnChangeHighScoreListener = function(onChangeHighScoreFunction) { this.onChangeHighScoreListeners.push(onChangeHighScoreFunction); } ScoreManager.prototype.removeOnChangeHighScoreListener = function(onChangeHighScoreFunction) { var itemIndex = this.onChangeHighScoreListeners.indexOf(onChangeHighScoreFunction); if(itemIndex > -1) this.onChangeHighScoreListeners.splice(itemIndex, 1); } ScoreManager.prototype.removeAllListeners = function() { this.onChangeScoreListeners = []; this.onChangeHighScoreListeners = []; } ScoreManager.prototype.getScore = function() { return this.score; } ScoreManager.prototype.getHighScore = function() { return this.highScore; } ScoreManager.prototype.plusScore = function(amount) { this.setScore(this.score + amount); } ScoreManager.prototype.minusScore = function(amount) { this.plusScore(-1 * amount); } ScoreManager.prototype.setScore = function(value) { var beforeScore = this.score; this.score = value; // update score if(beforeScore !== this.score) this.callListener(this.onChangeScoreListeners); // update high score if(this.score > this.highScore) this.callListener(this.onChangeHighScoreListeners); }