From c8fba64a2ff59d75a0b86dde0f9a59b96b05dba1 Mon Sep 17 00:00:00 2001 From: Anton Vakhrushev Date: Tue, 21 Jul 2020 19:20:42 +0300 Subject: [PATCH] Change energy restore priority --- src/creep/harvester.ts | 56 ++++++++++++++++++++++++++---------------- src/main.ts | 13 ++++------ 2 files changed, 40 insertions(+), 29 deletions(-) diff --git a/src/creep/harvester.ts b/src/creep/harvester.ts index f3bd67c..fe4c178 100644 --- a/src/creep/harvester.ts +++ b/src/creep/harvester.ts @@ -1,5 +1,7 @@ import { selectSource } from './common'; +const TARGET_TYPES = [STRUCTURE_EXTENSION, STRUCTURE_SPAWN, STRUCTURE_TOWER]; + interface HarvesterMemory extends CreepMemory { sourceId: Id | undefined; } @@ -18,28 +20,40 @@ export function runAsHarvester(creep: Creep) { creep.moveTo(source, { visualizePathStyle: { stroke: '#ffaa00' } }); } } else { - let targets = creep.room.find(FIND_STRUCTURES, { - filter: (structure) => { - return ( - (structure.structureType === STRUCTURE_EXTENSION || - structure.structureType === STRUCTURE_SPAWN || - structure.structureType === STRUCTURE_TOWER) && - structure.store.getFreeCapacity(RESOURCE_ENERGY) > 0 - ); - } - }); - - if (targets.length > 0) { - if (creep.transfer(targets[0], RESOURCE_ENERGY) === ERR_NOT_IN_RANGE) { - creep.say('🚛 transfer'); - creep.moveTo(targets[0], { visualizePathStyle: { stroke: '#ffffff' } }); - } + const target = findTarget(creep); + if (target) { + moveEnergyToTarget(creep, target); } else { - const spawns = creep.room.find(FIND_MY_SPAWNS); - if (spawns.length > 0) { - creep.say('to spawn'); - creep.moveTo(spawns[0]); - } + moveToSpawn(creep); } } } + +function findTarget(creep: Creep): Structure | undefined { + for (let type of TARGET_TYPES) { + const targets = creep.room.find(FIND_STRUCTURES, { + filter: (structure) => { + return structure.structureType === type && structure.store.getFreeCapacity(RESOURCE_ENERGY) > 0; + } + }); + if (targets.length) { + return targets[0]; + } + } + return undefined; +} + +function moveEnergyToTarget(creep: Creep, target: Structure) { + if (creep.transfer(target, RESOURCE_ENERGY) === ERR_NOT_IN_RANGE) { + creep.say('🚛 transfer'); + creep.moveTo(target, { visualizePathStyle: { stroke: '#ffffff' } }); + } +} + +function moveToSpawn(creep: Creep) { + const spawns = creep.room.find(FIND_MY_SPAWNS); + if (spawns.length > 0) { + creep.say('to spawn'); + creep.moveTo(spawns[0]); + } +} diff --git a/src/main.ts b/src/main.ts index b6ad103..5a04b10 100644 --- a/src/main.ts +++ b/src/main.ts @@ -21,7 +21,7 @@ function makeCreep(role: CreepRole, count: number) { const firstSpawn = _.first(Object.values(Game.spawns)); const name = makeName(); const memory = { role: role } as CreepMemory; - const err = firstSpawn.spawnCreep([WORK, CARRY, MOVE], name, { memory }); + const err = firstSpawn.spawnCreep([WORK, WORK, CARRY, CARRY, MOVE], name, { memory }); console.log(`Make creep "${role}"`, 'err', err); } } @@ -56,14 +56,11 @@ export const loop = ErrorMapper.wrapLoop(() => { } } - const harvCount = 4; - const minHarvCount = 2; + callHarvestersFromOthers(2); - makeCreep(CreepRole.HARVESTER, harvCount); - makeCreep(CreepRole.UPGRADER, 8); - makeCreep(CreepRole.BUILDER, 8); - - callHarvestersFromOthers(minHarvCount); + makeCreep(CreepRole.HARVESTER, 2); + makeCreep(CreepRole.UPGRADER, 4); + makeCreep(CreepRole.BUILDER, 4); // Process current creeps for (let name in Game.creeps) {