StartSquare selection, distanceCalc changed in TowerSquare, new level with two StartS...
[AntiTD.git] / src / se / umu / cs / dit06ajnajs / util / LevelEditor.java
blobd93f21b422adc0ee9a16de514df173e639971d64
1 package se.umu.cs.dit06ajnajs.util;
3 import java.awt.BorderLayout;
4 import java.awt.Graphics;
5 import java.awt.Image;
6 import java.awt.event.MouseAdapter;
7 import java.awt.event.MouseEvent;
8 import java.util.logging.Level;
9 import java.util.logging.Logger;
10 import javax.swing.JComponent;
11 import javax.swing.JFrame;
12 import javax.swing.JPanel;
13 import se.umu.cs.dit06ajnajs.AntiTD;
14 import se.umu.cs.dit06ajnajs.map.Map;
15 import se.umu.cs.dit06ajnajs.map.MapSquare;
16 import se.umu.cs.dit06ajnajs.map.MapSquarePrototypeFactory;
17 import se.umu.cs.dit06ajnajs.util.LevelsXMLOutputter;
18 import javax.swing.JList;
19 import javax.swing.ListSelectionModel;
20 import javax.swing.DefaultListModel;
21 import javax.swing.event.ListSelectionListener;
22 import javax.swing.event.ListSelectionEvent;
23 import java.awt.event.ActionListener;
24 import java.awt.event.ActionEvent;
25 import javax.swing.JButton;
26 import java.io.Writer;
27 import java.io.FileWriter;
28 import java.io.File;
29 import java.io.IOException;
30 import java.net.URL;
31 import java.io.BufferedWriter;
33 public class LevelEditor extends JFrame {
34 private static Logger logger = Logger.getLogger("AntiTD.levelEditor");
36 private MapSquarePrototypeFactory factory =
37 MapSquarePrototypeFactory.getInstance();
38 private Map map;
39 private JComponent mapComponent;
40 private JList mapSquareList;
41 private String selectedMapSquareType;
43 public LevelEditor() {
44 int cols = 6;
45 int rows = 6;
47 MapSquare[][] mapMatrix = new MapSquare[cols][rows];
48 for (int c = 0; c < cols; c++) {
49 for (int r = 0; r < rows; r++) {
50 mapMatrix[c][r] = factory.createMapSquare("TowerSquare",
51 c * AntiTD.SQUARE_SIZE,
52 r * AntiTD.SQUARE_SIZE);
56 this.map = new Map("new map", mapMatrix);
57 createAndShowGUI();
60 public void createAndShowGUI() {
61 JPanel mainPanel = new JPanel(new BorderLayout());
62 this.mapComponent = new MapComponent();
63 mapComponent.addMouseListener(new MapListener());
64 mainPanel.add(mapComponent, BorderLayout.CENTER);
67 JPanel controlsPanel = new JPanel(new BorderLayout());
69 // JList mapSquares
70 DefaultListModel mapSquaresListModel = new DefaultListModel();
71 for (String type : factory.getMapSquareTypes()) {
72 mapSquaresListModel.addElement(type);
75 this.mapSquareList = new JList(mapSquaresListModel);
76 mapSquareList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
77 mapSquareList.addListSelectionListener(new MapSquareListListener());
79 controlsPanel.add(mapSquareList, BorderLayout.NORTH);
81 // Buttons
82 JButton saveButton = new JButton("Save Map");
83 saveButton.setActionCommand("saveMap");
84 saveButton.addActionListener(new ActionListener() {
85 public void actionPerformed(ActionEvent ae) {
86 System.out.println("Dude");
87 try {
88 URL dirURL = this.getClass().getResource("/resources/");
89 // TODO: fix outFile path and name
90 File outFile = new File(dirURL.getPath(), "anton-test.xml");
92 Writer writer = new BufferedWriter(new FileWriter(outFile));
94 LevelsXMLOutputter.outputMap(map, writer);
95 System.out.println("Wrote file");
96 } catch (IOException e) {
97 // TODO - fix error message
98 e.printStackTrace();
102 controlsPanel.add(saveButton, BorderLayout.SOUTH);
105 // Main
106 mainPanel.add(controlsPanel, BorderLayout.EAST);
108 this.add(mainPanel);
109 this.pack();
110 this.setTitle("MapEditor");
111 this.setVisible(true);
114 private class MapComponent extends JComponent {
116 public MapComponent() {
117 super();
118 this.setPreferredSize(map.getDimension());
121 @Override
122 public void paintComponent(Graphics g) {
123 logger.info("MapComponent paintComponent()");
124 Image img = map.getMapImage();
125 g.drawImage(img, 0, 0, null);
129 private class MapListener extends MouseAdapter {
130 @Override
131 public void mouseClicked(MouseEvent me) {
132 int x = me.getX();
133 int y = me.getY();
134 MapSquare square = map.getMapSquareAtPoint(x, y);
135 logger.info("Mouse clicked @ (" + x + ", " + y + ")");
136 logger.info("MapSquare @ " + square);
137 logger.info("Selected MapSquareType: " + selectedMapSquareType);
138 MapSquare newSquare = factory.createMapSquare(selectedMapSquareType,
139 square.getX(),
140 square.getY());
141 map.setMapSquareAtPoint(square.getX(), square.getY(), newSquare);
142 mapComponent.repaint();
147 * An inner class that handles selection changes in jeedViews item list.
149 private class MapSquareListListener implements ListSelectionListener {
150 public void valueChanged(ListSelectionEvent e) {
151 if (e.getValueIsAdjusting() == false) {
152 selectedMapSquareType = mapSquareList.getSelectedValue().toString();
158 public static void main(String[] args) {
159 new LevelEditor();
160 Logger.getLogger("AntiTD.levelEditor").setLevel(Level.INFO);