-
Notifications
You must be signed in to change notification settings - Fork 0
/
roles.squaddie.js
104 lines (88 loc) · 3.6 KB
/
roles.squaddie.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
require('prototypes')();
let squads = require('squads.tactics');
let utilities = require('utilities');
const profiler = require('screeps-profiler');
let roleSquaddie = {
spawnType: 'global',
/** @param {Creep} creep **/
run: profiler.registerFN(function(creep) {
// Squaddies are operated by the campaign module
}, 'run:squaddie'),
determineSpawnParams: function(room) {
let squad = '';
let body = [];
let squadIdx = -1;
let boosts = [];
let type = '';
for (var name in Memory.empire.campaigns) {
if (!Memory.empire.campaigns[name].squad) { continue; }
if (Memory.empire.campaigns[name].status !== 'forming') { continue; }
for (var i = 0; i < Memory.empire.campaigns[name].squad.length; i++) {
let bodyCost = utilities.bodyCost(Memory.empire.campaigns[name].squad[i].body);
if (!Memory.empire.campaigns[name].squad[i].name
&& room.energyCapacityAvailable >= bodyCost
&& (!Memory.empire.campaigns[name].squad[i].boosts
|| (Memory.empire.campaigns[name].squad[i].boosts.length > 0
&& room.memory.science && room.memory.science.boosts
&& _.reduce(Memory.empire.campaigns[name].squad[i].boosts, function(memo,bodypart) {
return (memo && room.memory && room.memory.science && room.memory.science.boosts && room.memory.science.boosts[bodypart]) ? true : false;
}, true))) ) {
squad = name;
body = Memory.empire.campaigns[name].squad[i].body;
type = Memory.empire.campaigns[name].squad[i].type;
squadIdx = i;
boosts = Memory.empire.campaigns[name].squad[i].boosts;
break;
}
}
}
if (body.length <= 0) {
body = this.determineBodyParts(room);
}
// wow, so javascript, much closure!
function saveCreepName(squad, idx) {
let run = function(name) {
console.log(name + ' spawned to squad ' + squad + ' in squad position: ' + idx)
Memory.empire.campaigns[squad].squad[idx].name = name;
}
return run;
}
let callback = ((squadIdx > -1) ? saveCreepName(squad, squadIdx) : null);
let ret = {
memory: { origin: room.name, role: 'squaddie', campaign: squad, type: type },
body: body,
spawnCallback: callback
}
if (boosts && boosts.length > 0) {
ret.memory.boosts = boosts;
}
return ret;
},
spawnCondition: function(room) {
let quota = 0;
for (var name in Memory.empire.campaigns) {
if (!Memory.empire.campaigns[name].squad) { continue; }
if (Memory.empire.campaigns[name].status !== 'forming') { continue; }
if (Memory.empire.campaigns[name].squad) {
for (var i = 0; i < Memory.empire.campaigns[name].squad.length; i++) {
let bodyCost = utilities.bodyCost(Memory.empire.campaigns[name].squad[i].body);
if (!Memory.empire.campaigns[name].squad[i].name
&& room.energyCapacityAvailable >= bodyCost
&& (!Memory.empire.campaigns[name].squad[i].boosts
|| (Memory.empire.campaigns[name].squad[i].boosts.length > 0
&& room.memory.science && room.memory.science.boosts
&& _.reduce(Memory.empire.campaigns[name].squad[i].boosts, function(memo,bodypart) {
return (memo && room.memory && room.memory.science && room.memory.science.boosts && room.memory.science.boosts[bodypart]) ? true : false;
}, true))) ) {
quota++;
}
}
}
}
return quota;
},
determinePriority: function(room, rolesInRoom) {
return 5;
}
};
module.exports = roleSquaddie;