69 lines
2.3 KiB
JavaScript
69 lines
2.3 KiB
JavaScript
var idler = require('idle.base');
|
|
var harvester = require('energy.harvest');
|
|
var collector = require('energy.storage');
|
|
|
|
var get_targets = function(creep) {
|
|
return creep.room.find(FIND_CONSTRUCTION_SITES);
|
|
}
|
|
|
|
var roleBuilder = {
|
|
|
|
/**
|
|
@param {Creep} creep
|
|
@param {int} behaviourLevel
|
|
**/
|
|
run: function(creep, behaviourLevel) {
|
|
|
|
switch (creep.memory.state) {
|
|
case "idle":
|
|
idler.do_idle(creep);
|
|
if (get_targets(creep).length > 0){
|
|
// If there are any buildings to construct, switch back to the building state
|
|
idler.clear_idle(creep);
|
|
creep.memory.state = "build_structure";
|
|
creep.say("building");
|
|
}
|
|
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 "build_structure":
|
|
var targets = get_targets(creep);
|
|
if(targets.length > 0) {
|
|
if(creep.build(targets[0]) == ERR_NOT_IN_RANGE) {
|
|
creep.moveTo(targets[0], {visualizePathStyle: {stroke: '#ffffff'}});
|
|
}
|
|
} else {
|
|
// Else, go idle
|
|
creep.memory.state = "idle";
|
|
creep.say('idling');
|
|
}
|
|
if (creep.store.getUsedCapacity() == 0) {
|
|
// If we have no energy, switch to the get_energy state
|
|
creep.memory.state = "get_energy";
|
|
creep.say('Reloading...');
|
|
}
|
|
break;
|
|
|
|
case "get_energy":
|
|
var energy_source;
|
|
if(behaviourLevel >= 2) {
|
|
energy_source = collector;
|
|
} else {
|
|
energy_source = harvester;
|
|
}
|
|
energy_source.do_collect(creep, "build_structure", "building");
|
|
break;
|
|
|
|
default:
|
|
creep.memory.state = "get_energy";
|
|
creep.say("Reloading...");
|
|
}
|
|
}
|
|
};
|
|
|
|
module.exports = roleBuilder; |