diff --git a/index.html b/index.html
index 5478168..7e7d108 100644
--- a/index.html
+++ b/index.html
@@ -203,10 +203,10 @@
Progress {{ progress() }} / {{ achievements.length }}
- -
+
-
{{ a.description }}
- {{ a.state.dateAchieved | date }}
+ {{ a.state.timeAchieved | niceTime }}
diff --git a/js/app.js b/js/app.js
index 6b14532..cd94e4e 100644
--- a/js/app.js
+++ b/js/app.js
@@ -9,6 +9,7 @@
var upgrades = game.upgrades;
var achievements = game.achievements;
var allObjects = game.allObjects;
+ var lastSaved;
UI.validateVersion(lab.version);
@@ -18,6 +19,10 @@
return Helpers.formatNumberPostfix;
}]);
+ app.filter('niceTime', ['$filter', function($filter) {
+ return Helpers.formatTime;
+ }]);
+
app.filter('currency', ['$filter', function($filter) {
return function(input) {
return 'JTN ' + $filter('niceNumber')(input);
@@ -124,16 +129,20 @@
app.controller('AchievementsController', function($scope) {
$scope.achievements = achievements;
$scope.progress = function() {
- return achievements.filter(function(a) { return a.isAchieved(); }).length;
+ return achievements.filter(function(a) { return a.validate(lab, allObjects, lastSaved); }).length;
};
});
app.controller('SaveController',
['$scope', '$interval', function($scope, $interval) {
- $scope.lastSaved = new Date();
+ lastSaved = new Date().getTime();
+ $scope.lastSaved = lastSaved;
$scope.saveNow = function() {
+ var saveTime = new Date().getTime();
+ game.lab.state.time += saveTime - lastSaved;
game.save();
- $scope.lastSaved = new Date();
+ lastSaved = saveTime;
+ $scope.lastSaved = lastSaved;
};
$scope.restart = function() {
if (window.confirm(
diff --git a/js/game.js b/js/game.js
index 37baac2..ebf4753 100644
--- a/js/game.js
+++ b/js/game.js
@@ -40,11 +40,8 @@ var Game = (function() {
function(w) { return makeGameObject(GameObjects.Worker, w); });
this.upgrades = this.upgrades.map(
function(u) { return makeGameObject(GameObjects.Upgrade, u); });
- this.achievements = this.achievements.map(function(a) {
- var _a = makeGameObject(GameObjects.Achievement, a);
- _a.setRefAllGameObjects(_this.allObjects);
- return _a;
- });
+ this.achievements = this.achievements.map(
+ function(a) { return makeGameObject(GameObjects.Achievement, a); });
// Load states from local store
for (var key in this.allObjects) {
var o = this.allObjects[key];
diff --git a/js/gameobjects.js b/js/gameobjects.js
index 91b96d1..607eada 100644
--- a/js/gameobjects.js
+++ b/js/gameobjects.js
@@ -33,7 +33,8 @@ var GameObjects = (function() {
moneyCollected : 0,
moneySpent : 0,
dataCollected : 0,
- dataSpent : 0
+ dataSpent : 0,
+ time: 0
}
}]);
};
@@ -232,30 +233,33 @@ var GameObjects = (function() {
*/
var Achievement = function(obj) {
GameObject.apply(this, [obj]);
- this.state.dateAchieved = null;
- this._allObjects = {};
+ this.state.timeAchieved = null;
};
Achievement.prototype = Object.create(GameObject.prototype);
- Achievement.prototype.setRefAllGameObjects = function (allGameObjects) {
- this._allObjects = allGameObjects;
- };
-
- Achievement.prototype.isAchieved = function() {
- if (this.state.dateAchieved) {
+ Achievement.prototype.validate = function(lab, allObjects, saveTime) {
+ if (this.state.timeAchieved) {
return true;
}
- if (this._allObjects.hasOwnProperty(this.targetKey) &&
- this._allObjects[this.targetKey].state.hasOwnProperty(this.targetProperty) &&
- this._allObjects[this.targetKey].state[this.targetProperty] >= this.threshold) {
- this.state.dateAchieved = new Date().getTime();
+ if (allObjects.hasOwnProperty(this.targetKey) &&
+ allObjects[this.targetKey].state.hasOwnProperty(this.targetProperty) &&
+ allObjects[this.targetKey].state[this.targetProperty] >= this.threshold) {
+ this.state.timeAchieved = lab.state.time + new Date().getTime() - saveTime;
UI.showAchievement(this);
return true;
}
return false;
};
+ Achievement.prototype.isAchieved = function() {
+ if (this.state.timeAchieved) {
+ return true;
+ } else {
+ return false;
+ }
+ };
+
// Expose classes in module.
return {
diff --git a/js/helpers.js b/js/helpers.js
index ffc0455..1f23f39 100644
--- a/js/helpers.js
+++ b/js/helpers.js
@@ -37,10 +37,36 @@ var Helpers = (function() {
}
return number;
}
+
+ var formatTime = function(msec) {
+ var totals = Math.ceil(msec / 1000);
+ var days = Math.floor(totals / (24 * 60 * 60));
+ var hours = Math.floor((totals % (24 * 60 * 60)) / (60 * 60));
+ var totalmin = (totals % (24 * 60 * 60)) % (60 * 60);
+ var mins = Math.floor(totalmin / 60);
+ var secs = totalmin % 60;
+
+ var str = [];
+ if (days > 0) {
+ str.push(days + ' day' + (days % 100 == 1 ? '' : 's'));
+ }
+ if (hours > 0) {
+ str.push(hours + ' h');
+ }
+ if (mins > 0) {
+ str.push(mins + ' min');
+ }
+ if (secs > 0) {
+ str.push(secs + ' s');
+ }
+
+ return str.join(', ');
+ }
return {
loadFile: loadFile,
formatNumberPostfix: formatNumberPostfix,
+ formatTime: formatTime,
version: '0.4',
analytics: ''
};
diff --git a/mobile.html b/mobile.html
index 7dcdc8b..3d98f26 100644
--- a/mobile.html
+++ b/mobile.html
@@ -94,7 +94,7 @@