Adding source code to respository.
This commit is contained in:
92
creeps.js
Normal file
92
creeps.js
Normal file
@@ -0,0 +1,92 @@
|
||||
|
||||
/* ###################################################################
|
||||
# An inherited creep class and a module to expose it to the loop. #
|
||||
###################################################################*/
|
||||
|
||||
const roles = require("roles");
|
||||
|
||||
module.exports = {
|
||||
|
||||
configure: function () {
|
||||
// Replaces the creep class by the MyCreep class which changes the type of all Creep objects as well.
|
||||
Creep.prototype = MyCreep.prototype;
|
||||
setConstants();
|
||||
// configure all creeps (in case new memory requirements).
|
||||
for (const name in Game.creeps) {
|
||||
Game.creeps[name].configure();
|
||||
}
|
||||
},
|
||||
|
||||
// All creeps execute their roles every tick.
|
||||
execute: function () {
|
||||
for (const name in Game.creeps) {
|
||||
Game.creeps[name].execute();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class MyCreep extends Creep {
|
||||
configure() {
|
||||
}
|
||||
|
||||
execute() {
|
||||
switch (this.memory.role) {
|
||||
case roles.ROLE_HARVESTER: roles.harvest(this);
|
||||
break;
|
||||
case roles.ROLE_MINER:
|
||||
if (this.goTo(this.memory.container_id)) {
|
||||
this.harvestSource();
|
||||
}
|
||||
break;
|
||||
case roles.ROLE_SUPPLIER: roles.supply(this);
|
||||
break;
|
||||
case roles.ROLE_BUILDER: roles.build(this);
|
||||
break;
|
||||
case roles.ROLE_UPGRADER: roles.upgrade(this);
|
||||
break;
|
||||
case roles.ROLE_DEFENDER: roles.defend(this);
|
||||
break;
|
||||
case roles.ROLE_RESERVER: roles.reserve(this);
|
||||
break;
|
||||
case roles.ROLE_RESERVED_HARVESTER: roles.harvest_reserved(this);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Moves to the object with given id. Returns true if arrived.
|
||||
goTo(id) {
|
||||
const target = Game.getObjectById(id)
|
||||
if (target != null) {
|
||||
if (this.pos.isEqualTo(target.pos)) return true;
|
||||
this.moveTo(target);
|
||||
} else {
|
||||
console.log(this.name + " can't find object with id: " + id);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// harvests set or closest source, moves to it if to far and return true if fully loaded.
|
||||
harvestSource() {
|
||||
if (this.memory.source_id == undefined) {
|
||||
this.memory.source_id = this.pos.findClosestByPath(FIND_SOURCES).id;
|
||||
}
|
||||
const result = this.harvest(Game.getObjectById(this.memory.source_id));
|
||||
if (result == ERR_NOT_IN_RANGE) this.goTo(this.memory.source_id);
|
||||
return this.store.getFreeCapacity(RESOURCE_ENERGY) == 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
function setConstants() {
|
||||
global.HARVESTER = 0;
|
||||
global.MINER = 1;
|
||||
global.SUPPLIER = 2;
|
||||
global.BUILDER = 3;
|
||||
global.UPGRADER = 4;
|
||||
global.DEFENDER = 5;
|
||||
global.RESERVER = 6;
|
||||
global.RESERVED_HARVESTER = 7;
|
||||
}
|
||||
Reference in New Issue
Block a user