Improved walking system.
This commit is contained in:
94
Screeps/JobBuilder.js
Normal file
94
Screeps/JobBuilder.js
Normal file
@@ -0,0 +1,94 @@
|
||||
module.exports = {
|
||||
begin(creep){
|
||||
if(!creep.memory.collecting) creep.memory.collecting = false;
|
||||
if(!creep.memory.counter) creep.memory.counter = 0;
|
||||
},
|
||||
|
||||
tick(creep){
|
||||
if(creep.memory.collecting) {
|
||||
GetEnergy(creep);
|
||||
energyFullCheck(creep);
|
||||
}
|
||||
else {
|
||||
BuildOrRepair(creep);
|
||||
energyEmptyCheck(creep);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function GetEnergy(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)) {
|
||||
if(!target.store) creep.pickup(target);
|
||||
else creep.withdraw(target, RESOURCE_ENERGY);
|
||||
}
|
||||
else creep.moveTo(target);
|
||||
}
|
||||
|
||||
function energyFullCheck(creep){
|
||||
if(!creep.store.getFreeCapacity(RESOURCE_ENERGY)) {
|
||||
creep.memory.collecting = false;
|
||||
creep.memory.target = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
function BuildOrRepair(creep){
|
||||
if(!creep.memory.target) findBuildOrRepairTarget(creep);
|
||||
if(!creep.memory.target) return;
|
||||
const target = Game.getObjectById(creep.memory.target);
|
||||
if(!target) { creep.memory.target = undefined; return; }
|
||||
if(target.hits && target.hits === target.hitsMax) { creep.memory.target = undefined; return; }
|
||||
if(creep.pos.isNearTo(target))
|
||||
if(!target.hits) creep.build(target);
|
||||
else creep.repair(target);
|
||||
else creep.moveTo(target);
|
||||
}
|
||||
|
||||
function energyEmptyCheck(creep){
|
||||
if(!creep.store.getUsedCapacity(RESOURCE_ENERGY)) {
|
||||
creep.memory.collecting = true;
|
||||
creep.memory.target = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
function findEnergyTarget(creep){
|
||||
var target;
|
||||
if(creep.room.storage && 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);
|
||||
}});
|
||||
if(!target) target = creep.pos.findClosestByRange(FIND_RUINS, {
|
||||
filter: (r)=>{
|
||||
return r.store.getUsedCapacity(RESOURCE_ENERGY) > creep.store.getFreeCapacity(RESOURCE_ENERGY);
|
||||
}});
|
||||
if(!target) target = creep.pos.findClosestByRange(FIND_TOMBSTONES, {
|
||||
filter: (t)=>{
|
||||
return t.store.getUsedCapacity(RESOURCE_ENERGY) > creep.store.getFreeCapacity(RESOURCE_ENERGY);
|
||||
}});
|
||||
|
||||
if(target) creep.memory.target = target.id;
|
||||
}
|
||||
|
||||
function findBuildOrRepairTarget(creep) {
|
||||
var target;
|
||||
switch (creep.memory.counter%2) {
|
||||
case 0: target = creep.pos.findClosestByRange(FIND_MY_CONSTRUCTION_SITES); break;
|
||||
case 1: target = creep.pos.findClosestByRange(FIND_STRUCTURES, {
|
||||
filter:(s)=> {
|
||||
return s.hits < s.hitsMax ||
|
||||
((s.structureType === STRUCTURE_WALL || s.structureType === STRUCTURE_RAMPART) && s.hits < 100000 );
|
||||
}});
|
||||
break;
|
||||
}
|
||||
if(target) creep.memory.target = target.id;
|
||||
creep.memory.counter++;
|
||||
}
|
||||
Reference in New Issue
Block a user