/
maps/
package mapmaker;

import java.awt.*;
import java.lang.*;
import java.util.*;

import mapmaker.mapcmd.*;
import util.*;

/** part of a Map
 */
public interface Room 
  extends Node {
  
  /** executes the given RoomCommand; which commands are accepted
   * depends on the implementing class
   */
  public void execute(RoomCommand cmd);

  /** creates a deep-copy of the given room's data (except links!)
   * and replaces its own data with it
   * @param orgRoom the room to be copied
   */
  public void deepCopyFrom(Room orgRoom);

  /** creates a new instance of its class, initializes it by calling
   * deepCopyFrom and returns it
   * @param map the map of the new room
   */
  public Room cloneRoom(AreaMap map);

  /** returns the room's position on the map
   */
  public Point getPos();

  /** returns the link at the given direction
   */
  public Link getLink(int dir);

  /** should only be called by Map or Link object;
   */
  public void setLink(Link link, int dir);

  public boolean exitLinked(int dir);

  public boolean exitBlocked(int dir);

  /** returns the direction of the exit that link is stored at
   * @param link must be one of the links connected to room
   */
  public int getExitDir(Link link);
  
  /** should only be called by a link for self-destruction
   */
  public void unlink(Link link);

  /** should only be called by Map parent
   */
  public void suicide();
  
  /** returns the exit that points the "best" in the direction
   * of the give room among the free ones;
   * if no free exits returns -1
   */
  public int bestFreeExitTo(Room target);

  /** return the Room objects linked to the room
   * @param upDownToo if false, does not return rooms linked
   * over 'up' or 'down' exits
   */
  public Set neighbours(Object upDownToo);

  /** returns wether the room is marked
   */
  public boolean getMarked();

  public NamedColor getColor();

} // Room