diff --git a/esbuild.config.mjs b/esbuild.config.mjs index c9d5e49..a6ba2bb 100644 --- a/esbuild.config.mjs +++ b/esbuild.config.mjs @@ -11,4 +11,5 @@ build({ sourcemap: true, logLevel: 'info', minify: false, + keepNames: true, // optional: keeps function/class names }).catch(() => process.exit(1)); diff --git a/src/roleHandlers/harvesterHandler.ts b/src/roleHandlers/harvesterHandler.ts new file mode 100644 index 0000000..f5f2232 --- /dev/null +++ b/src/roleHandlers/harvesterHandler.ts @@ -0,0 +1,29 @@ +import { CreepRole } from "types/creeps"; +import { registerRoleHandler, RoleHandler } from "./roleHandler.interface"; + + + +class HarvesterHandler implements RoleHandler { + public readonly mappedRole: CreepRole = "harvester"; + + public run(creep: Creep): void { + if (creep.store.getFreeCapacity() > 0) { + const sources = creep.room.find(FIND_SOURCES); + if (creep.harvest(sources[0]) === ERR_NOT_IN_RANGE) { + creep.moveTo(sources[0]); + } + } else { + const spawn = Game.spawns['Spawn1']; + if (creep.transfer(spawn, RESOURCE_ENERGY) === ERR_NOT_IN_RANGE) { + creep.moveTo(spawn); + } + } + } +} + + +registerRoleHandler("harvester", HarvesterHandler); + + + +export default HarvesterHandler; diff --git a/src/roleHandlers/roleHandler.interface.ts b/src/roleHandlers/roleHandler.interface.ts new file mode 100644 index 0000000..6622b74 --- /dev/null +++ b/src/roleHandlers/roleHandler.interface.ts @@ -0,0 +1,19 @@ +import { CreepRole } from "types/creeps"; + + +export interface RoleHandler { + mappedRole: CreepRole; + + run(creep: Creep): void; +} + + +export const ImplementationRegistry: { [roleName: string]: RoleHandler } = {}; + + +export const registerRoleHandler = (roleName: string, handler: typeof RoleHandler) => { + if (ImplementationRegistry[roleName]) { + console.warn(`Role handler for ${roleName} is already registered. Overwriting.`); + } + ImplementationRegistry[roleName] = handler; +} diff --git a/src/spawnHandler.ts b/src/spawnHandler.ts index 3602720..2bdc6ad 100644 --- a/src/spawnHandler.ts +++ b/src/spawnHandler.ts @@ -6,6 +6,26 @@ class SpawnHandler { constructor(private spawn: StructureSpawn) {} public run(): void { + this.validateSpawnState(); + + for(var name in Game.creeps) { + var creep = Game.creeps[name]; + + if(creep.store.getFreeCapacity() > 0) { + var sources = creep.room.find(FIND_SOURCES); + if(creep.harvest(sources[0]) == ERR_NOT_IN_RANGE) { + creep.moveTo(sources[0]); + } + } + else { + if(creep.transfer(Game.spawns['Spawn1'], RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) { + creep.moveTo(Game.spawns['Spawn1']); + } + } + } + } + + private validateSpawnState() { if (this.spawn.spawning) { console.log(`Spawn ${this.spawn.name} is currently spawning a creep.`); return;