screep/builder.js

106 lines
3.9 KiB
JavaScript

/* eslint-disable no-console */
/* eslint-disable func-names */
/* eslint-disable no-undef */
/* eslint-disable camelcase */
const utils = require("./utils");
function upgradeController_job(creep) {
const { working_target_id } = creep;
const working_target = Game.getObjectById(working_target_id);
if (utils.distance(creep.pos, working_target.pos) > 1.5) {
creep.moveTo(working_target);
} else {
const all_dropped_resource = creep.room.find(FIND_DROPPED_RESOURCES);
const nearest_dropped_enengy = _.filter(all_dropped_resource, function (
energy
) {
return (
energy.resourceType === RESOURCE_ENERGY &&
utils.distance(energy.pos, creep.pos) < 1.5
);
});
if (nearest_dropped_enengy.length > 0) {
const Re_code_pickup = creep.pickup(nearest_dropped_enengy[0]);
if (OK === Re_code_pickup || ERR_FULL === Re_code_pickup) {
// TODO:需要适应不同的建筑
const Re_code = creep.upgradeController(working_target);
// eslint-disable-next-line no-empty
if (OK === Re_code) {
} else if (
Re_code !== ERR_NOT_ENOUGH_RESOURCES &&
Re_code !== ERR_NOT_IN_RANGE
) {
console.log(
`${creep.name} failed to upgrade room controller:err ${Re_code}`
);
}
} else {
console.log(
`${creep.name} failed to pickup: err ${Re_code_pickup}`
);
}
}
}
}
function build_construction(creep) {
const { working_target_id } = creep;
const working_target = Game.getObjectById(working_target_id);
if (utils.distance(creep.pos, working_target.pos) > 1.5) {
creep.moveTo(working_target);
} else {
const all_dropped_resource = creep.room.find(FIND_DROPPED_RESOURCES);
const nearest_dropped_enengy = _.filter(all_dropped_resource, function (
energy
) {
return (
energy.resourceType === RESOURCE_ENERGY &&
utils.distance(energy.pos, creep.pos) < 1.5
);
});
if (nearest_dropped_enengy.length > 0) {
const Re_code_pickup = creep.pickup(nearest_dropped_enengy[0]);
if (OK === Re_code_pickup || ERR_FULL === Re_code_pickup) {
// TODO:需要适应不同的建筑
const Re_code = creep.build(working_target);
// eslint-disable-next-line no-empty
if (OK === Re_code) {
} else if (
Re_code !== ERR_NOT_ENOUGH_RESOURCES &&
Re_code !== ERR_NOT_IN_RANGE
) {
console.log(`${creep.name} failed to build:err ${Re_code}`);
}
} else {
console.log(
`${creep.name} failed to pickup: err ${Re_code_pickup}`
);
}
}
}
}
module.exports = {
run(creep) {
if (creep.working_target_id) {
const { working_target_id } = creep;
const working_target = Game.getObjectById(working_target_id);
if (!working_target) {
// creep.working_target_id=undefined//目标已经完成,转为空闲状态
// _.each(Memery.WorkingTarget[creep.name].working_creep_names,creep_name=>Game.creeps[creep_name].working_target_id=undefined)
// delete Memery.WorkingTarget[creep.name]
return;
}
if (working_target.structureType === STRUCTURE_CONTROLLER) {
creep.say("ug");
upgradeController_job(creep);
return;
}
creep.say("bd");
build_construction(creep);
} else {
creep.say("SB");
}
},
};