|  | "use strict";
/*jshint browser: true*/
/*jshint devel: true*/
let NORTH = 0;
let NORTH_EAST = 1;
let EAST = 2;
let SOUTH_EAST = 3;
let SOUTH = 4;
let SOUTH_WEST = 5;
let WEST = 6;
let NORTH_WEST = 7;
let startLocation = "Bedroom";
let locations = {};
let locationsSrc = [
  {
    "name": "Bedroom",
    "desc": "A bedroom",
    "conn": [
      {
        "name": "Bathroom",
        "dir": EAST
      },
      {
        "name": "Living Room",
        "dir": NORTH
      }
    ]
  },
  {
    "name": "Bathroom",
    "desc": "The bathroom",
    "conn": [
    ]
  },
  {
    "name": "Living Room",
    "desc": "A bare living room",
    "conn": [
      {
        "name": "Street",
        "dir": NORTH
      }
    ]
  },
  {
    "name": "Street",
    "desc": "It's a street",
    "conn": [
      {
        "name": "Alley",
        "dir": WEST
      }
    ]
  },
  {
    "name": "Alley",
    "desc": "A suspicious alley",
    "conn": [
    ]
  }
]
function Location(name="Nowhere",desc="Nada") {
  this.name = name;
  this.description = desc;
  this.exits = [null,null,null,null,null,null,null,null];
  this.objects = [];
}
function opposite(direction) {
  return (direction + 4) % 8;
}
function connectLocations(loc1,loc2,loc1Exit) {
  if (loc1.exits[loc1Exit] != null) {
    alert(loc1.name + " is already connected to " + loc1.exits[loc1Exit].name);
    return;
  } else if (loc2.exits[opposite(loc1Exit)] != null) {
    alert(loc2.name + " is already connected to " + loc2.exits[opposite(loc1Exit)].name);
    return;
  } else {
    if (loc1Exit >= 0 && loc1Exit <= 7) {
      loc1.exits[loc1Exit] = loc2;
      loc2.exits[opposite(loc1Exit)] = loc1;
    }
  }
}
function createWorld() {
  for (let i = 0; i < locationsSrc.length; i++) {
    let src = locationsSrc[i];
    let location = new Location(src.name,src.desc);
    locations[src.name] = location;
  }
  for (let i = 0; i < locationsSrc.length; i++) {
    let src = locationsSrc[i];
    let from = locations[src.name];
    for (let j = 0; j < src.conn.length; j++) {
      let to = locations[src.conn[j].name];
      connectLocations(from, to, src.conn[j].dir);
    }
  }
  return locations[startLocation];
}
 |