screep/transfer.js

60 lines
2.3 KiB
JavaScript

const utils = require('utils')
const path = require('path')
// const harvester = require("./harvester");
module.exports = {
run(creep) {
let working_target_id = creep.working_target_id
let working_target = Game.getObjectById(working_target_id)
//TODO:处理transfer的对象消失的情况
if(!working_target){
creep.working_target_id=null
return
}
let working_target_pos = working_target.pos
let my_pos = creep.pos;
if (working_target.memory.role == 'picker') {
if (creep.store.energy < creep.store.getCapacity()) {
if (!working_target) {
// console.log(`${creep.name} working target vanished. Turn to unassigned.`)
return
}
if (utils.distance(working_target_pos, my_pos) > 1.5) {//在附近就是1或者1.414
creep.moveTo(working_target_pos);
path.visualPath(creep.pos, working_target_pos);
} else {
//find dropped source
let found = creep.room.lookForAt(LOOK_ENERGY, working_target_pos);
if (found.length > 0) {
creep.pickup(found[0])
}
}
} 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);
}
}
}
if (working_target.memory.role == 'builder') {
if (creep.store.energy > 0) {
if (utils.distance(working_target_pos, my_pos) > 1.5) {//在附近就是1或者1.414
creep.moveTo(working_target_pos);
path.visualPath(creep.pos, working_target_pos);
} else {
creep.drop(RESOURCE_ENERGY)
}
} else {
if (creep.withdraw(Game.spawns['Spawn1'], RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) {
creep.moveTo(Game.spawns['Spawn1']);
path.visualPath(creep.pos, Game.spawns['Spawn1'].pos);
}
}
}
}
}