diff --git a/src/builder.ts b/src/builder.ts index a8aa13d..dc3a681 100644 --- a/src/builder.ts +++ b/src/builder.ts @@ -1,13 +1,10 @@ +import { randomIntInRange } from './utils/Random'; + interface BuilderMemory extends CreepMemory { building: boolean | undefined; sourceNum: number | undefined; } -function randomIntInRange(min: number, max: number): number { - const delta = max - min; - return Math.floor(Math.random() * delta) + min; -} - export function runAsBuilder(creep: Creep) { const memory = creep.memory as BuilderMemory; diff --git a/src/main.ts b/src/main.ts index 9beede6..243be50 100644 --- a/src/main.ts +++ b/src/main.ts @@ -16,6 +16,7 @@ enum CreepRole { function makeCreep(role: CreepRole, count: number) { const creeps = Object.values(Game.creeps).filter((c) => c.memory.role === role); + console.log('Make creep ', role, 'need', count, 'has', creeps.length); if (creeps.length < count) { const firstSpawn = _.first(Object.values(Game.spawns)); const name = makeName(role); diff --git a/src/upgrader.ts b/src/upgrader.ts index ce93549..20485bb 100644 --- a/src/upgrader.ts +++ b/src/upgrader.ts @@ -1,24 +1,37 @@ +import { randomIntInRange } from './utils/Random'; + +interface UpgraderMemory extends CreepMemory { + upgrading: boolean | undefined; + sourceNum: number | undefined; +} + export function runAsUpgrader(creep: Creep) { - const memory = creep.memory as CreepMemory & { upgrading: boolean | undefined }; + const memory = creep.memory as UpgraderMemory; if (memory.upgrading && creep.store[RESOURCE_ENERGY] === 0) { memory.upgrading = false; - creep.say('🔄 harvest'); } if (!memory.upgrading && creep.store.getFreeCapacity() === 0) { memory.upgrading = true; - creep.say('⚡ upgrade'); + } + + if (memory.sourceNum === undefined) { + const sources = creep.room.find(FIND_SOURCES); + memory.sourceNum = randomIntInRange(0, sources.length); } if (memory.upgrading) { if (creep.room.controller && creep.upgradeController(creep.room.controller) == ERR_NOT_IN_RANGE) { + creep.say('⚡ upgrade'); creep.moveTo(creep.room.controller, { visualizePathStyle: { stroke: '#ffffff' } }); } } else { const sources = creep.room.find(FIND_SOURCES); - if (creep.harvest(sources[0]) == ERR_NOT_IN_RANGE) { - creep.moveTo(sources[0], { visualizePathStyle: { stroke: '#ffaa00' } }); + const sourceNum = memory.sourceNum; + if (creep.harvest(sources[sourceNum]) == ERR_NOT_IN_RANGE) { + creep.say('🔄 harvest ' + sourceNum); + creep.moveTo(sources[sourceNum], { visualizePathStyle: { stroke: '#ffaa00' } }); } } } diff --git a/src/utils/Random.ts b/src/utils/Random.ts new file mode 100644 index 0000000..9a4ddca --- /dev/null +++ b/src/utils/Random.ts @@ -0,0 +1,4 @@ +export function randomIntInRange(min: number, max: number): number { + const delta = max - min; + return Math.floor(Math.random() * delta) + min; +}