@screeps/engine
Version:
This is a module for Screeps standalone server. See [main repository](https://github.com/screeps/screeps) for more info.
104 lines (88 loc) • 3.47 kB
JavaScript
'use strict';
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 });
};
//# sourceMappingURL=../sourcemaps/game/store.js.map