diff --git a/CreepClass.js b/CreepClass.js index 27fe366..2a1f477 100644 --- a/CreepClass.js +++ b/CreepClass.js @@ -1,4 +1,5 @@ const jobBuilder = require("JobBuilder"); +const jobCleaner = require("JobCleaner"); const jobMiner = require("JobMiner"); const jobSupplier = require("JobSupplier"); const jobUpgrader = require("JobUpgrader"); @@ -12,9 +13,10 @@ module.exports = { const Role = { BUILDER: 0, - MINER: 1, - SUPPLIER: 2, - UPGRADER: 3 + CLEANER: 1, + MINER: 2, + SUPPLIER: 3, + UPGRADER: 4 } class _Creep extends Creep { @@ -22,6 +24,7 @@ class _Creep extends Creep { if(!this.memory.job) this.memory.job = { role: Role.HARVESTER }; switch (this.memory.job.role) { case Role.BUILDER: jobBuilder.begin(this); break; + case Role.CLEANER: jobCleaner.begin(this); break; case Role.MINER: jobMiner.begin(this); break; case Role.SUPPLIER: jobSupplier.begin(this); break; case Role.UPGRADER: jobUpgrader.begin(this); break; @@ -33,6 +36,7 @@ class _Creep extends Creep { if(!this.memory.init) this.begin(); switch (this.memory.job.role) { case Role.BUILDER: jobBuilder.tick(this); break; + case Role.CLEANER: jobCleaner.tick(this); break; case Role.MINER: jobMiner.tick(this); break; case Role.SUPPLIER: jobSupplier.tick(this); break; case Role.UPGRADER: jobUpgrader.tick(this); break; diff --git a/JobBuilder.js b/JobBuilder.js index 174305e..1fceb6d 100644 --- a/JobBuilder.js +++ b/JobBuilder.js @@ -17,7 +17,7 @@ module.exports = { } function GetEnergy(creep){ - if(!creep.memory.target) findWithdrawTarget(creep); + if(!creep.memory.target) findEnergyTarget(creep); const target = Game.getObjectById(creep.memory.target); if(!target) creep.memory.target = undefined; if(creep.pos.isNearTo(target)) { @@ -53,8 +53,16 @@ function energyEmptyCheck(creep){ } } -function findWithdrawTarget(creep){ - var target = creep.pos.findClosestByRange(FIND_DROPPED_RESOURCES, { +function findEnergyTarget(creep){ + var target; + if(creep.room.storage.store.getUsedCapacity(RESOURCE_ENERGY) > creep.store.getFreeCapacity(RESOURCE_ENERGY)) + target = creep.room.storage; + if(!target) target = creep.pos.findClosestByRange(FIND_STRUCTURES, { + filter: (st)=>{ + return st.structureType == STRUCTURE_CONTAINER && st.store.getUsedCapacity(RESOURCE_ENERGY) > creep.store.getFreeCapacity(RESOURCE_ENERGY); + }}); + + if(!target) target = creep.pos.findClosestByRange(FIND_DROPPED_RESOURCES, { filter: (r)=>{ return r.resourceType == RESOURCE_ENERGY && r.amount > creep.store.getFreeCapacity(RESOURCE_ENERGY); }}); @@ -66,10 +74,7 @@ function findWithdrawTarget(creep){ filter: (t)=>{ return t.store.getUsedCapacity(RESOURCE_ENERGY) > creep.store.getFreeCapacity(RESOURCE_ENERGY); }}); - if(!target) target = creep.pos.findClosestByRange(FIND_STRUCTURES, { - filter: (st)=>{ - return st.structureType == STRUCTURE_CONTAINER && st.store.getUsedCapacity(RESOURCE_ENERGY) > creep.store.getFreeCapacity(RESOURCE_ENERGY); - }}); + if(target) creep.memory.target = target.id; } diff --git a/JobSupplier.js b/JobSupplier.js index 5de5aee..7661fc5 100644 --- a/JobSupplier.js +++ b/JobSupplier.js @@ -1,7 +1,6 @@ module.exports = { begin(creep){ if(!creep.memory.collecting) creep.memory.collecting = false; - if(!creep.memory.counter) creep.memory.counter = 0; }, tick(creep){ @@ -71,27 +70,21 @@ function findWithdrawTarget(creep){ } function findTransferTarget(creep) { - var target; - switch (creep.memory.counter%3) { - case 0: target = creep.pos.findClosestByRange(FIND_MY_STRUCTURES, { + var target = creep.pos.findClosestByRange(FIND_MY_STRUCTURES, { filter:(s)=> { return (s.structureType == STRUCTURE_EXTENSION) && s.store.getFreeCapacity(RESOURCE_ENERGY) > 0; }}); - if(!target) target = creep.pos.findClosestByRange(FIND_MY_STRUCTURES, { - filter:(s)=> { - return (s.structureType == STRUCTURE_SPAWN) - && s.store.getFreeCapacity(RESOURCE_ENERGY) > 0; - }}); - break; - case 1: target = creep.pos.findClosestByRange(FIND_STRUCTURES, { + if(!target) target = creep.pos.findClosestByRange(FIND_MY_STRUCTURES, { + filter:(s)=> { + return (s.structureType == STRUCTURE_SPAWN) + && s.store.getFreeCapacity(RESOURCE_ENERGY) > 0; + }}); + if(!target) target = creep.pos.findClosestByRange(FIND_STRUCTURES, { filter:(s)=> { return s.structureType == STRUCTURE_CONTAINER && s.store.getFreeCapacity(RESOURCE_ENERGY) > 1000; - }}); - break; - case 2: target = creep.room.storage; break; - } + }}) + if(!target) target = creep.room.storage; if(target) creep.memory.target = target.id; - creep.memory.counter++; } \ No newline at end of file diff --git a/StructureSpawnClass.js b/StructureSpawnClass.js index b775532..c89efde 100644 --- a/StructureSpawnClass.js +++ b/StructureSpawnClass.js @@ -43,14 +43,15 @@ function getJobName(role){ function getBodyByJob(role, energyAvailability){ const body = []; switch (role) { + case Role.BUILDER: body.push(WORK); energyAvailability -= 100; break; case Role.UPGRADER: body.push(CARRY); body.push(MOVE); energyAvailability -= 100; break; - case Role.MINER: body.push(MOVE); energyAvailability -= 50; break; + case Role.MINER: body.push(MOVE); energyAvailability -= 100; break; } var unitEnergyCost = 0; while(unitEnergyCost <= energyAvailability) { switch (role) { - case Role.BUILDER: body.push(WORK); body.push(CARRY); body.push(MOVE); unitEnergyCost = 200; break; + case Role.BUILDER: body.push(MOVE); body.push(CARRY); unitEnergyCost = 100; break; case Role.UPGRADER: case Role.MINER: body.push(WORK); unitEnergyCost = 100;