Worker abstraction
This commit is contained in:
parent
57c4ac1688
commit
e2e93947b5
5 changed files with 75 additions and 22 deletions
12
src/RoomPlanner/Blueprints/Containers.ts
Normal file
12
src/RoomPlanner/Blueprints/Containers.ts
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
export const buildContainers = (room: Room) => {
|
||||
if ((room.controller?.level ?? 0) < 2) {
|
||||
return;
|
||||
}
|
||||
const sources = room.find(FIND_SOURCES);
|
||||
for (const source of sources) {
|
||||
room.createConstructionSite(source.pos.x - 2, source.pos.y, STRUCTURE_CONTAINER);
|
||||
room.createConstructionSite(source.pos.x + 2, source.pos.y, STRUCTURE_CONTAINER);
|
||||
room.createConstructionSite(source.pos.x, source.pos.y - 2, STRUCTURE_CONTAINER);
|
||||
room.createConstructionSite(source.pos.x, source.pos.y + 2, STRUCTURE_CONTAINER);
|
||||
}
|
||||
}
|
||||
15
src/Workers/Constructor.ts
Normal file
15
src/Workers/Constructor.ts
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
import { Fail, runAction } from "../Actions/Action";
|
||||
import { buildConstructionSite } from "../Actions/buildConstructionSite";
|
||||
import { harvestFromClosestActiveSource } from "../Actions/harvest";
|
||||
import { upgradeController } from "../Actions/upgradeController";
|
||||
import { WorkerDefinition } from "./worker";
|
||||
|
||||
export const Constructor: WorkerDefinition = {
|
||||
runAction: (creep: Creep) => runAction(creep, harvestFromClosestActiveSource())
|
||||
.andThen(buildConstructionSite())
|
||||
.or(creep.room.controller ? upgradeController(creep.room.controller) : Fail)
|
||||
.repeat(),
|
||||
name: 'constructor',
|
||||
requiredCreeps: (room: Room) => room.find(FIND_MY_CONSTRUCTION_SITES).length / 5 + 1,
|
||||
bodyDefinition: (energy: number) => [WORK, MOVE, MOVE, CARRY, CARRY]
|
||||
}
|
||||
15
src/Workers/Upgrader.ts
Normal file
15
src/Workers/Upgrader.ts
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
import { Fail, runAction } from "../Actions/Action";
|
||||
import { harvestFromClosestActiveSource } from "../Actions/harvest";
|
||||
import { transferEnergy } from "../Actions/transferEnergy";
|
||||
import { upgradeController } from "../Actions/upgradeController";
|
||||
import { WorkerDefinition } from "./worker";
|
||||
|
||||
export const Upgrader: WorkerDefinition = {
|
||||
runAction: (creep: Creep, spawn: StructureSpawn) => runAction(creep, harvestFromClosestActiveSource())
|
||||
.andThen(transferEnergy(spawn))
|
||||
.or(creep.room.controller ? upgradeController(creep.room.controller) : Fail)
|
||||
.repeat(),
|
||||
name: 'upgrader',
|
||||
requiredCreeps: (room: Room) => 2,
|
||||
bodyDefinition: (energy: number) => [WORK, WORK, MOVE, CARRY]
|
||||
}
|
||||
24
src/Workers/worker.ts
Normal file
24
src/Workers/worker.ts
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
export interface WorkerDefinition {
|
||||
runAction: (creep: Creep, spawn: StructureSpawn) => void,
|
||||
name: string,
|
||||
requiredCreeps: (room: Room) => number,
|
||||
bodyDefinition: (energy: number, spawn: StructureSpawn) => BodyPartConstant[]
|
||||
}
|
||||
|
||||
export const spawnWorkers = (spawn: StructureSpawn, workers: WorkerDefinition[]): void => {
|
||||
for (const worker of workers) {
|
||||
for (let i = 0; i < worker.requiredCreeps(spawn.room); i++) {
|
||||
spawn.spawnCreep(worker.bodyDefinition(spawn.store.getCapacity(RESOURCE_ENERGY), spawn), worker.name + i.toString());
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
export const runWorkers = (spawn: StructureSpawn, workers: WorkerDefinition[]): void => {
|
||||
for (const worker of workers) {
|
||||
for (const creep of Object.values(Game.creeps)) {
|
||||
if (creep.name.startsWith(worker.name)) {
|
||||
worker.runAction(creep, spawn);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
31
src/index.ts
31
src/index.ts
|
|
@ -3,8 +3,12 @@ import { buildConstructionSite } from "./Actions/buildConstructionSite";
|
|||
import { harvestFromClosestActiveSource } from "./Actions/harvest";
|
||||
import { transferEnergy } from "./Actions/transferEnergy";
|
||||
import { upgradeController } from "./Actions/upgradeController";
|
||||
import { buildContainers } from "./RoomPlanner/Blueprints/Containers";
|
||||
import { buildExtentions } from "./RoomPlanner/Blueprints/Extensions";
|
||||
import { buildRoads } from "./RoomPlanner/Blueprints/Roads";
|
||||
import { Constructor } from "./Workers/Constructor";
|
||||
import { Upgrader } from "./Workers/Upgrader";
|
||||
import { runWorkers, spawnWorkers } from "./Workers/worker";
|
||||
|
||||
export function loop() {
|
||||
const spawn = Game.spawns.Spawn1;
|
||||
|
|
@ -12,34 +16,17 @@ export function loop() {
|
|||
if (!controller) {
|
||||
return;
|
||||
}
|
||||
spawn.spawnCreep([WORK, CARRY, CARRY, MOVE], 'builder9');
|
||||
spawn.spawnCreep([WORK, CARRY, CARRY, MOVE], 'upgrader8');
|
||||
spawn.spawnCreep([WORK, CARRY, CARRY, MOVE], 'builder7');
|
||||
spawn.spawnCreep([WORK, CARRY, CARRY, MOVE], 'builder6');
|
||||
spawn.spawnCreep([WORK, CARRY, CARRY, MOVE], 'uprader5');
|
||||
spawn.spawnCreep([WORK, CARRY, CARRY, MOVE], 'builder4');
|
||||
spawn.spawnCreep([WORK, CARRY, CARRY, MOVE], 'builder3');
|
||||
spawn.spawnCreep([WORK, CARRY, CARRY, MOVE], 'upgrader2');
|
||||
spawn.spawnCreep([WORK, CARRY, CARRY, MOVE], 'upgrader1');
|
||||
for (const creep of Object.values(Game.creeps)) {
|
||||
if (creep.name.startsWith('u') || creep.name.startsWith('w')) {
|
||||
runAction(creep, harvestFromClosestActiveSource())
|
||||
.andThen(transferEnergy(spawn))
|
||||
.or(upgradeController(controller))
|
||||
.repeat()
|
||||
} else if (creep.name.startsWith('b')) {
|
||||
runAction(creep, harvestFromClosestActiveSource())
|
||||
.andThen(buildConstructionSite())
|
||||
.or(upgradeController(controller))
|
||||
.repeat()
|
||||
}
|
||||
}
|
||||
spawnWorkers(spawn, [Constructor, Upgrader]);
|
||||
runWorkers(spawn, [Constructor, Upgrader]);
|
||||
if (Game.time % 100 === 0) {
|
||||
buildRoads(spawn.room);
|
||||
}
|
||||
if (Game.time % 100 === 50) {
|
||||
buildExtentions(spawn.room);
|
||||
}
|
||||
if (Game.time % 100 === 25) {
|
||||
buildContainers(spawn.room);
|
||||
}
|
||||
if (Game.cpu.bucket === 10000) {
|
||||
Game.cpu.generatePixel();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue