2020-10-23 22:19:47 +08:00
|
|
|
const utils = require('utils')
|
|
|
|
|
const path = require('path')
|
|
|
|
|
|
2020-10-18 22:00:22 +08:00
|
|
|
// const harvester = require("./harvester");
|
|
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
|
run(creep) {
|
2020-10-24 15:24:24 +08:00
|
|
|
creep.say('transfer')
|
2020-10-23 22:19:47 +08:00
|
|
|
let working_target_id = creep.working_target_id
|
2020-10-24 15:24:24 +08:00
|
|
|
if(!working_target_id){
|
|
|
|
|
creep.say('Standby')
|
|
|
|
|
return
|
|
|
|
|
}
|
2020-10-23 22:19:47 +08:00
|
|
|
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;
|
2020-10-24 15:24:24 +08:00
|
|
|
if(!working_target.memory){
|
2020-10-24 21:43:36 +08:00
|
|
|
console.log(`check ${creep.name}, working target memory ${JSON.stringify(working_target)}`)
|
2020-10-24 15:24:24 +08:00
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
if (working_target.memory.role == 'harvester') {
|
2020-10-23 22:19:47 +08:00
|
|
|
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
|
2020-10-24 15:57:44 +08:00
|
|
|
creep.moveTo(working_target_pos,{visualizePathStyle: {stroke: '#ffffff'}});
|
2020-10-23 22:19:47 +08:00
|
|
|
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])
|
|
|
|
|
}
|
|
|
|
|
|
2020-10-18 22:00:22 +08:00
|
|
|
}
|
|
|
|
|
|
2020-10-23 22:19:47 +08:00
|
|
|
} else {
|
|
|
|
|
if (creep.transfer(Game.spawns['Spawn1'], RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) {
|
2020-10-24 15:57:44 +08:00
|
|
|
creep.moveTo(Game.spawns['Spawn1'],{visualizePathStyle: {stroke: '#ffffff'}});
|
2020-10-23 22:19:47 +08:00
|
|
|
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
|
2020-10-24 15:57:44 +08:00
|
|
|
creep.moveTo(working_target_pos,{visualizePathStyle: {stroke: '#ffffff'}});
|
2020-10-23 22:19:47 +08:00
|
|
|
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) {
|
2020-10-24 15:57:44 +08:00
|
|
|
creep.moveTo(Game.spawns['Spawn1'],{visualizePathStyle: {stroke: '#ffffff'}});
|
2020-10-23 22:19:47 +08:00
|
|
|
path.visualPath(creep.pos, Game.spawns['Spawn1'].pos);
|
|
|
|
|
}
|
2020-10-18 22:00:22 +08:00
|
|
|
}
|
|
|
|
|
}
|
2020-10-23 22:19:47 +08:00
|
|
|
|
2020-10-18 22:00:22 +08:00
|
|
|
}
|
2020-10-24 15:24:24 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|