From aeecf8c287c25e8a782f555e75796ec80fb67b53 Mon Sep 17 00:00:00 2001 From: facat Date: Mon, 26 Oct 2020 22:03:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.js | 40 +++++++++++++++++++--------------------- transfer.js | 8 ++------ utils.js | 2 +- 3 files changed, 22 insertions(+), 28 deletions(-) diff --git a/main.js b/main.js index 3be527d..8fc4b77 100644 --- a/main.js +++ b/main.js @@ -37,7 +37,8 @@ function cleanInvalidMemoryCreep() { } 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)) { console.log( `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) => { 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.working_creep_names.length === 0 && memory.cate === "builder" ); // 需要安排creep的builder - if (assign_transfer(builder_needs_creep_memory) === -1) { - console.log( - `no enough transfer to builder. Try to create a new one autmatically` - ); - createBuilderCreep(); + if (builder_needs_creep_memory.length > 0) { + if (assign_transfer(builder_needs_creep_memory) === -1) { + console.log( + `no enough transfer to builder. Try to create a new one autmatically` + ); + createBuilderCreep(); + } } } @@ -204,21 +207,14 @@ function assign_builder_to_construction(construction_id) { ); 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 all_memory = Memory.WorkingTarget; - _.each(Object.keys(sources), function (source) { - const { id } = source; + _.each(Object.keys(sources), function (source_key) { + const { id } = sources[source_key]; const key = `Energy_${id}`; - if (!Memory.WorkingTarget[key]) { + if (!_.find(Memory.WorkingTarget, (target) => target.id === id)) { Memory.WorkingTarget[key] = { id, working_creep_names: [], @@ -228,7 +224,9 @@ function assign_harvester_to_enery_source() { }); // 向Memory.WorkingTarget里添加所有的Energy Source // 寻找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 const energy_source_need_creep_array = _.filter( energy_memory, @@ -344,14 +342,14 @@ function createTransferCreep() { } } -module.exports.loop = function _() { +module.exports.loop = function () { extra(); init.init(); mount.mount(); cleanCreeps(); cleanInvalidMemoryCreep(); cleanTargetMemory(); - assign_harvester_to_enery_source(); + assign_harvester_to_energy_source(); assign_transfer_to_harvester(); assign_builder_to_controller(); assign_transfer_to_builder(); diff --git a/transfer.js b/transfer.js index 3f0cfb4..e226906 100644 --- a/transfer.js +++ b/transfer.js @@ -17,8 +17,7 @@ module.exports = { const working_target = Game.getObjectById(working_target_id); // TODO:处理transfer的对象消失的情况 if (!working_target) { - // _.each(Memery.WorkingTarget[creep.name].working_creep_names,creep_name=>Game.creeps[creep_name].working_target_id=undefined) - // delete Memery.WorkingTarget[creep.name] + Game.creeps[creep.name].working_target_id = undefined; return; } const working_target_pos = working_target.pos; @@ -33,10 +32,6 @@ module.exports = { } if (working_target.memory.role === "harvester") { 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, { @@ -45,6 +40,7 @@ module.exports = { path.visualPath(creep.pos, working_target_pos); } else { // find dropped source + const found = creep.room.lookForAt( LOOK_ENERGY, working_target_pos diff --git a/utils.js b/utils.js index 131dbea..49033bd 100644 --- a/utils.js +++ b/utils.js @@ -16,7 +16,7 @@ module.exports = { }, distance(pos1, pos2) { 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; // 如果不在一个房间内,就返回负数。 },