1.修复了一个bug。2.基本正常运转。
This commit is contained in:
parent
9328eee122
commit
8ee9e44e1e
27
builder.js
27
builder.js
|
|
@ -1,15 +1,30 @@
|
||||||
const utils=require('utils')
|
const utils = require('utils')
|
||||||
module.exports = {
|
module.exports = {
|
||||||
run(creep) {
|
run(creep) {
|
||||||
if (creep.working_target_id) {
|
if (creep.working_target_id) {
|
||||||
let working_target_id = creep.working_target_id;
|
let working_target_id = creep.working_target_id;
|
||||||
let working_target = Game.getObjectById(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);
|
creep.moveTo(working_target);
|
||||||
}else{
|
} else {
|
||||||
creep.pickup(RESOURCE_ENERGY);
|
// let found = creep.room.lookForAt(LOOK_ENERGY, working_target_pos);
|
||||||
//TODO:需要适应不同的建筑
|
let all_dropped_resource = creep.room.find(FIND_DROPPED_RESOURCES)
|
||||||
creep.upgradeController(working_target);
|
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
52
main.js
|
|
@ -9,7 +9,7 @@ module.exports.loop = function () {
|
||||||
assign_harvester_picker_to_enery_source();
|
assign_harvester_picker_to_enery_source();
|
||||||
assign_transfer_to_picker()
|
assign_transfer_to_picker()
|
||||||
assign_builder_to_controller();
|
assign_builder_to_controller();
|
||||||
// assign_controller();
|
assign_transfer_to_builder();
|
||||||
let isSpawning = false
|
let isSpawning = false
|
||||||
let energy_source_number = _.filter(Game.spawns['Spawn1'].room.find(FIND_SOURCES_ACTIVE)).length;
|
let energy_source_number = _.filter(Game.spawns['Spawn1'].room.find(FIND_SOURCES_ACTIVE)).length;
|
||||||
let harvester_number = _(Game.creeps).filter({ memory: { role: 'harvester' } }).size();
|
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) {
|
_.each(picker_has_no_creep, function (picker) {
|
||||||
Memory.WorkingTarget.push({ id: picker.id, working_creep_names: [], cate: 'picker' })//在Memory.WorkingTarget加入需要creep的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)
|
let picker_memories = _.filter(Memory.WorkingTarget, picker_memory => picker_memory.working_creep_names.length == 0)
|
||||||
if (picker_memories.length > 0) {
|
if (picker_memories.length > 0) {
|
||||||
let available_transfer = _.filter(Game.creeps, creep => !creep.working_target_id && (creep.memory.role == 'transfer'))
|
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)
|
assign_creeps(opt)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function assign_task() {
|
function assign_task() {
|
||||||
|
|
@ -80,24 +83,31 @@ function assign_task() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function assign_controller() {
|
function assign_transfer_to_builder() {
|
||||||
let builder_creep_array = _.filter(Game.creeps, { memory: { role: 'builder' } })
|
//判断有多少个picker的transfer为0
|
||||||
if (builder_creep_array.length == 0) {
|
let all_builder = _.filter(Game.creeps, { memory: { role: 'builder' } })
|
||||||
return;
|
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) {
|
function removeUnusedMemoryItem(memory) {
|
||||||
|
|
@ -243,7 +253,7 @@ function createBuilderCreep() {
|
||||||
//create new creep
|
//create new creep
|
||||||
let new_creep_name = "AUTO_CREATE_Builder_" + util.uuid();
|
let new_creep_name = "AUTO_CREATE_Builder_" + util.uuid();
|
||||||
let Re_code;
|
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) {
|
if (Re_code == new_creep_name) {
|
||||||
Game.creeps[new_creep_name].memory.role = 'builder';
|
Game.creeps[new_creep_name].memory.role = 'builder';
|
||||||
console.log('Create new creep name ' + new_creep_name);
|
console.log('Create new creep name ' + new_creep_name);
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,10 @@
|
||||||
//只收集,不运输
|
//只收集,不运输
|
||||||
module.exports = {
|
module.exports = {
|
||||||
run(creep) {
|
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_id = creep.working_target_id;
|
||||||
let working_target = Game.getObjectById(working_target_id);
|
let working_target = Game.getObjectById(working_target_id);
|
||||||
let Re_code = creep.harvest(working_target);
|
let Re_code = creep.harvest(working_target);
|
||||||
|
|
|
||||||
77
transfer.js
77
transfer.js
|
|
@ -1,35 +1,60 @@
|
||||||
const utils=require('utils')
|
const utils = require('utils')
|
||||||
const path=require('path')
|
const path = require('path')
|
||||||
|
|
||||||
// const harvester = require("./harvester");
|
// const harvester = require("./harvester");
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
run(creep) {
|
run(creep) {
|
||||||
if (creep.carry.energy < creep.carryCapacity) {
|
let working_target_id = creep.working_target_id
|
||||||
let working_target_id=creep.working_target_id
|
let working_target = Game.getObjectById(working_target_id)
|
||||||
let working_target=Game.getObjectById(working_target_id)
|
//TODO:处理transfer的对象消失的情况
|
||||||
if(!working_target){
|
if(!working_target){
|
||||||
// console.log(`${creep.name} working target vanished. Turn to unassigned.`)
|
creep.working_target_id=null
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
let working_target_pos=working_target.pos
|
let working_target_pos = working_target.pos
|
||||||
let my_pos=creep.pos;
|
let my_pos = creep.pos;
|
||||||
if(utils.distance(working_target_pos,my_pos)>1.5){//在附近就是1或者1.414
|
if (working_target.memory.role == 'picker') {
|
||||||
creep.moveTo(working_target_pos);
|
if (creep.store.energy < creep.store.getCapacity()) {
|
||||||
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 (!working_target) {
|
||||||
if (creep.transfer(Game.spawns['Spawn1'], RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) {
|
// console.log(`${creep.name} working target vanished. Turn to unassigned.`)
|
||||||
creep.moveTo(Game.spawns['Spawn1']);
|
return
|
||||||
path.visualPath(creep.pos,Game.spawns['Spawn1'].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])
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
} 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue