screep/harvester.js

62 lines
1.7 KiB
JavaScript

const path = require('path')
module.exports = {
run(creep) {
let status = change_status()
switch (status) {
case 'harvester':
creep.say('hv')
harvester_job(creep)
break
case 'picker':
creep.say('pc')
picker_job(creep)
break
}
}
}
function harvester_job(creep) {
if (creep.carry.energy < creep.carryCapacity) {
let working_target_id = creep.working_target_id;
let working_target = Game.getObjectById(working_target_id);
if (creep.harvest(working_target) == ERR_NOT_IN_RANGE) {
creep.moveTo(working_target);
path.visualPath(creep.pos, working_target.pos);
}
} else {
if (creep.transfer(Game.spawns['Spawn1'], RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) {
creep.moveTo(Game.spawns['Spawn1']);
path.visualPath(creep.pos, Game.spawns['Spawn1'].pos);
}
}
}
function picker_job(creep) {
if (Game.spawns['Spawn1'].store.getFreeCapacity(RESOURCE_ENERGY) == 0) {
creep.say('SB')
return
}
let working_target_id = creep.working_target_id;
if (!working_target_id) {
creep.say('SB')
}
let working_target = Game.getObjectById(working_target_id);
let Re_code = creep.harvest(working_target);
if (Re_code == ERR_NOT_IN_RANGE) {
creep.moveTo(working_target);
} else {
if (OK == Re_code) {
creep.harvest(working_target);
creep.drop(RESOURCE_ENERGY);
}
}
}
function change_status() {
if (_(Game.creeps).filter({ memory: { role: 'transfer' } }).size() > 0) {
return 'picker'
} else {
return 'harvester'
}
}