1.修复了一个bug。2.基本正常运转。

This commit is contained in:
facat 2020-10-23 22:19:47 +08:00
parent 9328eee122
commit 8ee9e44e1e
4 changed files with 107 additions and 53 deletions

View File

@ -1,15 +1,30 @@
const utils=require('utils')
const utils = require('utils')
module.exports = {
run(creep) {
if (creep.working_target_id) {
let working_target_id = creep.working_target_id;
let working_target = Game.getObjectById(working_target_id);
if(utils.distance(creep.pos,working_target.pos)>1.5){
if (utils.distance(creep.pos, working_target.pos) > 1.5) {
creep.moveTo(working_target);
}else{
creep.pickup(RESOURCE_ENERGY);
//TODO:需要适应不同的建筑
creep.upgradeController(working_target);
} else {
// let found = creep.room.lookForAt(LOOK_ENERGY, working_target_pos);
let all_dropped_resource = creep.room.find(FIND_DROPPED_RESOURCES)
let 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) {
let Re_code_pickup = creep.pickup(nearest_dropped_enengy[0]);
if (OK == Re_code_pickup) {
//TODO:需要适应不同的建筑
let Re_code = creep.upgradeController(working_target)
if (OK == Re_code) {
// console.log(`${creep.name} upgrade room controller`)
} else {
console.log(`${creep.name} failed to upgrade room controller:err ${Re_code}`)
}
}
}
}
}
}

52
main.js
View File

@ -9,7 +9,7 @@ module.exports.loop = function () {
assign_harvester_picker_to_enery_source();
assign_transfer_to_picker()
assign_builder_to_controller();
// assign_controller();
assign_transfer_to_builder();
let isSpawning = false
let energy_source_number = _.filter(Game.spawns['Spawn1'].room.find(FIND_SOURCES_ACTIVE)).length;
let harvester_number = _(Game.creeps).filter({ memory: { role: 'harvester' } }).size();
@ -57,6 +57,11 @@ function assign_transfer_to_picker() {
_.each(picker_has_no_creep, function (picker) {
Memory.WorkingTarget.push({ id: picker.id, working_creep_names: [], cate: 'picker' })//在Memory.WorkingTarget加入需要creep的Picker
})
//先移除已经失效的creep
let picker_mem=_.filter(Memory.WorkingTarget,{cate:'picker'})
_.each(picker_mem, function (m) {
_.remove(m.working_creep_names, creep_name => !Game.creeps[creep_name])//如果一个creep已经不存在了就从列表中移除
})
let picker_memories = _.filter(Memory.WorkingTarget, picker_memory => picker_memory.working_creep_names.length == 0)
if (picker_memories.length > 0) {
let available_transfer = _.filter(Game.creeps, creep => !creep.working_target_id && (creep.memory.role == 'transfer'))
@ -68,8 +73,6 @@ function assign_transfer_to_picker() {
assign_creeps(opt)
}
}
}
function assign_task() {
@ -80,24 +83,31 @@ function assign_task() {
}
function assign_controller() {
let builder_creep_array = _.filter(Game.creeps, { memory: { role: 'builder' } })
if (builder_creep_array.length == 0) {
return;
function assign_transfer_to_builder() {
//判断有多少个picker的transfer为0
let all_builder = _.filter(Game.creeps, { memory: { role: 'builder' } })
let builder_has_no_creep = _.filter(all_builder, function (builder) {
return !_.find(Memory.WorkingTarget, target => target.id == builder.id)//Memory.WorkingTarget中没有这个builder目标
})
_.each(builder_has_no_creep, function (builder) {
Memory.WorkingTarget.push({ id: builder.id, working_creep_names: [], cate: 'builder' })//在Memory.WorkingTarget加入需要creep的builder
})
//先移除已经失效的creep
let bulder_mem=_.filter(Memory.WorkingTarget,{cate:'builder'})
_.each(bulder_mem, function (m) {
_.remove(m.working_creep_names, creep_name => !Game.creeps[creep_name])//如果一个creep已经不存在了就从列表中移除
})
let builder_memories = _.filter(Memory.WorkingTarget, builder_memory => builder_memory.working_creep_names.length == 0)
if (builder_memories.length > 0) {
let available_transfer = _.filter(Game.creeps, creep => !creep.working_target_id && (creep.memory.role == 'transfer'))
if (available_transfer.length > 0) {//一次只安排一个creep
let opt = {
memory: builder_memories,
creep_name_to_assgin_array: [available_transfer[0].name]
}
assign_creeps(opt)
}
}
let builder_creep = builder_creep_array[0]
//TODO: 不能用0来判断否则经常不会进入判断
if (Game.spawns['Spawn1'].room.controller && Memory.WorkingTarget && Memory.WorkingTarget.Creep && Memory.WorkingTarget.Creep.length == 0) {
Memory.WorkingTarget.Creep.push({ 'id': builder_creep.id, 'working_creep_names': [] })
}
if (Memory.WorkingTarget.Creep.length > 0) {
let opt = {}
opt.creep_name_to_assgin_array = [builder_creep.name]
opt.memory = Memory.WorkingTarget.Creep
assign_creeps(opt)
}
}
function removeUnusedMemoryItem(memory) {
@ -243,7 +253,7 @@ function createBuilderCreep() {
//create new creep
let new_creep_name = "AUTO_CREATE_Builder_" + util.uuid();
let Re_code;
Re_code = Game.spawns['Spawn1'].createCreep([MOVE, WORK, WORK], new_creep_name)
Re_code = Game.spawns['Spawn1'].createCreep([MOVE, CARRY, WORK], new_creep_name)
if (Re_code == new_creep_name) {
Game.creeps[new_creep_name].memory.role = 'builder';
console.log('Create new creep name ' + new_creep_name);

View File

@ -1,6 +1,10 @@
//只收集,不运输
module.exports = {
run(creep) {
if(Game.spawns['Spawn1'].store.getFreeCapacity(RESOURCE_ENERGY)==0){
creep.say('Standby.')
return
}
let working_target_id = creep.working_target_id;
let working_target = Game.getObjectById(working_target_id);
let Re_code = creep.harvest(working_target);

View File

@ -1,35 +1,60 @@
const utils=require('utils')
const path=require('path')
const utils = require('utils')
const path = require('path')
// const harvester = require("./harvester");
module.exports = {
run(creep) {
if (creep.carry.energy < creep.carryCapacity) {
let working_target_id=creep.working_target_id
let working_target=Game.getObjectById(working_target_id)
if(!working_target){
// console.log(`${creep.name} working target vanished. Turn to unassigned.`)
return
}
let working_target_pos=working_target.pos
let my_pos=creep.pos;
if(utils.distance(working_target_pos,my_pos)>1.5){//在附近就是1或者1.414
creep.moveTo(working_target_pos);
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])
}
}
let working_target_id = creep.working_target_id
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;
if (working_target.memory.role == 'picker') {
if (creep.store.energy < creep.store.getCapacity()) {
}else{
if (creep.transfer(Game.spawns['Spawn1'], RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) {
creep.moveTo(Game.spawns['Spawn1']);
path.visualPath(creep.pos,Game.spawns['Spawn1'].pos);
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);
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])
}
}
} else {
if (creep.transfer(Game.spawns['Spawn1'], RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) {
creep.moveTo(Game.spawns['Spawn1']);
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
creep.moveTo(working_target_pos);
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) {
creep.moveTo(Game.spawns['Spawn1']);
path.visualPath(creep.pos, Game.spawns['Spawn1'].pos);
}
}
}
}
}