UNPKG

@screeps/engine

Version:

This is a module for Screeps standalone server. See [main repository](https://github.com/screeps/screeps) for more info.

87 lines (70 loc) 2.7 kB
'use strict'; var _ = require('lodash'), utils = require('../../../utils'), driver = utils.getDriver(), C = driver.constants; function oldEnergyHandling(spawn, roomObjects, cost, bulk) { var spawns = _.filter(roomObjects, function (i) { return i.type == 'spawn' && i.user == spawn.user && !i.off; }); var extensions = _.filter(roomObjects, function (i) { return i.type == 'extension' && i.user == spawn.user && !i.off; }); var availableEnergy = _.sum(extensions, 'energy') + _.sum(spawns, 'energy'); if (availableEnergy < cost) { return false; } spawns.sort(utils.comparatorDistance(spawn)); spawns.forEach(function (i) { var neededEnergy = Math.min(cost, i.energy); i.energy -= neededEnergy; cost -= neededEnergy; bulk.update(i, { energy: i.energy }); }); if (cost <= 0) { return true; } extensions.sort(utils.comparatorDistance(spawn)); extensions.forEach(function (extension) { if (cost <= 0) { return; } var neededEnergy = Math.min(cost, extension.energy); extension.energy -= neededEnergy; cost -= neededEnergy; bulk.update(extension, { energy: extension.energy }); }); return true; } function newEnergyHandling(spawn, roomObjects, cost, bulk, energyStructures) { energyStructures = _.filter(energyStructures, function (id) { var energyStructure = roomObjects[id]; return energyStructure && !energyStructure.off && energyStructure.user === spawn.user && (energyStructure.type === 'spawn' || energyStructure.type === 'extension'); }); energyStructures = _.uniq(energyStructures); var availableEnergy = _.sum(energyStructures, function (id) { return roomObjects[id].energy; }); if (availableEnergy < cost) { return false; } _.forEach(energyStructures, function (id) { var energyStructure = roomObjects[id]; var energyChange = Math.min(cost, energyStructure.energy); energyStructure.energy -= energyChange; bulk.update(energyStructure, { energy: energyStructure.energy }); cost -= energyChange; if (cost <= 0) { return false; } }); return true; } module.exports = function chargeEnergy(spawn, roomObjects, cost, bulk, energyStructures) { if (energyStructures === undefined) { return oldEnergyHandling(spawn, roomObjects, cost, bulk); } else { return newEnergyHandling(spawn, roomObjects, cost, bulk, energyStructures); } }; //# sourceMappingURL=../../../sourcemaps/processor/intents/spawns/_charge-energy.js.map