Incremental Game in AngularJS
by vishalvasani
HTML
<body ng-app="incremental">
<div ng-controller="IncCtrl">
<h1>Poison level: {{percentagePoison.toFixed(2)}}%</h1>
<p>Poison levels increasing by {{poisonPerSecond().toFixed(3)}}% every second</p>
<hr>
<button ng-click="click()">Cleanse atmosphere {{percentPerClick()}}%</button>
<p>Cash: ${{currency.toFixed(2)}}</p>
<button ng-click="buyCleaner()" ng-disabled="currency < cleanerPrice()">Buy a cleaner (cost ${{cleanerPrice()}})</button>
<button ng-click="upgradeCleaners()" ng-disabled="currency < upgradePrice()">Upgrade cleaners (cost ${{upgradePrice()}})</button>
<p>{{cleaners}} cleaners, cleaning {{(cleaners * percentPerClick()).toFixed(3)}}% per second</p>
<hr>
</div>
</body>
JavaScript
angular.module('incremental',[])
.controller('IncCtrl',['$scope','$document','$interval',function($scope,$document,$interval) {
var lastUpdate = 0;
var cleanerBasePrice = 20;
var upgradeBasePrice = 150;
var basePercentPerClick = 0.01;
$scope.percentagePoison = 100;
$scope.percentPerClick = function(){
return basePercentPerClick * (1 + $scope.upgrades);
};
$scope.poisonPerSecond = function() {
return Math.max((99 - $scope.percentagePoison) / 10,0);
};
$scope.cleaners = 0;
$scope.upgrades = 0;
$scope.currency = 0;
$scope.click = function() {
$scope.percentagePoison -= $scope.percentPerClick();
$scope.currency+= (1 + $scope.upgrades);
};
$scope.cleanerPrice = function(){
return (cleanerBasePrice * Math.pow(1.2,$scope.cleaners)).toFixed();
};
$scope.upgradePrice = function() {
return (upgradeBasePrice * Math.pow(1.3,$scope.upgrades)).toFixed();
};
$scope.buyCleaner = function() {
if ($scope.currency >= $scope.cleanerPrice()) {
$scope.currency -= $scope.cleanerPrice();
$scope.cleaners++;
}
};
$scope.upgradeCleaners = function() {
if ($scope.currency >= $scope.upgradePrice()) {
$scope.currency -= $scope.upgradePrice();
$scope.upgrades++;
}
};
function update() {
var updateTime = new Date().getTime();
var timeDiff = (Math.min(1000, Math.max(updateTime - lastUpdate,0))) / 1000;
lastUpdate = updateTime;
$scope.percentagePoison += $scope.poisonPerSecond() * timeDiff;
$scope.percentagePoison -= $scope.cleaners * $scope.percentPerClick() *...