/**
  * handles all events
  *
  * @param e the event to handle
  */
 @Override
 public void handleModelChangeEvent(ModelChangeEvent e) {
   displayMessage(e.getMessage());
   drawList = e.getDrawable();
   for (Drawable2D drawable : drawList) {
     if (drawable.getClass().equals(Player2D.class)) {
       player = (Player2D) drawable;
     }
     if (drawable.getClass().equals(Room2D.class)) {
       mapArea.setCurrentRoom((Room) drawable);
     }
     if (drawable.getClass().equals(Item2D.class)) {
       if (player.collidesWith(drawable)) {
         collidingWithObject = drawable;
       }
     }
   }
   drawArea.updateDrawable(drawList);
 }
  /**
   * Constructor for the 2D view, creates JPanel within a frame and initializes the list of
   * listeners (input and drawable)
   */
  public View2D() {
    super();

    drawList = new ArrayList<Drawable2D>();

    mainWindow = new JFrame("World of the Nameless");
    mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    // mainWindow.setBounds(100, 100, 730, 480);
    mainWindow.setResizable(false);
    mainWindow.setLayout(new BorderLayout());
    mainWindow.setVisible(true);

    drawArea = new Drawable2DArea();
    drawArea.addMouseListener(this);
    mapArea = new MapPanel();

    JPanel buttonPanel = new JPanel(new GridLayout(2, 4));

    inventoryButton = new JButton("Inventory");
    inventoryButton.addActionListener(this);

    characterButton = new JButton("Character");
    characterButton.addActionListener(this);

    helpButton = new JButton("Help");
    helpButton.addActionListener(this);

    quitButton = new JButton("Quit");
    quitButton.addActionListener(this);

    undoButton = new JButton("Undo");
    undoButton.addActionListener(this);

    redoButton = new JButton("Redo");
    redoButton.addActionListener(this);

    saveButton = new JButton("Save");
    saveButton.addActionListener(this);

    buttonPanel.add(inventoryButton);
    buttonPanel.add(characterButton);
    buttonPanel.add(undoButton);
    buttonPanel.add(redoButton);
    buttonPanel.add(helpButton);
    buttonPanel.add(quitButton);
    buttonPanel.add(saveButton);

    textAreaPanel = new JPanel(new BorderLayout());

    textArea = new JTextArea();
    textArea.setEditable(false);
    textArea.setToolTipText("What is happening to me");

    // JScrollPane scrollPane = new JScrollPane(textArea);

    JPanel inputFieldPane = new JPanel(new BorderLayout());

    inputField = new JTextField();
    inputField.addActionListener(this);
    inputField.setToolTipText("Input Text commands here");

    JLabel inputLabel = new JLabel(" >");

    inputFieldPane.add(inputLabel, BorderLayout.WEST);
    inputFieldPane.add(inputField, BorderLayout.CENTER);

    textAreaPanel.add(textArea, BorderLayout.CENTER);
    textAreaPanel.add(inputFieldPane, BorderLayout.SOUTH);

    JPanel infoPanel = new JPanel(new GridLayout(2, 1));

    infoPanel.add(mapArea);
    infoPanel.add(textAreaPanel);

    JPanel gameContent = new JPanel(new GridLayout(1, 2));

    gameContent.add(drawArea);
    gameContent.add(infoPanel);
    gameContent.setToolTipText("Game Visuals");

    mainWindow.add(gameContent, BorderLayout.CENTER);
    mainWindow.add(buttonPanel, BorderLayout.SOUTH);
    mainWindow.pack();
  }