UNPKG

@screeps/engine

Version:

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

54 lines (45 loc) 1.77 kB
var _ = require('lodash'), utils = require('../../../utils'), driver = utils.getDriver(), C = driver.constants; module.exports = function(object, intent, roomObjects, roomTerrain, bulk) { if(object.cooldown > 0) { return; } var lab1 = roomObjects[intent.lab1]; if(!lab1 || lab1.type != 'lab' || lab1.mineralAmount < C.LAB_REACTION_AMOUNT) { return; } if(Math.abs(lab1.x - object.x) > 2 || Math.abs(lab1.y - object.y) > 2) { return; } var lab2 = roomObjects[intent.lab2]; if(!lab2 || lab2.type != 'lab' || lab2.mineralAmount < C.LAB_REACTION_AMOUNT) { return; } if(Math.abs(lab2.x - object.x) > 2 || Math.abs(lab2.y - object.y) > 2) { return; } if(object.mineralAmount > object.mineralCapacity - C.LAB_REACTION_AMOUNT) { return; } if(!C.REACTIONS[lab1.mineralType][lab2.mineralType] || object.mineralType && object.mineralType != C.REACTIONS[lab1.mineralType][lab2.mineralType]) { return; } bulk.update(object, { mineralAmount: object.mineralAmount + C.LAB_REACTION_AMOUNT, cooldown: C.LAB_COOLDOWN }); if(!object.mineralType) { bulk.update(object, {mineralType: C.REACTIONS[lab1.mineralType][lab2.mineralType]}); } bulk.update(lab1, {mineralAmount: lab1.mineralAmount - C.LAB_REACTION_AMOUNT}); if(!lab1.mineralAmount) { bulk.update(lab1, {mineralType: null}); } bulk.update(lab2, {mineralAmount: lab2.mineralAmount - C.LAB_REACTION_AMOUNT}); if(!lab2.mineralAmount) { bulk.update(lab2, {mineralType: null}); } object.actionLog.runReaction = {x1: lab1.x, y1: lab1.y, x2: lab2.x, y2: lab2.y}; };