Add a Task system
This commit is contained in:
parent
216d44ab5c
commit
3922f367a2
12 changed files with 499 additions and 28 deletions
49
src/Tasks/Harvest.ts
Normal file
49
src/Tasks/Harvest.ts
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
import profiler from "screeps-profiler";
|
||||
import { TaskData, TaskStatus, TaskType } from "./Task";
|
||||
|
||||
interface HarvestOptions {
|
||||
stopWhenFull: boolean;
|
||||
}
|
||||
|
||||
interface HarvestData {
|
||||
resource: ResourceConstant;
|
||||
};
|
||||
|
||||
const defaultOptions: HarvestOptions = {
|
||||
stopWhenFull: true,
|
||||
};
|
||||
|
||||
export const Harvest
|
||||
= (target: Source | Mineral<MineralConstant>,
|
||||
opts: Partial<HarvestOptions> = {}): TaskData => ({
|
||||
target,
|
||||
targetPos: target.pos,
|
||||
type: TaskType.Harvest,
|
||||
options: { ...defaultOptions, ...opts },
|
||||
data: {
|
||||
resource: target instanceof Source
|
||||
? RESOURCE_ENERGY
|
||||
: target.mineralType,
|
||||
},
|
||||
});
|
||||
|
||||
export const runHarvest = profiler.registerFN((creep: Creep): TaskStatus => {
|
||||
const task = creep.task;
|
||||
if (task == null) {
|
||||
return TaskStatus.DONE;
|
||||
}
|
||||
|
||||
const target = task.target as Source | Mineral<MineralConstant> | null;
|
||||
const opts = task.options as HarvestOptions;
|
||||
const data = task.data as HarvestData;
|
||||
|
||||
if (opts.stopWhenFull && creep.store.getFreeCapacity(data.resource) == 0) {
|
||||
return TaskStatus.DONE;
|
||||
}
|
||||
|
||||
if (target == null
|
||||
|| creep.harvest(target) === ERR_NOT_IN_RANGE) {
|
||||
creep.travelTo(task.targetPos);
|
||||
}
|
||||
return TaskStatus.IN_PROGRESS;
|
||||
}, "runHarvest");
|
||||
Loading…
Add table
Add a link
Reference in a new issue