UNPKG

@screeps/engine

Version:

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

79 lines (63 loc) 2.53 kB
var _ = require('lodash'), utils = require('../../../utils'), driver = utils.getDriver(), C = driver.constants; function oldEnergyHandling(spawn, cost, {roomObjects, bulk}){ var spawns = _.filter(roomObjects, i => i.type == 'spawn' && i.user == spawn.user && !i.off); var extensions = _.filter(roomObjects, i => i.type == 'extension' && i.user == spawn.user && !i.off); var availableEnergy = _.sum(extensions, 'store.energy') + _.sum(spawns, 'store.energy'); if(availableEnergy < cost) { return false; } spawns.sort(utils.comparatorDistance(spawn)); spawns.forEach((i) => { var neededEnergy = Math.min(cost, i.store.energy); i.store.energy -= neededEnergy; cost -= neededEnergy; bulk.update(i, {store:{energy: i.store.energy}}); }); if(cost <= 0) { return true; } extensions.sort(utils.comparatorDistance(spawn)); extensions.forEach((extension) => { if(cost <= 0) { return; } var neededEnergy = Math.min(cost, extension.store.energy); extension.store.energy -= neededEnergy; cost -= neededEnergy; bulk.update(extension, {store:{energy: extension.store.energy}}); }); return true; } function newEnergyHandling(spawn, cost, energyStructures, {roomObjects, bulk}){ energyStructures = _.filter(energyStructures, id => { let energyStructure = roomObjects[id]; return energyStructure && !energyStructure.off && energyStructure.user === spawn.user && (energyStructure.type === 'spawn' || energyStructure.type === 'extension'); }); energyStructures = _.uniq(energyStructures); let availableEnergy = _.sum(energyStructures, id => roomObjects[id].store.energy); if(availableEnergy < cost) { return false; } _.forEach(energyStructures, id => { let energyStructure = roomObjects[id]; let energyChange = Math.min(cost, energyStructure.store.energy); energyStructure.store.energy -= energyChange; bulk.update(energyStructure, {store:{energy: energyStructure.store.energy}}); cost -= energyChange; if(cost <= 0) { return false; } }); return true; } module.exports = function chargeEnergy(spawn, cost, energyStructures, scope) { if(energyStructures === undefined) { return oldEnergyHandling(spawn, cost, scope); } else { return newEnergyHandling(spawn, cost, energyStructures, scope); } };