UNPKG

@screeps/engine

Version:

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

64 lines (52 loc) 1.9 kB
'use strict'; const _ = require('lodash'), utils = require('../../../../utils'), driver = utils.getDriver(), C = driver.constants, fakeRuntime = require('../../../common/fake-runtime'), defence = require('./defence'); exports.createSafeMatrixCallback = function createSafeMatrixCallback(context) { const hostiles = context.hostiles, ramparts = context.ramparts, roomObjects = context.roomObjects; if (!_.some(hostiles)) { return; } const safeMatrixCallback = function safeMatrixCallback(room) { const matrix = new fakeRuntime.CostMatrix(); for (let i = 0; i < 50; i++) for (let j = 0; j < 50; j++) matrix.set(i, j, Infinity); for (let rampart of ramparts) { matrix.set(rampart.x, rampart.y, 1); } _.forEach(roomObjects, object => { if (object.type != 'creep' && _.includes(C.OBSTACLE_OBJECT_TYPES, object.type)) { matrix.set(object.x, object.y, Infinity); } }); return matrix; }; return safeMatrixCallback; }; exports.distribute = function (positions, agents) { if (!_.some(agents)) { return {}; } if (agents.length > positions.length) { agents = agents.slice(0, positions.length); } const result = {}, weights = _.map(positions, p => { return { pos: p, weight: 100 }; }); while (_.some(agents)) { const creep = agents.shift(); const place = _.max(weights, 'weight'); _.pull(weights, place); result[50 * place.pos.x + place.pos.y] = creep; _.forEach(weights, w => { w.weight -= Math.max(0, _.size(weights) - utils.dist(w.pos, place.pos)); }); } return result; }; //# sourceMappingURL=../../../../sourcemaps/processor/intents/invader-core/stronghold/defence.js.map