修复bug

This commit is contained in:
facat 2020-10-26 22:03:25 +08:00
parent 98b97cbca6
commit aeecf8c287
3 changed files with 22 additions and 28 deletions

40
main.js
View File

@ -37,7 +37,8 @@ function cleanInvalidMemoryCreep() {
} }
function cleanTargetMemory() { function cleanTargetMemory() {
_.each(Object.keys(Memory.WorkingTarget), function (target) { _.each(Object.keys(Memory.WorkingTarget), function (target_key) {
const target = Memory.WorkingTarget[target_key];
if (!Game.getObjectById(target.id)) { if (!Game.getObjectById(target.id)) {
console.log( console.log(
`target ${target.id} is invalid, removed from Memory.WorkingTarget.Set their creep to idle` `target ${target.id} is invalid, removed from Memory.WorkingTarget.Set their creep to idle`
@ -45,7 +46,7 @@ function cleanTargetMemory() {
_.each(target.working_creep_names, (creep_name) => { _.each(target.working_creep_names, (creep_name) => {
Game.creeps[creep_name].working_target_id = undefined; Game.creeps[creep_name].working_target_id = undefined;
}); });
delete Memory.WorkingTarget[i]; delete Memory.WorkingTarget[target_key];
} }
}); });
} }
@ -162,11 +163,13 @@ function assign_transfer_to_builder() {
(memory) => (memory) =>
memory.working_creep_names.length === 0 && memory.cate === "builder" memory.working_creep_names.length === 0 && memory.cate === "builder"
); // 需要安排creep的builder ); // 需要安排creep的builder
if (assign_transfer(builder_needs_creep_memory) === -1) { if (builder_needs_creep_memory.length > 0) {
console.log( if (assign_transfer(builder_needs_creep_memory) === -1) {
`no enough transfer to builder. Try to create a new one autmatically` console.log(
); `no enough transfer to builder. Try to create a new one autmatically`
createBuilderCreep(); );
createBuilderCreep();
}
} }
} }
@ -204,21 +207,14 @@ function assign_builder_to_construction(construction_id) {
); );
createBuilderCreep(); createBuilderCreep();
} }
// //开始给建造constrction的每个creep安排transfer
// _.each(Memory.WorkingTarget[constuction_key].working_creep_names,function(builder_creep_name){
// if(!Memory.WorkingTarget[builder_creep_name]){
// Memory.WorkingTarget[builder_creep_name]={id:Game.creeps[builder_creep_name].id,working_creep_names: [], cate: 'builder'}
// }
// })
} }
function assign_harvester_to_enery_source() { function assign_harvester_to_energy_source() {
const sources = Game.spawns.Spawn1.room.find(FIND_SOURCES_ACTIVE); const sources = Game.spawns.Spawn1.room.find(FIND_SOURCES_ACTIVE);
const all_memory = Memory.WorkingTarget; _.each(Object.keys(sources), function (source_key) {
_.each(Object.keys(sources), function (source) { const { id } = sources[source_key];
const { id } = source;
const key = `Energy_${id}`; const key = `Energy_${id}`;
if (!Memory.WorkingTarget[key]) { if (!_.find(Memory.WorkingTarget, (target) => target.id === id)) {
Memory.WorkingTarget[key] = { Memory.WorkingTarget[key] = {
id, id,
working_creep_names: [], working_creep_names: [],
@ -228,7 +224,9 @@ function assign_harvester_to_enery_source() {
}); });
// 向Memory.WorkingTarget里添加所有的Energy Source // 向Memory.WorkingTarget里添加所有的Energy Source
// 寻找Energy Source的Memory // 寻找Energy Source的Memory
const energy_memory = _.filter(all_memory, { cate: "ENERGY_SOURCE" }); const energy_memory = _.filter(Memory.WorkingTarget, {
cate: "ENERGY_SOURCE",
});
// 寻找creep为0的energy source // 寻找creep为0的energy source
const energy_source_need_creep_array = _.filter( const energy_source_need_creep_array = _.filter(
energy_memory, energy_memory,
@ -344,14 +342,14 @@ function createTransferCreep() {
} }
} }
module.exports.loop = function _() { module.exports.loop = function () {
extra(); extra();
init.init(); init.init();
mount.mount(); mount.mount();
cleanCreeps(); cleanCreeps();
cleanInvalidMemoryCreep(); cleanInvalidMemoryCreep();
cleanTargetMemory(); cleanTargetMemory();
assign_harvester_to_enery_source(); assign_harvester_to_energy_source();
assign_transfer_to_harvester(); assign_transfer_to_harvester();
assign_builder_to_controller(); assign_builder_to_controller();
assign_transfer_to_builder(); assign_transfer_to_builder();

View File

@ -17,8 +17,7 @@ module.exports = {
const working_target = Game.getObjectById(working_target_id); const working_target = Game.getObjectById(working_target_id);
// TODO:处理transfer的对象消失的情况 // TODO:处理transfer的对象消失的情况
if (!working_target) { if (!working_target) {
// _.each(Memery.WorkingTarget[creep.name].working_creep_names,creep_name=>Game.creeps[creep_name].working_target_id=undefined) Game.creeps[creep.name].working_target_id = undefined;
// delete Memery.WorkingTarget[creep.name]
return; return;
} }
const working_target_pos = working_target.pos; const working_target_pos = working_target.pos;
@ -33,10 +32,6 @@ module.exports = {
} }
if (working_target.memory.role === "harvester") { if (working_target.memory.role === "harvester") {
if (creep.store.energy < creep.store.getCapacity()) { 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) { if (utils.distance(working_target_pos, my_pos) > 1.5) {
// 在附近就是1或者1.414 // 在附近就是1或者1.414
creep.moveTo(working_target_pos, { creep.moveTo(working_target_pos, {
@ -45,6 +40,7 @@ module.exports = {
path.visualPath(creep.pos, working_target_pos); path.visualPath(creep.pos, working_target_pos);
} else { } else {
// find dropped source // find dropped source
const found = creep.room.lookForAt( const found = creep.room.lookForAt(
LOOK_ENERGY, LOOK_ENERGY,
working_target_pos working_target_pos

View File

@ -16,7 +16,7 @@ module.exports = {
}, },
distance(pos1, pos2) { distance(pos1, pos2) {
if (pos1.roomName === pos2.roomName) { if (pos1.roomName === pos2.roomName) {
return Math.sqrt((pos1.x - pos2.x, 2) ** 2); return Math.sqrt((pos1.x - pos2.x) ** 2 + (pos1.y - pos2.y) ** 2);
} }
return -1; // 如果不在一个房间内,就返回负数。 return -1; // 如果不在一个房间内,就返回负数。
}, },