@screeps/engine
Version:
This is a module for Screeps standalone server. See [main repository](https://github.com/screeps/screeps) for more info.
60 lines (48 loc) • 2.17 kB
JavaScript
var _ = require('lodash'),
utils = require('../../../utils'),
driver = utils.getDriver(),
C = driver.constants;
module.exports = function(object, {bulk, roomController, gameTime}) {
if(!object || object.type != 'source') return;
if(object.energy < object.energyCapacity) {
if(!object.nextRegenerationTime) {
object.nextRegenerationTime = gameTime + C.ENERGY_REGEN_TIME;
bulk.update(object, {nextRegenerationTime: object.nextRegenerationTime});
}
var effect = _.find(object.effects, {power: C.PWR_DISRUPT_SOURCE});
if(effect && effect.endTime > gameTime) {
bulk.update(object, {
nextRegenerationTime: object.nextRegenerationTime+1
});
}
if(gameTime >= object.nextRegenerationTime-1) {
bulk.update(object, {
nextRegenerationTime: null,
energy: object.energyCapacity
});
}
effect = _.find(object.effects, {power: C.PWR_REGEN_SOURCE});
if(effect && effect.endTime > gameTime) {
const powerInfo = C.POWER_INFO[C.PWR_REGEN_SOURCE];
if(((effect.endTime - gameTime - 1) % powerInfo.period) === 0) {
bulk.update(object, {
energy: Math.min(object.energyCapacity, object.energy + powerInfo.effect[effect.level - 1])
});
}
}
}
if(roomController) {
if (!roomController.user && !roomController.reservation && object.energyCapacity != C.SOURCE_ENERGY_NEUTRAL_CAPACITY) {
bulk.update(object, {
energyCapacity: C.SOURCE_ENERGY_NEUTRAL_CAPACITY,
energy: Math.min(object.energy, C.SOURCE_ENERGY_NEUTRAL_CAPACITY)
});
}
if ((roomController.user || roomController.reservation) && object.energyCapacity != C.SOURCE_ENERGY_CAPACITY) {
bulk.update(object, {energyCapacity: C.SOURCE_ENERGY_CAPACITY});
}
}
else if(object.energyCapacity != C.SOURCE_ENERGY_KEEPER_CAPACITY) {
bulk.update(object, {energyCapacity: C.SOURCE_ENERGY_KEEPER_CAPACITY});
}
};