Prechádzať zdrojové kódy

Added multi-terrain function

Supermaniac101 10 rokov pred
rodič
commit
5d80ec17ba

BIN
res/grass.jpg


BIN
res/sand.jpg


BIN
res/street.jpg


BIN
res/street2.jpg


+ 6 - 1
src/gui/frames/MainFrame.java

@@ -26,6 +26,7 @@ public class MainFrame extends JFrame{
     
     private int length;
     private int width;
+    private int terrain;
     
     public MainFrame(){
         this.agenda = new Agenda();
@@ -69,13 +70,17 @@ public class MainFrame extends JFrame{
                 this.updateView(new AgendaPane(this.agenda));
                 break;
             case SIMULATOR:
-                this.updateView(new SimulatorPane(this.agenda, this.length, this.width));
+                this.updateView(new SimulatorPane(this.agenda, this.length, this.width, this.terrain));
                 break;
             case TABLE:
                 this.updateView(new Table(this.agenda));
                 break;
         }
     }
+    
+    public void setTerrain(int number){
+    	this.terrain = number;
+    }
 
     public void setLength(int length){
     	this.length = length;

+ 1 - 1
src/gui/simulator/Draw.java

@@ -32,7 +32,7 @@ public abstract class Draw {
         AffineTransform transform = new AffineTransform();
         transform.translate(this.x, this.y);
         transform.scale(this.scale, this.scale);
-        transform.rotate(Math.toRadians(this.rotation), this.image.getWidth(null) / 2, this.image.getHeight(null) / 2);
+        transform.rotate(Math.toRadians(this.rotation), this.image.getWidth(null) /2 , this.image.getHeight(null) / 2);
         return transform;
     }
 

+ 40 - 0
src/gui/simulator/SimulatorDialogPane.java

@@ -13,6 +13,7 @@ import java.awt.event.ActionListener;
 import javax.swing.BorderFactory;
 import javax.swing.BoxLayout;
 import javax.swing.JButton;
+import javax.swing.JComboBox;
 import javax.swing.JDialog;
 import javax.swing.JOptionPane;
 import javax.swing.JPanel;
@@ -22,10 +23,14 @@ public class SimulatorDialogPane extends JDialog{
 
 	    private JTextField length;
 	    private JTextField width;
+	    private JComboBox<String> terrain;
 	    private MainFrame mainFrame;
+	    private int terrainInt;
+	    
 	    
 	    public SimulatorDialogPane(MainFrame mainFrame){
 	    	this.mainFrame = mainFrame;
+	    	this.terrainInt = 1;
 	        this.getContentPane().setBackground( Color.WHITE );
 	        JPanel main = new JPanel();
 	        main.setOpaque(false);
@@ -36,6 +41,7 @@ public class SimulatorDialogPane extends JDialog{
 	        main.add(label);
 	        main.add(this.widthPanel());
 	        main.add(this.lengthPanel());
+	        main.add(this.terrainChoosePanel());
 	        main.add(this.buttons());
 	        main.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
 	        
@@ -76,6 +82,39 @@ public class SimulatorDialogPane extends JDialog{
 	        name.add(this.width);
 	        return name;
 	    }
+	    private JPanel terrainChoosePanel(){
+	        JPanel name = new JPanel();
+	        name.setOpaque(false);
+	        name.setLayout(new BoxLayout(name, BoxLayout.X_AXIS));
+	        name.setBorder(BorderFactory.createEmptyBorder(10, 0, 10, 0));
+	        Label label = new Label("Terrain");
+	        label.setBackground(Color.WHITE);
+	        label.setFont(new Font("Arial", Font.PLAIN, 11));
+	        name.add(label);
+	        String[] terrainStrings = { "Beach", "Grass", "Urban"};
+	        this.terrain = new JComboBox<String>(terrainStrings);
+	        this.terrain.setSelectedIndex(1);
+	        this.terrain.addActionListener(new ActionListener(){
+	            public void actionPerformed(ActionEvent e) {
+	                JComboBox<String> cb = (JComboBox<String>)e.getSource();
+	                String terrainName = (String)cb.getSelectedItem();
+	                switch(terrainName){
+	                case "Beach": setTerrainInt(1);
+	                			  break;
+	                case "Grass": setTerrainInt(2);
+	                			  break;
+	                case "Urban": setTerrainInt(3);
+	                		 	  break;
+	                }
+	            }});
+	        name.add(this.terrain);
+	        return name;
+	    }
+	    
+	    private void setTerrainInt(int number){
+	    	this.terrainInt = number;
+	    }
+
 
 	    private JPanel buttons(){
 	        JPanel buttons = new JPanel();
@@ -109,6 +148,7 @@ public class SimulatorDialogPane extends JDialog{
 	            	int width = Integer.parseInt(this.width.getText());
 	            	this.mainFrame.setLength(length);
 	            	this.mainFrame.setWidth(width);
+	            	this.mainFrame.setTerrain(terrainInt);
 	            	this.mainFrame.changeView(MainFrame.Views.SIMULATOR);
 	                dispose();
 	            }

+ 2 - 2
src/gui/simulator/SimulatorPane.java

@@ -12,12 +12,12 @@ public class SimulatorPane extends JPanel{
 	
 	private Agenda agenda;
 
-	public SimulatorPane(Agenda agenda, int length, int width){
+	public SimulatorPane(Agenda agenda, int length, int width, int terrain){
         super.setLayout(new BorderLayout());
 		this.agenda = agenda;
         this.setOpaque(true);
         this.setBackground(Color.WHITE);
         this.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
-        this.add(new Terrain(length, width), BorderLayout.CENTER);
+        this.add(new Terrain(length, width, terrain), BorderLayout.CENTER);
 	}
 }

+ 28 - 15
src/gui/simulator/Terrain.java

@@ -29,12 +29,13 @@ import javax.swing.SwingUtilities;
 public class Terrain extends JPanel {
 
     private List<Draw> entities;
-    private Point2D offset, oldLocation;
+    private Point2D offset;
     private Draw dragObject, selectedObject;
     private BufferedImage background;
     
     private int length;
     private int width;
+    private int terrain;
     
     Point2D cameraPoint = new Point2D.Double(1920/2,1080/2);
 	float cameraScale = 1;
@@ -42,15 +43,36 @@ public class Terrain extends JPanel {
 	Point2D lastClickPosition;
 	Point lastMousePosition;
 
-    public Terrain(int length, int width){
+    public Terrain(int length, int width, int terrain){
     	this.length = length;
     	this.width = width;
+    	this.terrain = terrain;
     	
-    	try {
-			background = ImageIO.read(new File("res/grass.jpg"));
+    	switch(terrain){
+    	case 1: 
+    		try {
+			background = ImageIO.read(new File("res/sand.jpg"));
 		} catch (IOException e) {
 			e.printStackTrace();
 		}
+    		break;
+    	case 2:
+    		try {
+    			background = ImageIO.read(new File("res/grass.jpg"));
+    		} catch (IOException e) {
+    			e.printStackTrace();
+    		}
+    		break;
+    	case 3:
+    		try {
+    			background = ImageIO.read(new File("res/street.jpg"));
+    		} catch (IOException e) {
+    			e.printStackTrace();
+    		}
+    		break;
+    	}
+    	
+    	
         this.dragObject = null;
         this.entities = new LinkedList();
         this.initEntities();
@@ -68,10 +90,8 @@ public class Terrain extends JPanel {
                         offset = new Point2D.Double(e.getX() - drawObject.getX(), e.getY() - drawObject.getY());
                         selectedObject = dragObject;
                         newObject = true;
-                        oldLocation = new Point2D.Double(drawObject.getX(), drawObject.getY());
                     }
                 }
-
                 if(!newObject){
                     selectedObject = null;
                 }
@@ -80,16 +100,7 @@ public class Terrain extends JPanel {
 
             @Override
             public void mouseReleased(MouseEvent e) {
-                for(Draw draw: entities){
-                    if(!draw.equals(selectedObject)){
-                        if(intersection(draw, selectedObject)){
-                            selectedObject.setX(oldLocation.getX());
-                            selectedObject.setY(oldLocation.getY());
-                        }
-                    }
-                }
                 dragObject = null;
-                repaint();
             }
         });
 
@@ -174,8 +185,10 @@ public class Terrain extends JPanel {
 
             if(collide){
                 g2.setColor(new Color(254, 0, 0, 128));
+
             }else{
                 g2.setColor(new Color(0, 254, 0, 128));
+
             }
 
             g2.fill(this.drawDragRectangle(this.selectedObject));