Pre-release
AdventureJS Docs Downloads
Score: 0 Moves: 0
// getRoomDescription.js

(function () {
  /* global adventurejs A */

  var p = adventurejs.Game.prototype;

  /**
   * Get room description to print to game display.
   * Includes input, room name, and room description.
   * Defaults to current room, but can accept a room param.
   * Calling the function with params.verbose set to true
   * will override global verbosity settings and try to
   * print a verbose description.
   * <br><br>
   * For example:
   * <pre class="code">getRoomDescription( { verbose: true } )</pre>
   * @method adventurejs.Game#getRoomDescription
   * @memberOf adventurejs.Game
   * @param {Object} params
   * @todo Formalize handling for description/brief/verbose descriptions
   */
  p.getRoomDescription = function Game_printRoom(params = {}) {
    this.game.log(
      "L1584",
      "log",
      1,
      `[getRoomDescription.js] get ${this.world._room} description`,
      "Game"
    );

    const { verbose = false, room = this.world[this.world._room] } = params;

    var player = this.game.getPlayer();
    var desc = "description";
    var v = this.settings.verbosity;
    var output = "";

    // first get room name
    if (room.is.dark && this.game.settings.name_for_dark_rooms) {
      output =
        output +
        `<span class="ajs-p ajs-room-name ajs-dark-room">${this.game.settings.name_for_dark_rooms}</span>`;
    } else {
      output = output + `<span class="ajs-p ajs-room-name">${room.name}</span>`;
    }

    // first visit or params.verbose=true used by look / examine
    if (
      params.verbose ||
      (!player.hasSeen(room) &&
        this.settings.print_verbose_room_descriptions_on_first_visit)
    ) {
      v = 1;
    }

    // try to choose a description based on verbosity setting
    // ensure that author has written something
    if (1 === v && !room.descriptions.verbose) v = 0;
    if (-2 === v && !room.descriptions.briefer) v = -1;
    if (-1 === v && !room.descriptions.brief) v = 0;
    switch (v) {
      case -2:
        desc = "briefer";
        break;
      case -1:
        desc = "brief";
        break;
      case 1:
        desc = "verbose";
        break;
      default:
        desc = "look";
        break;
    }

    if (room.is.dark) {
      desc = "dark";
    }
    if ("undefined" === typeof room.descriptions[desc]) desc = "look";

    output +=
      this.game.getModifiedDescription({
        asset: room,
        identifier: desc,
        find_modifiers: true,
        fallback_base: false,
      }) || this.game.getDescription({ asset: room, identifier: desc });

    // dockmsg =
    //   dockmsg +
    //   this.print(
    //     output,
    //     `${room.is.dark ? "ajs-dark-room" : ""} ajs-room-description`
    //   );

    // let exits = "";
    // if (this.game.settings.print_room_exits && !room.is.dark) {
    //   exits = this.printRoomExits();
    // }

    // let contents = "";
    // if (this.game.settings.print_room_contents && !room.is.dark) {
    //   contents = this.printRoomContents();
    // }

    // print to room dock
    // if (this.display.roomdocks.length) {
    //   dockmsg = `<div class="ajs-room-description-container">${dockmsg}</div>`;

    //   if (exits && this.game.settings.include_exits_in_room_docks) {
    //     dockmsg = dockmsg + `<div class="ajs-exits-container">${exits}</div>`;
    //   }

    //   if (contents && this.game.settings.include_contents_in_room_docks) {
    //     dockmsg =
    //       dockmsg + `<div class="ajs-contents-container">${contents}</div>`;
    //   }

    //   dockmsg = `<div class="ajs-roomdock-output ajs-output">${dockmsg}</div>`;

    //   for (let item in this.display.roomdocks) {
    //     let dock = this.display.roomdocks[item];
    //     dock.innerHTML = dockmsg;
    //   }
    // }

    // print to exit dock
    // if (this.display.exitdocks.length) {
    //   dockmsg = `<div class="ajs-exits-container">${exits}</div>`;

    //   for (let item in this.display.exitdocks) {
    //     let dock = this.display.exitdocks[item];
    //     dock.innerHTML = dockmsg;
    //   }
    // }

    // print to contents dock
    // if (this.display.contentdocks.length) {
    //   dockmsg = `<div class="ajs-contents-container">${contents}</div>`;

    //   for (let item in this.display.contentdocks) {
    //     let dock = this.display.contentdocks[item];
    //     dock.innerHTML = dockmsg;
    //   }
    // }

    return output;
  };
})();