Add Creep Actions
This commit is contained in:
parent
848e69dc05
commit
a73f1f7004
9 changed files with 221 additions and 57 deletions
|
|
@ -5,5 +5,8 @@ module.exports = {
|
|||
root: true,
|
||||
parserOptions: {
|
||||
"project": ["tsconfig.json"]
|
||||
},
|
||||
rules: {
|
||||
'no-unused-vars': "off"
|
||||
}
|
||||
};
|
||||
6
.swcrc
6
.swcrc
|
|
@ -1,4 +1,10 @@
|
|||
{
|
||||
"jsc": {
|
||||
"parser": {
|
||||
"syntax": "typescript",
|
||||
"tsx": false
|
||||
}
|
||||
},
|
||||
"module": {
|
||||
"type": "commonjs"
|
||||
}
|
||||
|
|
|
|||
61
src/Actions/Action.ts
Normal file
61
src/Actions/Action.ts
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
declare global {
|
||||
interface CreepMemory {
|
||||
state?: number
|
||||
}
|
||||
}
|
||||
|
||||
export interface ChainableAction {
|
||||
or: (action: Action) => ChainableAction,
|
||||
and: (action: Action) => ChainableAction,
|
||||
andThen: (action: Action) => ChainableAction,
|
||||
repeat: () => void
|
||||
}
|
||||
|
||||
export const NoOp: Action = (creep: Creep, state: number = 0) => ({
|
||||
or: () => NoOp(creep, state),
|
||||
and: () => NoOp(creep, state),
|
||||
andThen: () => NoOp(creep, state),
|
||||
repeat: () => {}
|
||||
});
|
||||
|
||||
export const Success: Action = (creep: Creep, state: number = 0) => ({
|
||||
or: () => Success(creep, state),
|
||||
and: (action: Action) => action(creep, state),
|
||||
andThen: (action: Action) => {
|
||||
creep.memory.state = state + 1;
|
||||
return action(creep, state + 1);
|
||||
},
|
||||
repeat: () => {
|
||||
creep.memory.state = 0;
|
||||
}
|
||||
});
|
||||
|
||||
export const InProgress: Action = (creep: Creep, state: number = 0) => ({
|
||||
or: () => InProgress(creep, state),
|
||||
and: (action: Action) => action(creep, state),
|
||||
andThen: () => NoOp(creep, state),
|
||||
repeat: () => {}
|
||||
});
|
||||
|
||||
export const Fail: Action = (creep: Creep, state: number = 0) => ({
|
||||
or: (action: Action) => action(creep, state),
|
||||
and: () => NoOp(creep, state),
|
||||
andThen: () => NoOp(creep, state),
|
||||
repeat: () => {
|
||||
console.log('Warning: Last task in series failed for creep ' + creep.name);
|
||||
}
|
||||
})
|
||||
|
||||
export const createAction = (name: string, action: (creep: Creep) => Action): Action => {
|
||||
return (creep: Creep, state: number = 0) => {
|
||||
if ((creep.memory.state ?? 0) > state) {
|
||||
return Success(creep, state);
|
||||
}
|
||||
console.log(`[${creep.name}] Running action ${name}`)
|
||||
return action(creep)(creep, state);
|
||||
}
|
||||
}
|
||||
|
||||
export const runAction = (creep: Creep, action: Action): ChainableAction => action(creep);
|
||||
|
||||
export type Action = (creep: Creep, state?: number) => ChainableAction;
|
||||
23
src/Actions/harvest.ts
Normal file
23
src/Actions/harvest.ts
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
import { createAction, Fail, InProgress, Success } from "./Action";
|
||||
import { moveTo } from "./moveTo";
|
||||
|
||||
export const harvestFromClosestActiveSource = () => createAction('harvestFromClosestActiveSource', (creep: Creep) => {
|
||||
const source = creep.pos.findClosestByPath(FIND_SOURCES_ACTIVE);
|
||||
if (!source) {
|
||||
return Fail;
|
||||
}
|
||||
if (creep.store.getFreeCapacity(RESOURCE_ENERGY) === 0) {
|
||||
return Success;
|
||||
}
|
||||
switch(creep.harvest(source)) {
|
||||
case OK: {
|
||||
return InProgress;
|
||||
}
|
||||
case ERR_NOT_IN_RANGE: {
|
||||
return moveTo(source);
|
||||
}
|
||||
default: {
|
||||
return Fail;
|
||||
}
|
||||
}
|
||||
});
|
||||
15
src/Actions/moveTo.ts
Normal file
15
src/Actions/moveTo.ts
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
import { createAction, Fail, InProgress } from "./Action";
|
||||
|
||||
export const moveTo = (pos: _HasRoomPosition | RoomPosition) => createAction('moveTo', (creep: Creep) => {
|
||||
switch(creep.moveTo(pos)) {
|
||||
case OK: {
|
||||
return InProgress;
|
||||
}
|
||||
case ERR_TIRED: {
|
||||
return InProgress;
|
||||
}
|
||||
default: {
|
||||
return Fail;
|
||||
}
|
||||
}
|
||||
});
|
||||
22
src/Actions/transferEnergy.ts
Normal file
22
src/Actions/transferEnergy.ts
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
import { createAction, Fail, InProgress, Success } from "./Action";
|
||||
import { moveTo } from "./moveTo";
|
||||
|
||||
export const transferEnergy = (target: Creep | StructureSpawn) => createAction('transferEnergy', (creep: Creep) => {
|
||||
if (target.store.getFreeCapacity(RESOURCE_ENERGY) === 0) {
|
||||
return Fail;
|
||||
}
|
||||
switch(creep.transfer(target, RESOURCE_ENERGY)) {
|
||||
case OK: {
|
||||
return InProgress;
|
||||
}
|
||||
case ERR_NOT_ENOUGH_RESOURCES: {
|
||||
return Success;
|
||||
}
|
||||
case ERR_NOT_IN_RANGE: {
|
||||
return moveTo(target);
|
||||
}
|
||||
default: {
|
||||
return Fail;
|
||||
}
|
||||
}
|
||||
});
|
||||
19
src/Actions/upgradeController.ts
Normal file
19
src/Actions/upgradeController.ts
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
import { createAction, Fail, InProgress, Success } from "./Action";
|
||||
import { moveTo } from "./moveTo";
|
||||
|
||||
export const upgradeController = (controller: StructureController) => createAction('upgradeController', (creep: Creep) => {
|
||||
switch(creep.upgradeController(controller)) {
|
||||
case OK: {
|
||||
return InProgress;
|
||||
}
|
||||
case ERR_NOT_ENOUGH_RESOURCES: {
|
||||
return Success;
|
||||
}
|
||||
case ERR_NOT_IN_RANGE: {
|
||||
return moveTo(controller);
|
||||
}
|
||||
default: {
|
||||
return Fail;
|
||||
}
|
||||
}
|
||||
});
|
||||
23
src/index.ts
23
src/index.ts
|
|
@ -1,10 +1,25 @@
|
|||
import { runAction } from "./Actions/Action";
|
||||
import { harvestFromClosestActiveSource } from "./Actions/harvest";
|
||||
import { transferEnergy } from "./Actions/transferEnergy";
|
||||
import { upgradeController } from "./Actions/upgradeController";
|
||||
|
||||
export function loop() {
|
||||
const spawn = Game.spawns.Spawn1;
|
||||
const controller = spawn.room.controller;
|
||||
if (!controller) {
|
||||
return;
|
||||
}
|
||||
spawn.spawnCreep([WORK, CARRY, CARRY, MOVE], 'w6');
|
||||
spawn.spawnCreep([WORK, CARRY, CARRY, MOVE], 'w5');
|
||||
spawn.spawnCreep([WORK, CARRY, CARRY, MOVE], 'w4');
|
||||
spawn.spawnCreep([WORK, CARRY, CARRY, MOVE], 'w3');
|
||||
spawn.spawnCreep([WORK, CARRY, CARRY, MOVE], 'w2');
|
||||
spawn.spawnCreep([WORK, CARRY, CARRY, MOVE], 'w1');
|
||||
for (const creep of Object.values(Game.creeps)) {
|
||||
const source = creep.pos.findClosestByPath(FIND_SOURCES_ACTIVE);
|
||||
if (source && creep.harvest(source) === ERR_NOT_IN_RANGE) {
|
||||
creep.moveTo(source);
|
||||
}
|
||||
runAction(creep, harvestFromClosestActiveSource())
|
||||
.andThen(transferEnergy(spawn))
|
||||
.or(upgradeController(controller))
|
||||
.repeat()
|
||||
|
||||
}
|
||||
}
|
||||
106
yarn.lock
106
yarn.lock
|
|
@ -67,71 +67,71 @@
|
|||
slash "3.0.0"
|
||||
source-map "^0.7.3"
|
||||
|
||||
"@swc/core-darwin-arm64@1.3.23":
|
||||
version "1.3.23"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.23.tgz#5e52f19bf96eef92d2ae0533e1598a717b2ca765"
|
||||
integrity sha512-IGOEHmE4aBDX7gQWpanI3A0ni47UcvX7rmcy0H8kE6mm/y7mEMWskvNsYhYzJl4GVZgw38v1/lL/A7MRX6g71A==
|
||||
"@swc/core-darwin-arm64@1.3.24":
|
||||
version "1.3.24"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.24.tgz#d41fc574cb5049def9001903680fdd924f065052"
|
||||
integrity sha512-rR+9UpWm+fGXcipsjCst2hIL1GYIbo0YTLhJZWdIpQD6KRHHJMFXiydMgQQkDj2Ml7HpqUVgxj6m4ZWYL8b0OA==
|
||||
|
||||
"@swc/core-darwin-x64@1.3.23":
|
||||
version "1.3.23"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.3.23.tgz#3a466b47821284e7fcab6ee7c5b8251dfec0697a"
|
||||
integrity sha512-eQSN+JJqx/5Dk2C5uet2l7HifGsDBorQHD3PAVnge5jxl+rXU/zbzX9Un56+uuUB0QYeS4Dyr8cN7NHuIKGxBA==
|
||||
"@swc/core-darwin-x64@1.3.24":
|
||||
version "1.3.24"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.3.24.tgz#0f7a3960b91cbd7f95f25542b29d0e08bde4f59d"
|
||||
integrity sha512-px+5vkGtgPH0m3FkkTBHynlRdS5rRz+lK+wiXIuBZFJSySWFl6RkKbvwkD+sf0MpazQlqwlv/rTOGJBw6oDffg==
|
||||
|
||||
"@swc/core-linux-arm-gnueabihf@1.3.23":
|
||||
version "1.3.23"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.23.tgz#42984694b7ffc508188e64bdba6379c37fbf4abf"
|
||||
integrity sha512-zxYvggbw6R/sTNey0qgsigFMY59DYepm1+JNojxOKjbnvxmgyeIa5sPdu/5gLj0TtJOiWvSGrpMPNUIVreUSGA==
|
||||
"@swc/core-linux-arm-gnueabihf@1.3.24":
|
||||
version "1.3.24"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.24.tgz#a0fdd97b8341806b57290217830a5d1ab7d0b193"
|
||||
integrity sha512-jLs8ZOdTV4UW4J12E143QJ4mOMONQtqgAnuhBbRuWFzQ3ny1dfoC3P1jNWAJ2Xi59XdxAIXn0PggPNH4Kh34kw==
|
||||
|
||||
"@swc/core-linux-arm64-gnu@1.3.23":
|
||||
version "1.3.23"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.23.tgz#6579f0f715a9646ab0ddcbaec2cd94815788c4af"
|
||||
integrity sha512-l8UWhcNvZ6RzNZBBToMYuKYijF0h7mbw2RuFV5rpCYF/k/Wh85PaDHPQIQ6qjMHJsIBHYXUt0HLAP+fiAfBiDw==
|
||||
"@swc/core-linux-arm64-gnu@1.3.24":
|
||||
version "1.3.24"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.24.tgz#0536d03e12dd471ebafc180599488404aebb65cf"
|
||||
integrity sha512-A/v0h70BekrwGpp1DlzIFGcHQ3QQ2PexXcnnuIBZeMc9gNmHlcZmg3EcwAnaUDiokhNuSUFA/wV94yk1OqmSkw==
|
||||
|
||||
"@swc/core-linux-arm64-musl@1.3.23":
|
||||
version "1.3.23"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.23.tgz#5c377db95ca3ceca3222945ce170398691e57863"
|
||||
integrity sha512-TZDPp1wUE1ynVyY0vwIToyOULKEQ91H49R+p6Iu/2YY+UQQwUamhX0Gp8O85RT+j72/iHyhbQkz7yRg6v+GB5A==
|
||||
"@swc/core-linux-arm64-musl@1.3.24":
|
||||
version "1.3.24"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.24.tgz#54f46ffea1bf6ffcbe7c62037efaefdfb5115214"
|
||||
integrity sha512-pbc9eArWPTiMrbpS/pJo0IiQNAKAQBcBIDjWBGP1tcw2iDXYLw4bruwz9kI/VjakbshWb8MoE4T5ClkeuULvSw==
|
||||
|
||||
"@swc/core-linux-x64-gnu@1.3.23":
|
||||
version "1.3.23"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.23.tgz#e77b3a63c800418ea234d70c1a0ad5762367b6d5"
|
||||
integrity sha512-rKqWnOmUyQfoKZuuXs/S0RNobN+kcUyMtwoCdRdCNqOlk1XZRCMpjGc9Aqn73K3xlZ6JXX6oLrXKn375b2dydw==
|
||||
"@swc/core-linux-x64-gnu@1.3.24":
|
||||
version "1.3.24"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.24.tgz#c2b5cef83f8afd2a57d0eafbac083562d50cd0e6"
|
||||
integrity sha512-pP5pOLlY1xd352qo7rTlpVPUI9/9VhOd4b3Lk+LzfZDq9bTL2NDlGfyrPiwa5DGHMSzrugH56K2J68eutkxYVA==
|
||||
|
||||
"@swc/core-linux-x64-musl@1.3.23":
|
||||
version "1.3.23"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.23.tgz#f8cac09286f9ffaffe990ef61e759ce3785fd02e"
|
||||
integrity sha512-1MK9eocIhuIr/+yUKnTNHpYovMQvfKTJQbU4UMfQLg2qyCGKAvO+jOy5JIGR9x04MWqz9U3EHHS/7Id35ekhFQ==
|
||||
"@swc/core-linux-x64-musl@1.3.24":
|
||||
version "1.3.24"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.24.tgz#3459d01f9bf745568a4196c1993987f3d4a98303"
|
||||
integrity sha512-phNbP7zGp+Wcyxq1Qxlpe5KkxO7WLT2kVQUC7aDFGlVdCr+xdXsfH1MzheHtnr0kqTVQX1aiM8XXXHfFxR0oNA==
|
||||
|
||||
"@swc/core-win32-arm64-msvc@1.3.23":
|
||||
version "1.3.23"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.23.tgz#7a723c3e5360573b5c1d21e504e3c11cc3cc024c"
|
||||
integrity sha512-3nmdugj0SJIGWeCJBhvPWIfnE2Ax8H2KZsJfcaWmWg0SDh19aAt48Ncyd8WHHBandJmVm2fSjaANSjp+cS2S9A==
|
||||
"@swc/core-win32-arm64-msvc@1.3.24":
|
||||
version "1.3.24"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.24.tgz#85a18c844c00d66bf46db99d9c98e9550b4d28f5"
|
||||
integrity sha512-qhbiJTWAOqyR+K9xnGmCkOWSz2EmWpDBstEJCEOTc6FZiEdbiTscDmqTcMbCKaTHGu8t+6erVA4t65/Eg6uWPA==
|
||||
|
||||
"@swc/core-win32-ia32-msvc@1.3.23":
|
||||
version "1.3.23"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.23.tgz#43a439fc21144682e624d46ba4da5e7bb33b2629"
|
||||
integrity sha512-2AlGRhys1BsfLjXyWOd+5J/Ko2kkVQVuy3ZR8OBGy7XI54p0PpepabloYI9irr+4bi9vtyxoc5rS21PmJxB83Q==
|
||||
"@swc/core-win32-ia32-msvc@1.3.24":
|
||||
version "1.3.24"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.24.tgz#18318199ba06cab4ead8f6122b9f30b3f452b1e7"
|
||||
integrity sha512-JfghIlscE4Rz+Lc08lSoDh+R0cWxrISed5biogFfE6vZqhaDnw3E5Qshqw7O3pIaiq8L2u1nmzuyP581ZmpbRA==
|
||||
|
||||
"@swc/core-win32-x64-msvc@1.3.23":
|
||||
version "1.3.23"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.23.tgz#00ad332d847f2e3961d7bba4d1886dd767e1f92e"
|
||||
integrity sha512-qYKP8sIM7VVLuDb5BkRBoHy28OHZWrUhPTO7WgpErhVVM9wnzmMi/Jgg8SyfMy6oheBjO0QiwWbXONxBwByjnQ==
|
||||
"@swc/core-win32-x64-msvc@1.3.24":
|
||||
version "1.3.24"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.24.tgz#b53746787e5af021787134d393fd67b0431f90d9"
|
||||
integrity sha512-3AmJRr0hwciwDBbzUNqaftvppzS8v9X/iv/Wl7YaVLBVpPfQvaZzfqLycvNMGLZb5vIKXR/u58txg3dRBGsJtw==
|
||||
|
||||
"@swc/core@^1.3.23":
|
||||
version "1.3.23"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.3.23.tgz#62078fb161fad7edf7c8a8267cceccdeb2ab4a0d"
|
||||
integrity sha512-Aa7yw5+7ErOxr+G0J1eU2hkb9nEMSdt1Ye3isdAgg9mrsPuttk+cfLp6nP/Lux/VUnu5k4eOxeTy9UhjJhRAFw==
|
||||
version "1.3.24"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.3.24.tgz#ef6b30267c1bbd48af62cbc91370fe9b3f5d6a23"
|
||||
integrity sha512-QMOTd0AgiUT3K1crxLRqd3gw0f3FC8hhH1vvlIlryvYqU4c+FJ/T2G4ZhMKLxQlZ/jX6Rhk0gKINZRBxy2GFyQ==
|
||||
optionalDependencies:
|
||||
"@swc/core-darwin-arm64" "1.3.23"
|
||||
"@swc/core-darwin-x64" "1.3.23"
|
||||
"@swc/core-linux-arm-gnueabihf" "1.3.23"
|
||||
"@swc/core-linux-arm64-gnu" "1.3.23"
|
||||
"@swc/core-linux-arm64-musl" "1.3.23"
|
||||
"@swc/core-linux-x64-gnu" "1.3.23"
|
||||
"@swc/core-linux-x64-musl" "1.3.23"
|
||||
"@swc/core-win32-arm64-msvc" "1.3.23"
|
||||
"@swc/core-win32-ia32-msvc" "1.3.23"
|
||||
"@swc/core-win32-x64-msvc" "1.3.23"
|
||||
"@swc/core-darwin-arm64" "1.3.24"
|
||||
"@swc/core-darwin-x64" "1.3.24"
|
||||
"@swc/core-linux-arm-gnueabihf" "1.3.24"
|
||||
"@swc/core-linux-arm64-gnu" "1.3.24"
|
||||
"@swc/core-linux-arm64-musl" "1.3.24"
|
||||
"@swc/core-linux-x64-gnu" "1.3.24"
|
||||
"@swc/core-linux-x64-musl" "1.3.24"
|
||||
"@swc/core-win32-arm64-msvc" "1.3.24"
|
||||
"@swc/core-win32-ia32-msvc" "1.3.24"
|
||||
"@swc/core-win32-x64-msvc" "1.3.24"
|
||||
|
||||
"@types/json-schema@^7.0.9":
|
||||
version "7.0.11"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue