128 lines
3.1 KiB
JavaScript
128 lines
3.1 KiB
JavaScript
var roleHarvester = require('role_harvester');
|
|
var roleUpgrader = require('role_upgrader');
|
|
var roleBuilder = require('role_builder');
|
|
var roleRepairer = require('role_repairer');
|
|
var roleGuard = require('role_guard');
|
|
var roleBase = require('role_base');
|
|
var roleEqualizer = require('role_equalizer');
|
|
var utils = require('util_etc');
|
|
|
|
const roleMap = {
|
|
harvester: roleHarvester,
|
|
upgrader: roleUpgrader,
|
|
builder: roleBuilder,
|
|
repairer: roleRepairer,
|
|
streltsy: roleGuard,
|
|
desatilnik: roleEqualizer
|
|
};
|
|
|
|
// calculates how much space there is for creeps next to
|
|
// energy sources, in order to have the perfect amount
|
|
function calculateTotalSourceSpace(room){
|
|
var sources = room.find(FIND_SOURCES);
|
|
|
|
var count = 0;
|
|
|
|
for(const source of sources){
|
|
count += utils.calculateSourceSpace(source);
|
|
}
|
|
|
|
return count;
|
|
}
|
|
|
|
function calculateCreepCounts(room){
|
|
var creepCounts = {
|
|
"harvester" : 3,
|
|
"builder" : 1,
|
|
"upgrader" : 1,
|
|
"repairer" : 1,
|
|
"streltsy" : 0,
|
|
"desatilnik" : 0
|
|
};
|
|
|
|
// 2 harvesters per source by default
|
|
creepCounts.harvester = calculateTotalSourceSpace(room);
|
|
|
|
if(room.memory.containers == 0){
|
|
|
|
// -1 harvester until at least a container built in order
|
|
// to reduce congestion
|
|
creepCounts.harvester -= 1;
|
|
}
|
|
|
|
// streltsy cost 400 energy, and thus cant be built
|
|
// you have at least 2 extensions (300+50+50)
|
|
// i guess there wouldnt be a big difference since
|
|
// they wouldnt spawn anyways, but whatever
|
|
if(room.memory.extensions >= 2){
|
|
creepCounts.streltsy += 2;
|
|
}
|
|
|
|
if(room.memory.extensions >= 3){
|
|
creepCounts.builder += 1;
|
|
creepCounts.upgrader += 1;
|
|
}
|
|
|
|
if(room.memory.containers >= 2){
|
|
creepCounts.desatilnik += 1;
|
|
}
|
|
|
|
|
|
room.memory.creepCounts = creepCounts;
|
|
}
|
|
|
|
function calculateCreepBodies(room){
|
|
var creepBodies = {
|
|
// 200 base cost
|
|
"harvester" : [WORK, CARRY, MOVE],
|
|
"builder" : [WORK, CARRY, MOVE],
|
|
"upgrader" : [WORK, CARRY, MOVE],
|
|
"repairer" : [WORK, CARRY, MOVE],
|
|
|
|
// 400 base cost
|
|
"streltsy" : [MOVE, MOVE, RANGED_ATTACK, RANGED_ATTACK],
|
|
"desatilnik" : [CARRY, CARRY, CARRY, MOVE, MOVE, MOVE]
|
|
};
|
|
|
|
// 400 cost
|
|
if(room.memory.extensions >= 2){
|
|
creepBodies.upgrader = [MOVE, MOVE, WORK, WORK, CARRY, CARRY];
|
|
creepBodes.builder = [MOVE, MOVE, WORK, WORK, CARRY, CARRY];
|
|
}
|
|
|
|
// 450 cost
|
|
if(room.memory.extensions >= 3){
|
|
creepBodies.harvester = [MOVE, MOVE, WORK, WORK, WORK, CARRY];
|
|
}
|
|
|
|
room.memory.creepBodies = creepBodies;
|
|
}
|
|
|
|
function runRole(creep){
|
|
const role = roleMap[creep.memory.role];
|
|
|
|
if(typeof role.run === 'function'){
|
|
role.run(creep);
|
|
} else {
|
|
console.log('Unknown or undefined role: ' + creep.memory.role);
|
|
}
|
|
}
|
|
|
|
function spawnCreeps(spawn){
|
|
calculateCreepCounts(spawn.room);
|
|
for(const [role, count] of Object.entries(spawn.room.memory.creepCounts)){
|
|
var roleCreeps = _.filter(Game.creeps, (creep) => creep.memory.role == role);
|
|
|
|
if(roleCreeps.length < count && !spawn.spawning) {
|
|
calculateCreepBodies(spawn.room);
|
|
if(typeof roleMap[role].spawn === 'function')
|
|
roleMap[role].spawn(spawn);
|
|
else
|
|
roleBase.spawn(spawn, roleMap[role].name);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = { runRole, spawnCreeps};
|