@screeps/engine
Version:
This is a module for Screeps standalone server. See [main repository](https://github.com/screeps/screeps) for more info.
102 lines (86 loc) • 3.39 kB
JavaScript
var _ = require('lodash'),
utils = require('./../utils'),
driver = utils.getRuntimeDriver(),
C = driver.constants;
var runtimeData, intents, register, globals;
exports.make = function(_runtimeData, _intents, _register, _globals) {
runtimeData = _runtimeData;
intents = _intents;
register = _register;
globals = _globals;
if (globals.Store) {
return;
}
var Store = register.wrapFn(function(object) {
Object.entries(object.store).forEach(([resourceType, resourceAmount]) => {
if(resourceAmount) {
this[resourceType] = resourceAmount;
}
});
Object.defineProperties(this, {
getCapacity: {
value: function getCapacity(resource) {
if(!resource) {
return object.storeCapacityResource ? null : object.storeCapacity || null;
}
return utils.capacityForResource(object, resource) || null;
}
},
getUsedCapacity: {
value: function getUsedCapacity(resource) {
if(!resource) {
if(!!object.storeCapacityResource && (utils.capacityForResource(object, resource) === 0)) {
return null;
}
if(this._sum === undefined) {
Object.defineProperty(this, '_sum', {
value: _.sum(object.store)
});
}
return this._sum;
}
return object.store[resource] || (!!object.storeCapacityResource && utils.capacityForResource(object, resource) === 0 ? null : 0);
}
},
getFreeCapacity: {
value: function getFreeCapacity(resource) {
if(utils.capacityForResource(object, resource) === 0) {
return null;
}
if(!object.storeCapacity) {
return this.getCapacity(resource) - this.getUsedCapacity(resource);
}
const capacity = this.getCapacity(resource);
if(!capacity) {
return null;
}
if(object.storeCapacityResource) {
return capacity - this.getUsedCapacity(resource);
}
if(this._sum === undefined) {
Object.defineProperty(this, '_sum', {
value: _.sum(object.store)
});
}
return capacity - this._sum;
}
},
toString: {
value: function toString() {
return `[store]`;
}
}
});
return new Proxy(this, {
get(target, name) {
if(target[name] !== undefined) {
return target[name];
}
if(C.RESOURCES_ALL.indexOf(name) !== -1) {
return 0;
}
}
});
});
Object.defineProperty(globals, 'Store', {enumerable: true, value: Store});
};