Completed
Push — master ( 01c562...b22fbb )
by Andres
29s
created

upgrades.js ➔ ... ➔ ???   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
c 0
b 0
f 0
nc 2
dl 0
loc 1
rs 10
nop 2
1
/**
2
 upgrades
3
 Component that handles upgrades.
4
5
 @namespace Components
6
 */
7
'use strict';
8
9
angular.module('game').component('upgrades', {
10
  templateUrl: 'views/upgrades.html',
11
  controller: ['state', 'visibility', 'upgrade', 'data', upgrades],
12
  controllerAs: 'ct'
13
});
14
15
function upgrades(state, visibility, upgrade, data) {
16
  let ct = this;
17
  ct.state = state;
18
  ct.data = data;
19
  let sortFunc = [
20
    (a,b) => data.upgrades[a].name < data.upgrades[b].name ? -1 : 1,
21
    (a,b) => data.upgrades[a].price - data.upgrades[b].price
22
  ]
23
24
  // tries to buy all the upgrades it can, starting from the cheapest
25
  ct.buyAll = function (slot) {
26
    let currency = data.elements[slot.element].main;
27
    let cheapest;
28
    let cheapestPrice;
29
    do{
30
      cheapest = null;
31
      cheapestPrice = Infinity;
0 ignored issues
show
Comprehensibility Best Practice introduced by
You seem to be aliasing the built-in name Infinity as cheapestPrice. This makes your code very difficult to follow, consider using the built-in name directly.
Loading history...
32
      for(let up of ct.visibleUpgrades(slot, data.upgrades)){
33
        let price = data.upgrades[up].price;
34
        if(!slot.upgrades[up] &&
35
          price <= state.player.resources[currency].number){
36
          if(price < cheapestPrice){
37
            cheapest = up;
38
            cheapestPrice = price;
39
          }
40
        }
41
      }
42
      if(cheapest){
43
        upgrade.buyUpgrade(state.player,
44
          slot.upgrades,
45
          data.upgrades[cheapest],
46
          cheapest,
47
          cheapestPrice,
48
          currency);
49
      }
50
    }while(cheapest);
51
  };
52
53
  ct.buyUpgrade = function (name, slot) {
54
    let price = data.upgrades[name].price;
55
    let currency = data.elements[slot.element].main;
56
    upgrade.buyUpgrade(state.player,
57
      slot.upgrades,
58
      data.upgrades[name],
59
      name,
60
      price,
61
      currency);
62
  };
63
64
  ct.visibleUpgrades = function(slot) {
65
    return visibility.visible(data.upgrades, isBasicUpgradeVisible, slot, sortFunc[state.sort]);
66
  };
67
68
  function isBasicUpgradeVisible(name, slot) {
69
    let isVisible = visibility.isUpgradeVisible(name, slot, data.upgrades[name]);
70
    return isVisible && (!state.hideBought || !slot.upgrades[name]);
71
  }
72
}
73