//dispenseAsset.js
(function () {
/* global adventurejs A */
var p = adventurejs.Game.prototype;
/**
* <pre class="display"><code class="language-javascript">MyGame.dispenseAsset({ "class":"foo", "name":"bar", [...] })</code></pre>
* <p>
* <strong>dispenseAsset()</strong> is a constructor function
* that can be used to dynamically create new
* {@link adventurejs.Asset|Assets} at runtime,
* which is to say, after the game has been initialized.
* This method encapsulates
* <a href="/doc/adventurejs.Game.html#createAsset">game.createAsset()</a>,
* <a href="/doc/adventurejs.Asset.html#validate">asset.validate()</a>
* and
* <a href="/doc/adventurejs.Asset.html#initialize">asset.initialize()</a>.
* The end result is equivalent to using createAsset()
* in your game file.
* </p>
* @memberOf adventurejs.Game
* @method adventurejs.Game#dispenseAsset
* @kind function
* @param {String} Class An asset class name.
* @param {String} aspect The aspect to move the new asset to.
* @returns {Object} target The asset to move the new asset to.
*/
p.dispenseAsset = p.dispense = function Game_dispenseAsset(
dispenser,
aspect,
Class
) {
const clas = Class.toLowerCase();
if (!A[Class]) return null;
const proto = {
class: Class,
name: clas,
id: clas + A.UID.get(),
is: { dispensed: true, fungible: true },
};
const asset = this.game.addAsset(proto);
if (!asset) return null;
asset.is.dispensed = true;
this.game.dispensed_assets[asset.id] = asset;
if (aspect && dispenser) {
// let results = asset.moveTo(aspect, dispenser);
// if ("undefined" !== typeof results) return results;
asset.moveTo(aspect, dispenser);
asset.dispensedto = Object.assign(asset.place);
}
return asset;
};
})();