@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
JavaScript
;
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