@screeps/engine
Version:
This is a module for Screeps standalone server. See [main repository](https://github.com/screeps/screeps) for more info.
59 lines (49 loc) • 2.28 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 });
}
};
//# sourceMappingURL=../../../sourcemaps/processor/intents/sources/tick.js.map