Pre-release
AdventureJS Docs Downloads
Score: 0 Moves: 0
// isConnectedToAsset.js
(function () {
  /* global adventurejs A */
  var p = adventurejs.Asset.prototype;
  /**
   * Check whether this asset is currently connected as a direct
   * object to the specified indirect object by the specified verb.
   * For example, in the case of a computer plugged into an outlet,
   * the computer would be the direct object, and calling this method
   * on it would return true.
   * @memberOf adventurejs.Asset
   * @method adventurejs.Asset#isConnectedToAsset
   * @param {String} verb The name of the verb to test.
   * @param {Object|String} asset A game asset or asset id to test.
   * @param {String} to_ov Connection to direct or indirect objects of verb.
   * @return {Boolean}
   */
  p.isConnectedToAsset = function Asset_isConnectedToAsset(verb, asset, to_ov) {
    if ("string" === typeof asset) asset = this.game.getAsset(asset);
    if (to_ov === "dov") to_ov = "to_dov";
    if (to_ov === "iov") to_ov = "to_iov";
    if (
      !asset ||
      !asset.id ||
      !verb ||
      !this.game.dictionary.verbs[verb] ||
      !this.is.connected_by ||
      !this.is.connected_by[verb] ||
      !Object.keys(this.is.connected_by[verb]).length
    ) {
      return false;
    }

    // received an ov
    if (to_ov === "to_dov" || to_ov === "to_iov") {
      if (
        this.is.connected_by[verb][to_ov] &&
        this.is.connected_by[verb][to_ov].includes(asset.id)
      ) {
        return true;
      }
    }
    // no ov provided, check both
    else {
      if (
        this.is.connected_by[verb].to_dov &&
        this.is.connected_by[verb].to_dov.includes(asset.id)
      ) {
        return true;
      }
      if (
        this.is.connected_by[verb].to_iov &&
        this.is.connected_by[verb].to_iov.includes(asset.id)
      ) {
        return true;
      }
    }

    return false;
  };
})();