/* Path utilities useful for world creators */ require("./../rur.js"); /** @function print_path * @memberof RUR * @instance * @summary This function prints the path followed by the default robot, where * the values ['x', 'y'] are used to draw the trace on the screen. Values are * only appended to the path when they change; thus, turns and other actions * performed at a given location are ignored. * * */ RUR.print_path = function () { "use strict"; var history, i, path, world, prev_x, prev_y, x, y; world = RUR.get_current_world(); if (world.robots === undefined || world.robots.length === 0) { throw new RUR.ReeborgError("Missing robot; cannot print path."); } history = world.robots[0]._trace_history; path = []; prev_x = prev_y = -1; for (i=0; i < history.length; i++) { x = history[i]['grid_x']; y = history[i]['grid_y']; if (x != prev_x || y != prev_y) { path.push([x, y]); prev_x = x; prev_y = y; } } RUR._write_ln(path); }; /** @function check_path * @memberof RUR * @instance * @summary This function compares the path followed by the default robot * with that which was desired. * * @param {list} path A desired path, as printed by RUR.print_path. * * @returns {bool} True if the correct path was followed. * */ RUR.check_path = function (path) { "use strict"; var history, i, world, desired_x, desired_y, prev_x, prev_y, x, y; world = RUR.get_current_world(); if (world.robots === undefined || world.robots.length === 0) { throw new RUR.ReeborgError("Missing robot; cannot print path."); } history = world.robots[0]._trace_history; prev_x = prev_y = -1; for (i=0, j=0; i < history.length; i++) { x = history[i]['grid_x']; y = history[i]['grid_y']; if (x != prev_x || y != prev_y) { if (j> path.length) { return false; } desired_x = path[j][0]; desired_y = path[j][1]; prev_x = x; prev_y = y; if (x != desired_x || y != desired_y) { return false; } j++; } } if (path.length > j) { return false; } return true; };