79 lines
2.7 KiB
JavaScript
79 lines
2.7 KiB
JavaScript
var idler = require('idle.base');
|
|
var collector = require('energy.storage');
|
|
|
|
// Finds the buildings that need energy
|
|
var find_targets = function(creep) {
|
|
var ref = creep.pos.findClosestByRange(FIND_STRUCTURES, {
|
|
filter: (structure) => {
|
|
return (structure.structureType == STRUCTURE_EXTENSION ||
|
|
structure.structureType == STRUCTURE_SPAWN ||
|
|
structure.structureType == STRUCTURE_TOWER) &&
|
|
structure.store.getFreeCapacity(RESOURCE_ENERGY) > 0;
|
|
}
|
|
});
|
|
|
|
if (!ref) {
|
|
ref = creep.pos.findClosestByRange(FIND_STRUCTURES, {
|
|
filter: (s) => {
|
|
return (s.structureType == STRUCTURE_STORAGE && s.store.getFreeCapacity(RESOURCE_ENERGY) > 0);
|
|
}
|
|
})
|
|
}
|
|
return ref;
|
|
}
|
|
|
|
var roleRefiller = {
|
|
|
|
/**
|
|
@param {Creep} creep
|
|
@param {int} behaviourLevel
|
|
**/
|
|
run: function(creep, behaviourLevel) {
|
|
switch (creep.memory.state) {
|
|
case "idle":
|
|
idler.do_idle(creep);
|
|
if (find_targets(creep)){
|
|
// If there are any buildings to charge, switch back to the charge state
|
|
idler.clear_idle(creep);
|
|
creep.memory.state = "charge_structure";
|
|
creep.say("Charging...");
|
|
}
|
|
if (creep.store.getFreeCapacity() > 0) {
|
|
// If we are not full with energy, switch to the get_energy state
|
|
idler.clear_idle(creep);
|
|
creep.memory.state = "get_energy";
|
|
creep.say('Reloading...');
|
|
}
|
|
break;
|
|
|
|
case "charge_structure":
|
|
var target = find_targets(creep);
|
|
if(target) {
|
|
if(creep.transfer(target, RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) {
|
|
creep.moveTo(target, {visualizePathStyle: {stroke: '#449900'}});
|
|
}
|
|
} else {
|
|
// Else, go idle
|
|
creep.memory.state = "idle";
|
|
creep.say('Idling...');
|
|
}
|
|
if (creep.store.getUsedCapacity() == 0) {
|
|
// If we are not full with energy, switch to the get_energy state
|
|
creep.memory.state = "get_energy";
|
|
creep.say('Reloading...');
|
|
}
|
|
break;
|
|
|
|
case "get_energy":
|
|
collector.do_collect(creep, "charge_structure", "Charging...");
|
|
break;
|
|
|
|
default:
|
|
creep.memory.state = "idle";
|
|
creep.say('Idling...');
|
|
}
|
|
}
|
|
};
|
|
|
|
module.exports = roleRefiller;
|