var idler = require('idle.base'); var harvester = require('energy.harvest'); var get_targets = function(creep) { return creep.room.find(FIND_STRUCTURES, { filter: (structure) => { return (structure.structureType == STRUCTURE_EXTENSION || structure.structureType == STRUCTURE_SPAWN || structure.structureType == STRUCTURE_TOWER) && structure.store.getFreeCapacity(RESOURCE_ENERGY) > 0; } }); } var roleHarvester = { /** @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 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('Harvesting...'); } break; case "charge_structure": var targets = get_targets(creep); if(targets.length > 0) { if(creep.transfer(targets[0], RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) { creep.moveTo(targets[0], {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('Harvesting...'); } break; case "get_energy": harvester.do_collect(creep, "charge_structure", "Charging..."); break; default: creep.memory.state = "get_energy"; creep.say('Harvesting...'); } } }; module.exports = roleHarvester;