mirror of
https://github.com/wassname/cardsforscience.git
synced 2026-06-27 18:23:07 +08:00
Track the gameplay time of achievements
This commit is contained in:
+2
-2
@@ -203,10 +203,10 @@
|
||||
<div class="modal-body">
|
||||
<p class="text-center"><strong>Progress</strong> <span class="label label-info">{{ progress() }} / {{ achievements.length }}</span></p>
|
||||
<ul class="list-group">
|
||||
<li class="list-group-item" ng-repeat="a in achievements | orderBy:'state.dateAchieved' | reverse" ng-show="a.isAchieved()">
|
||||
<li class="list-group-item" ng-repeat="a in achievements | orderBy:'state.timeAchieved' | reverse" ng-show="a.isAchieved()">
|
||||
<i class="fa {{ a.icon }}"></i>
|
||||
{{ a.description }}
|
||||
<span class="badge">{{ a.state.dateAchieved | date }}</span>
|
||||
<span class="badge">{{ a.state.timeAchieved | niceTime }}</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -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(
|
||||
|
||||
+2
-5
@@ -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];
|
||||
|
||||
+17
-13
@@ -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 {
|
||||
|
||||
@@ -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: ''
|
||||
};
|
||||
|
||||
+1
-1
@@ -94,7 +94,7 @@
|
||||
<div class="tab-pane" id="achievements" ng-controller="AchievementsController as ac">
|
||||
<p class="text-center"><strong>Progress</strong> <span class="label label-info">{{ ac.achievements.length }} / {{ ac.achievementsAll.length }}</span></p>
|
||||
<ul class="list-group">
|
||||
<li class="list-group-item" ng-repeat="a in achievements | orderBy:'state.dateAchieved' | reverse">
|
||||
<li class="list-group-item" ng-repeat="a in achievements | orderBy:'state.timeAchieved' | reverse">
|
||||
<span class="badge">{{ a.time }}</span>
|
||||
<span class="glyphicon {{ a.icon }}"></span>
|
||||
{{ a.description }}
|
||||
|
||||
Reference in New Issue
Block a user