From ce2b09291b9001f41e63d0b0402fc8aa81e2a937 Mon Sep 17 00:00:00 2001 From: Anton Johansson Date: Wed, 7 Jan 2009 02:05:53 +0100 Subject: [PATCH] StartSquare selection, distanceCalc changed in TowerSquare, new level with two StartSquares. New Interface for MapSquares, Clickable with method click, could be used for StartSquares and TurnSquares. --- README.org | 2 +- src/resources/levels.xml | 174 ++++++++---------------- src/se/umu/cs/dit06ajnajs/ATDController.java | 27 ++-- src/se/umu/cs/dit06ajnajs/ATDView.java | 36 ++++- src/se/umu/cs/dit06ajnajs/agent/Tower.java | 2 +- src/se/umu/cs/dit06ajnajs/map/Clickable.java | 5 + src/se/umu/cs/dit06ajnajs/map/Map.java | 10 ++ src/se/umu/cs/dit06ajnajs/map/MapSquare.java | 9 +- src/se/umu/cs/dit06ajnajs/map/StartSquare.java | 33 ++++- src/se/umu/cs/dit06ajnajs/util/LevelEditor.java | 4 +- 10 files changed, 159 insertions(+), 143 deletions(-) rewrite src/resources/levels.xml (93%) create mode 100644 src/se/umu/cs/dit06ajnajs/map/Clickable.java diff --git a/README.org b/README.org index dae4522..16f635c 100644 --- a/README.org +++ b/README.org @@ -37,8 +37,8 @@ ** TODO ImageObserver? Hur är det tänkt att det ska användas, t ex om man vill kolla getWidth(ImageObserver) på en BufferedImage. -** TODO Hämta nycklar från HashMap, Hashtable->Enumeration? ** TODO Decorator at runtime för att dekorera Agents? +** TODO Observer, observerar den automatiskt sig själv? * Planeringsmöten ** Första CLOCK: [2008-12-10 Wed 20:30]--[2008-12-11 Thu 00:36] => 4:06 diff --git a/src/resources/levels.xml b/src/resources/levels.xml dissimilarity index 93% index e93490c..a378de2 100644 --- a/src/resources/levels.xml +++ b/src/resources/levels.xml @@ -1,120 +1,54 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/se/umu/cs/dit06ajnajs/ATDController.java b/src/se/umu/cs/dit06ajnajs/ATDController.java index 2c7bffc..5a8a0ff 100644 --- a/src/se/umu/cs/dit06ajnajs/ATDController.java +++ b/src/se/umu/cs/dit06ajnajs/ATDController.java @@ -23,6 +23,7 @@ import se.umu.cs.dit06ajnajs.map.GoalSquare; import se.umu.cs.dit06ajnajs.map.StartSquare; import se.umu.cs.dit06ajnajs.map.Map; import se.umu.cs.dit06ajnajs.map.MapSquare; +import javax.swing.SwingUtilities; public class ATDController { private static Logger logger = Logger.getLogger("AntiTD"); @@ -52,7 +53,7 @@ public class ATDController { // Factory used to create units, Unit details are hardcoded in factory: // speed, cost etc AgentPrototypeFactory factory = AgentPrototypeFactory.getInstance(); - model.addAgent(factory.createUnit("FootmanUnit", 100, 200, + model.addAgent(factory.createUnit("FootmanUnit", 100 - 46, 200, Direction.UP, model.getMap())); model.addTower(new BasicTower(41, 41, 1, (int) (AntiTD.SQUARE_SIZE*1.5))); @@ -103,7 +104,7 @@ public class ATDController { Graphics g = view.getGameGraphics(); for (Agent agent : agents) { //TODO kan det finnas en agent som inte är paintable? - ((Paintable) agent).paint(g); + agent.paint(g); } // Refresh the game view @@ -132,19 +133,21 @@ public class ATDController { private class MapListener extends MouseAdapter { @Override public void mouseClicked(MouseEvent me) { - int x = me.getX(); - int y = me.getY(); + final int x = me.getX(); + final int y = me.getY(); + + // SwingUtilities.invokeLater(new Runnable() { + // public void run() { + // } + // }); Map map = model.getMap(); - MapSquare square = map.getMapSquareAtPoint(x, y); + final MapSquare square = map.getMapSquareAtPoint(x, y); logger.info("Mouse clicked @ (" + x + ", " + y + ")"); logger.info("MapSquare @ " + square); - - // TODO: use interface clickable on all MapSquares? - if (square instanceof StartSquare) { - ((StartSquare) square).setActive(true); - // TODO: set every other StartSquare as inactive - logger.info("StartSquare activated."); - } + square.click(); + view.updateBackgroundImage(); + //if (square instanceof StartSquare) {} + //if (square instanceof TurnSquare) {} } } diff --git a/src/se/umu/cs/dit06ajnajs/ATDView.java b/src/se/umu/cs/dit06ajnajs/ATDView.java index 2ad74d2..eb31e7b 100644 --- a/src/se/umu/cs/dit06ajnajs/ATDView.java +++ b/src/se/umu/cs/dit06ajnajs/ATDView.java @@ -21,6 +21,10 @@ import javax.swing.JPanel; import java.util.EventListener; import javax.swing.JButton; +import javax.swing.DefaultListModel; +import se.umu.cs.dit06ajnajs.agent.AgentPrototypeFactory; +import javax.swing.JList; +import javax.swing.ListSelectionModel; public class ATDView { private static Logger logger = Logger.getLogger("AntiTD"); @@ -30,7 +34,7 @@ public class ATDView { // Components private JFrame frame; - private JComponent gameComponent; + private GameComponent gameComponent; private Graphics2D gameGraphics; private Graphics2D gameBackgroundGraphics; @@ -74,8 +78,20 @@ public class ATDView { */ private JPanel createControlPanel() { JPanel resultPanel = new JPanel(new BorderLayout()); + + // JList unitTypes + DefaultListModel unitTypesListModel = new DefaultListModel(); + for (String type : AgentPrototypeFactory.getInstance().getUnitTypes()) { + unitTypesListModel.addElement(type); + } + + JList unitList= new JList(unitTypesListModel); + unitList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + resultPanel.add(unitList, BorderLayout.NORTH); + + // Release Button this.releaseUnitsButton = new JButton("Release Units"); - resultPanel.add(releaseUnitsButton, BorderLayout.NORTH); + resultPanel.add(releaseUnitsButton, BorderLayout.SOUTH); return resultPanel; } @@ -129,8 +145,16 @@ public class ATDView { * @return The Graphics used by Controller to create the Map background. */ public Graphics getBackgroundGraphics() { - return this.gameBackgroundGraphics; - } + return this.gameBackgroundGraphics; + } + + /** + * Updates the backgroundimage used, for example when MapSquare are changed + * during gameplay. + */ + public void updateBackgroundImage() { + this.gameComponent.updateBackgroundImage(); + } /** * Calls repaint on the GameComponent. @@ -165,6 +189,10 @@ public class ATDView { BufferedImage.TYPE_INT_ARGB); ATDView.this.gameGraphics = gameImage.createGraphics(); } + + public void updateBackgroundImage() { + this.backgroundImage = this.backgroundImage = model.getMapImage(); + } /** * Ovverrides standard paintComponent, used to only repaint information diff --git a/src/se/umu/cs/dit06ajnajs/agent/Tower.java b/src/se/umu/cs/dit06ajnajs/agent/Tower.java index bd6a815..b567c57 100644 --- a/src/se/umu/cs/dit06ajnajs/agent/Tower.java +++ b/src/se/umu/cs/dit06ajnajs/agent/Tower.java @@ -72,7 +72,7 @@ public abstract class Tower implements Paintable, Agent, Observer { int unitXPos = unitPoint.x; int unitYPos = unitPoint.y; - int distans = (int) Math.hypot((this.x - unitXPos), this.y - unitYPos); + int distans = (int) Math.hypot((this.centerX - unitXPos), this.centerY - unitYPos); System.out.println("Tower range: " + this.range); System.out.println("Distance to unit: " + distans); if (distansObservable value + * @param obj an Object value + */ + public void update(Observable observer, Object obj) { + logger.info("Update in StartSquare: active is set to false"); + this.active = false; + } } \ No newline at end of file diff --git a/src/se/umu/cs/dit06ajnajs/util/LevelEditor.java b/src/se/umu/cs/dit06ajnajs/util/LevelEditor.java index 1416ef6..d93f21b 100644 --- a/src/se/umu/cs/dit06ajnajs/util/LevelEditor.java +++ b/src/se/umu/cs/dit06ajnajs/util/LevelEditor.java @@ -41,8 +41,8 @@ public class LevelEditor extends JFrame { private String selectedMapSquareType; public LevelEditor() { - int cols = 10; - int rows = 10; + int cols = 6; + int rows = 6; MapSquare[][] mapMatrix = new MapSquare[cols][rows]; for (int c = 0; c < cols; c++) { -- 2.11.4.GIT