build_scripts/generate_upgrades.js   A
last analyzed

Complexity

Total Complexity 17
Complexity/F 17

Size

Lines of Code 82
Function Count 1

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 16
wmc 17
c 1
b 0
f 0
nc 333
mnd 4
bc 17
fnc 1
dl 0
loc 82
rs 10
bpm 17
cpm 17
noi 0

1 Function

Rating   Name   Duplication   Size   Complexity  
A generate_upgrades.js ➔ clone 0 3 1
1
/* eslint-env node */
2
/*jslint node: true */
3
'use strict';
4
5
const jsonfile = require('jsonfile');
6
const template = require('lodash.template');
7
8
let upgrades = jsonfile.readFileSync('build/data/upgrades.json');
9
let exoticUpgrades = jsonfile.readFileSync('build/data/exotic_upgrades.json');
10
let darkUpgrades = jsonfile.readFileSync('build/data/dark_upgrades.json');
11
let generators = jsonfile.readFileSync('build/data/generators.json');
12
13
for(let key in upgrades){
14
  let upgrade = upgrades[key];
15
    if(!upgrade.prices){
16
      continue;
17
    }
18
  let nameTemplate = template(upgrade.name);
19
  let descriptionTemplate = template(upgrade.description);
20
  let tierTemplate = template(upgrade.tier);
21
  for(let generator in upgrade.prices){
22
    let prices = upgrade.prices[generator];
23
    if(prices.constructor !== Array){
24
      prices = [prices];
25
    }
26
    for(let i in prices){
27
      let price = prices[i];
28
      let generatorName = generators[generator].name;
29
      let generatedUpgrade = clone(upgrade);
30
      delete generatedUpgrade.prices;
31
      delete generatedUpgrade.tier;
32
      generatedUpgrade.price = price;
33
      generatedUpgrade.name = nameTemplate({'name': generatorName});
34
      generatedUpgrade.description = descriptionTemplate({'name': generatorName});
35
      generatedUpgrade.tiers = [tierTemplate({'id': generator})];
36
      generatedUpgrade.tags.push(tierTemplate({'id': generator}));
37
      for(let index in generatedUpgrade.function){
38
        generatedUpgrade.function[index] = template(generatedUpgrade.function[index])({'id': generator});
39
      }
40
      for(let index in generatedUpgrade.deps){
41
        generatedUpgrade.deps[index] = template(generatedUpgrade.deps[index])({'id': generator});
42
      }
43
      for(let index in generatedUpgrade.exotic_deps){
44
        generatedUpgrade.exotic_deps[index] = template(generatedUpgrade.exotic_deps[index])({'id': generator});
45
      }
46
      let id = key+'-'+generator+'-'+i;
47
      upgrades[id] = generatedUpgrade;
48
      if(i > 0){
49
        upgrades[id].deps.push(key+'-'+generator+'-'+(i-1));
50
       }
51
    }
52
  }
53
  delete upgrades[key];
54
}
55
56
function clone(a) {
57
   return JSON.parse(JSON.stringify(a));
58
}
59
60
for(let key in upgrades){
61
  let upgrade = upgrades[key];
62
  for(let up of upgrade.deps){
63
    if(!upgrades[up]){
64
      throw new Error('Dependency doesn\'t exist: '+ up + ' for '+ key);
65
    }
66
  }
67
  for(let up of upgrade.exotic_deps){
68
    if(!exoticUpgrades[up]){
69
      throw new Error('Exotic dependency doesn\'t exist: '+ up + ' for '+ key);
70
    }
71
  }
72
  for(let up of upgrade.dark_deps){
73
    if(!darkUpgrades[up]){
74
      throw new Error('Dark dependency doesn\'t exist: '+ up + ' for '+ key);
75
    }
76
  }
77
}
78
79
jsonfile.writeFileSync('build/data/upgrades.json', upgrades, {
80
  spaces: 2
81
});
82
jsonfile.writeFileSync('build/data/generators.json', generators, {
83
  spaces: 2
84
});
85