blairanderson
7/12/2013 - 7:19 PM

this is a 3d robot simulator

this is a 3d robot simulator

Plane2D = function() {
  var directions = ["north", "east", "south", "west"];
  this.rightOf = function(direction){
    var currentIndex = directions.indexOf(direction);
    return directions[(currentIndex+1 + directions.length) % directions.length]
  }

 this.leftOf = function(direction){
    var currentIndex = directions.indexOf(direction);
    return directions[(currentIndex-1 + directions.length) % directions.length]
  }

  this.advance = function(location, direction) {
    if (direction == 'north') {
      return Plane2D.make(
        location.x,
        location.y + 1
      )
    } else {
      throw "unknown direction: " + direction
    }
  }
}


// Plane3D

Plane2D.origin = function() {
  return {x: 0, y: 0}
}

Plane2D.make = function(x, y) {
  return {x: x, y: y}
}
Plane3D = function() {
  var directions = ["north", "east", "south", "west", "up"];
  this.rightOf = function(direction){
    var currentIndex = directions.indexOf(direction);
    return directions[(currentIndex+1 + directions.length) % directions.length]
  }

 this.leftOf = function(direction){
    var currentIndex = directions.indexOf(direction);
    return directions[(currentIndex-1 + directions.length) % directions.length]
  }

  this.advance = function(location, direction) {
    if (direction == 'up') {
      return Plane3D.make(
        location.x,
        location.y,
        location.z + 1
      );
    } else {
      throw "unknown direction: " + direction;
    }
  };
};


// Plane3D

Plane3D.origin = function() {
  return {x: 0, y: 0, z: 0};
};

Plane3D.make = function(x, y, z) {
  return {x: x, y: y, z: z}
};
// Location
Location = function(plane, coordinates, direction){
  this._plane = plane;
  this._coordinates = coordinates;
  this._direction = direction;

  // .forward() // -> return a new location
  this.forward = function() {
    return new Location(
      this._plane,
      this._plane.advance(this._coordinates, this._direction),
      this._direction
    );
  }

  this.rotateRight = function() {
    return new Location(
      this._plane,
      this._coordinates,
      this._plane.rightOf(this._direction)
    )
  }
  this.rotateLeft = function() {
    return new Location(
      this._plane, 
      this._coordinates,
      this._plane.leftOf(this._direction)
    )
  }
}

Robot = function() {


  this.location = new Location(
    new Plane2D(),
    Plane2D.origin(),
    'north'
  )

  this.orient = function (direction){
    this.location._direction = direction
  };

  this.at = function (l){
    this.location = l
  };

  this.growWings = function () {
    this.location = new Location(
      new Plane3D,
      Plane3D.origin(),
      "north")
  }

  this.coordinates = function(){
    return this.location._coordinates
  }

  this.advance = function () {
    this.at(this.location.forward())
  }

  this.bearing = function (){
    return this.location._direction
  }
  this.turnRight = function() {
    this.location = this.location.rotateRight()
  }
  this.turnLeft = function() {
    this.location = this.location.rotateLeft()
  }
  

}

Simulator = function() {

}