Completed
Push — master ( 47ce1a...1dc86b )
by Andres
32s
created

src/scripts/component/upgrades.js   A

Complexity

Total Complexity 11
Complexity/F 2.2

Size

Lines of Code 62
Function Count 5

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 0
wmc 11
c 1
b 0
f 0
nc 1
mnd 4
bc 10
fnc 5
dl 0
loc 62
rs 10
bpm 2
cpm 2.2
noi 1

1 Function

Rating   Name   Duplication   Size   Complexity  
A upgrades.js ➔ upgrades 0 54 1
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
20
  // tries to buy all the upgrades it can, starting from the cheapest
21
  ct.buyAll = function (slot) {
22
    let currency = data.elements[slot.element].main;
23
    let cheapest;
24
    let cheapestPrice;
25
    do{
26
      cheapest = null;
27
      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...
28
      for(let up of ct.visibleUpgrades(slot, data.upgrades)){
29
        let price = data.upgrades[up].price;
30
        if(!slot.upgrades[up] &&
31
          price <= state.player.resources[currency].number){
32
          if(price < cheapestPrice){
33
            cheapest = up;
34
            cheapestPrice = price;
35
          }
36
        }
37
      }
38
      if(cheapest){
39
        upgrade.buyUpgrade(state.player,
40
          slot.upgrades,
41
          data.upgrades[cheapest],
42
          cheapest,
43
          cheapestPrice,
44
          currency);
45
      }
46
    }while(cheapest);
47
  };
48
49
  ct.buyUpgrade = function (name, slot) {
50
    let price = data.upgrades[name].price;
51
    let currency = data.elements[slot.element].main;
52
    upgrade.buyUpgrade(state.player,
53
      slot.upgrades,
54
      data.upgrades[name],
55
      name,
56
      price,
57
      currency);
58
  };
59
60
  ct.visibleUpgrades = function(slot) {
61
    return visibility.visible(data.upgrades, isBasicUpgradeVisible, slot);
62
  };
63
64
  function isBasicUpgradeVisible(name, slot) {
65
    let isVisible = visibility.isUpgradeVisible(name, slot, data.upgrades[name]);
66
    return isVisible && (!state.hideBought || !slot.upgrades[name]);
67
  };
68
}
69