修复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() {
_.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();

View File

@ -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

View File

@ -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; // 如果不在一个房间内,就返回负数。
},