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;