screep/harvester.js

62 lines
1.7 KiB
JavaScript
Raw Normal View History

2020-10-24 15:24:24 +08:00
const path = require('path')
2020-10-18 22:00:22 +08:00
module.exports = {
run(creep) {
2020-10-24 15:24:24 +08:00
let status = change_status()
switch (status) {
case 'harvester':
creep.say('hv')
2020-10-24 15:24:24 +08:00
harvester_job(creep)
break
case 'picker':
creep.say('pc')
2020-10-24 15:24:24 +08:00
picker_job(creep)
break
2020-10-18 22:00:22 +08:00
}
}
2020-10-24 15:24:24 +08:00
}
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')
2020-10-24 15:24:24 +08:00
return
}
let working_target_id = creep.working_target_id;
if (!working_target_id) {
creep.say('SB')
2020-10-24 15:24:24 +08:00
}
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'
}
2020-10-18 22:00:22 +08:00
}