-
Notifications
You must be signed in to change notification settings - Fork 2
/
util.js
72 lines (65 loc) · 2.09 KB
/
util.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
var util = {};
util.gather = function(mon, creep, returnTo, returnSay) {
if (creep.memory.gatherFrom) {
var gatherFrom = Game.getObjectById(creep.memory.gatherFrom);
creep.moveTo(gatherFrom);
if (!gatherFrom) {
creep.memory.gatherFrom = null;
}
else if (gatherFrom.transferEnergy) {
if ((gatherFrom.store && gatherFrom.store.energy == 0) || gatherFrom.energy == 0) {
creep.memory.gatherFrom = null;
}
else {
gatherFrom.transferEnergy(creep);
}
}
else if (gatherFrom instanceof Energy) {
creep.pickup(gatherFrom);
}
else {
if (gatherFrom.energy < 100) {
creep.memory.gatherFrom = null;
}
else {
creep.harvest(gatherFrom);
}
}
if (creep.carry.energy == creep.carryCapacity) {
creep.say(returnSay);
creep.memory.gatherFrom = null;
creep.memory.state = returnTo;
}
}
else {
var droppedEnergy = mon.findDroppedEnergy(creep.room).filter(function(e) {
return util.crowDistance(creep, e) < 10;
});
var storages = mon.findStorages(creep.room);
if (droppedEnergy.length) {
creep.memory.gatherFrom = droppedEnergy[0].id;
}
else if (storages.length) {
creep.memory.gatherFrom = storages[0].id;
}
else if (Game.spawns.Home.energy >= creep.carryCapacity / 2) {
creep.memory.gatherFrom = Game.spawns.Home.id;
}
else {
var sources = mon.findSources(creep.room).filter(function(s) {
return s.energy > 100;
});
if (sources.length) {
creep.memory.gatherFrom = sources[0].id;
}
}
}
}
util.crowDistance = function(pa, pb) {
if (pa.pos) pa = pa.pos;
if (pb.pos) pb = pb.pos;
var a = Math.abs(pa.x - pb.x);
var b = Math.abs(pa.y - pb.y);
return Math.max(a, b);
};
module.exports = util;