/
maps/
package mapmaker;

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;

import util.*;

public class MapFactory {

  public static final Object
    type_DescRoom = "DescRoom",
    type_VirtualRoom = "VirtualRoom";

  public Room createRoom(AreaMap map, Object roomType) {
    if (roomType == type_VirtualRoom)
      return new VirtualRoom(map);
    if (roomType == type_DescRoom)
      return new DescRoom(map);
    return null;
  } // createRoom

  public Link createLink(AreaMap map, 
			 Room room1, int exit1, 
			 Room room2, int exit2) {
    return new Link(map, room1, exit1, room2, exit2);
  } // createLink

  public Link createLink(AreaMap map, Link orgLink) {
    return new Link(map, orgLink);
  } // createLink

  /** sets up a working MVC pattern and returns a MapMVC
   * object containing its elements;
   */
  public static ExtendedMapMVC createMapMVC() {
    Observable obs = new MyObservable();
    CMap map = new CMap(20, 15, obs);
    MapEventHandler controller = new SimpleHandler(map);
    MapGraphics view = new MapGraphics(map, controller);
    JMap Jview = new JMap(obs, view);
    JComponent mapViewJStyle = new JScrollPane(Jview);
    DescViewer descViewer = new DescViewer(map);
    obs.addObserver(descViewer);
    // put mapView and descView into one Component
    JComponent viewJStyle = new JPanel();
    // add map view and description view from top to bottom
    viewJStyle.setLayout(new BoxLayout(viewJStyle, BoxLayout.Y_AXIS));
    viewJStyle.add(mapViewJStyle);
    viewJStyle.add(new JScrollPane(descViewer));
    // add listener for hotkeys
    Jview.addKeyListener(new HotkeyListener(descViewer));
    return new ExtendedMapMVC(map, viewJStyle, controller, view);
  } // createMapMCV

} // MapFactory