-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrole.harvester.js
43 lines (40 loc) · 1.3 KB
/
role.harvester.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
const roleUpgrader = require('role.upgrader');
const roleBuilder = require('role.builder');
const roleHarvester = {
/** @param {Creep} creep **/
run: function(creep) {
creep.identify();
creep.fullState();
if (creep.memory.target && creep.memory.full) {
let target = Game.getObjectById(creep.memory.target);
if (creep.transfer(target, RESOURCE_ENERGY) === ERR_NOT_IN_RANGE) {
creep.moveTo(target, {visualizePathStyle: {stroke: '#0000ff'}});
} else if (creep.transfer(target, RESOURCE_ENERGY) !== OK) {
creep.clearTargets();
}
} else if (!creep.memory.target && creep.memory.full) {
let targets = creep.room.find(FIND_MY_STRUCTURES, {
filter: (s) => {
return (
((s.structureType === STRUCTURE_SPAWN || s.structureType === STRUCTURE_EXTENSION || s.structureType === STRUCTURE_TOWER)
&& s.energy < s.energyCapacity)
);
}
});
//MOVE TO TARGET
if (targets.length) {
targets = assignPriority(targets, 'extension', 'spawn', 'tower');
targets = prioritizeType(targets);
let target = creep.findClosest(targets);
creep.memory.target = target.id;
creep.memory.targetName = target.structureType;
} else {
roleBuilder.run(creep);
}
}
if (!creep.memory.full) {
creep.getEnergy(true, true);
}
}
};
module.exports = roleHarvester;