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() *...