require("./../rur.js"); require("./../translator.js"); require("./../utils/key_exist.js"); require("./../utils/validator.js"); require("./../recorder/record_frame.js"); require("./artefact.js"); /** @function add_bridge * @memberof RUR * @instance * @summary This function sets a named "thing" as a bridge at that location. * There can be only one bridge at a given location. * * @param {string} name The name of a bridge. * @param {integer} x Position: `1 <= x <= max_x` * @param {integer} y Position: `1 <= y <= max_y` * * @throws Will throw an error if `(x, y)` is not a valid location. * @throws Will throw an error if `name` is not a known thing. * @throws Will throw an error if there is already a bridge at that location, * unless this is done from code in the Onload editor in which case the * new bridge replaces the old one and a message is written to the browser's * console. * */ RUR.add_bridge = function (name, x, y) { "use strict"; var args; name = RUR.translate_to_english(name); args = {name: name, x:x, y:y, type:"bridge", single:true, valid_names: RUR.KNOWN_THINGS}; if (RUR.get_bridge(x, y)) { if (RUR.state.evaluating_onload) { console.log(name + " is replacing " + RUR.translate(RUR.get_bridge(x, y)) + " as a bridge."); } else { throw new RUR.ReeborgError(RUR.translate("There is already a bridge here.")); } } RUR._add_artefact(args); RUR.record_frame("RUR.set_bridge", args); }; /** @function remove_bridge * @memberof RUR * @instance * @summary This function removes a bridge at a location. * * @param {string} name The name of a the "thing" used as a bridge. * @param {integer} x Position: `1 <= x <= max_x` * @param {integer} y Position: `1 <= y <= max_y` * * @throws Will throw an error if `(x, y)` is not a valid location. * @throws Will throw an error if there is no such named bridge to remove * at that location */ RUR.remove_bridge = function (name, x, y) { "use strict"; var args, english_name; english_name = RUR.translate_to_english(name); args= {x:x, y:y, type:"bridge", name:english_name, valid_names: RUR.KNOWN_THINGS}; if (RUR.get_bridge(x, y) == name) { RUR._remove_artefact(args); } else { throw new RUR.ReeborgError("No bridge named <code>" + name + "</code> to remove here."); } RUR.record_frame("RUR.remove_bridge", args); }; /** @function get_bridge * @memberof RUR * @instance * @summary This function gets the name of the bridge name found at given location. * If nothing is found at that location, * `null` is returned (which is converted to `None` in Python programs.) * * @param {integer} x Position: `1 <= x <= max_x` * @param {integer} y Position: `1 <= y <= max_y` * * @throws Will throw an error if `(x, y)` is not a valid location. * */ RUR.get_bridge = function (x, y) { "use strict"; var tile, args = {x:x, y:y, type:"bridge"}; tile = RUR._get_artefacts(args); if (tile === null) { return null; } else { return RUR.translate(tile[0]); } }; /** @function is_bridge * @memberof RUR * @instance * @summary This function returns `true/True` if a named bridge is present * at a given location, `false/False` otherwise * * @param {string} name The name of the bridge * @param {integer} x Position: `1 <= x <= max_x` * @param {integer} y Position: `1 <= y <= max_y` * * @throws Will throw an error if `(x, y)` is not a valid location. * */ RUR.is_bridge = function (name, x, y) { return RUR.get_bridge(x, y) == name; }; /** @function get_bridge_protections * @memberof RUR * @instance * @summary This function returns an array of "protections" given by a bridge at * that location. If no bridge is found, or if a bridge is found but offer no * protection, an empty array is returned. * * @param {integer} x Position: `1 <= x <= max_x` * @param {integer} y Position: `1 <= y <= max_y` * * @throws Will throw an error if `(x, y)` is not a valid location. * @returns {Array} An array of strings, each string being a protection * against a specific type of fatality; this could be an empty array. * */ RUR.get_bridge_protections = function (x, y) { "use strict"; var tile; tile = RUR.get_bridge(x, y); if (tile === null) { return []; } else { tile = RUR.translate_to_english(tile); } if (RUR.THINGS[tile].protections !== undefined) { return RUR.THINGS[tile].protections; } else { return []; } };