@screeps/engine
Version:
This is a module for Screeps standalone server. See [main repository](https://github.com/screeps/screeps) for more info.
55 lines (45 loc) • 2.04 kB
JavaScript
'use strict';
var _ = require('lodash'),
utils = require('../../../utils'),
driver = utils.getDriver(),
C = driver.constants;
module.exports = function (object, scope) {
const roomObjects = scope.roomObjects,
bulk = scope.bulk,
roomController = scope.roomController,
energyAvailable = scope.energyAvailable,
gameTime = scope.gameTime;
if (!object || object.type != 'spawn') return;
if (object.spawning) {
const effect = _.find(object.effects, { power: C.PWR_DISRUPT_SPAWN });
if (effect && effect.endTime > gameTime) {
bulk.update(object, { spawning: { spawnTime: 1 + object.spawning.spawnTime } });
} else {
if (gameTime >= object.spawning.spawnTime - 1) {
const spawningCreep = _.find(roomObjects, { type: 'creep', name: object.spawning.name, x: object.x, y: object.y });
const bornOk = require('./_born-creep')(object, spawningCreep, scope);
if (bornOk) {
bulk.update(object, { spawning: null });
} else {
bulk.update(object, { spawning: { spawnTime: 1 + gameTime } });
}
}
}
}
if (!roomController || roomController.level < 1 || roomController.user != object.user) {
return;
}
var spawns = _.filter(roomObjects, { type: 'spawn' });
if (spawns.length > C.CONTROLLER_STRUCTURES.spawn[roomController.level]) {
spawns.sort(utils.comparatorDistance(roomController));
spawns = _.take(spawns, C.CONTROLLER_STRUCTURES.spawn[roomController.level]);
if (!_.contains(spawns, object)) {
return;
}
}
if (!object.tutorial && energyAvailable < C.SPAWN_ENERGY_CAPACITY && object.store.energy < C.SPAWN_ENERGY_CAPACITY) {
object.store.energy++;
bulk.update(object, { store: { energy: object.store.energy } });
}
};
//# sourceMappingURL=../../../sourcemaps/processor/intents/spawns/tick.js.map