Quellcode durchsuchen

A lot of camera and mouseevent fixes, still not 100% bug free

DaveyMathijssen vor 10 Jahren
Ursprung
Commit
ed31ead660
2 geänderte Dateien mit 63 neuen und 53 gelöschten Zeilen
  1. 5 1
      src/gui/simulator/Draw.java
  2. 58 52
      src/gui/simulator/Terrain.java

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

@@ -1,13 +1,16 @@
 package gui.simulator;
 
 import javax.imageio.ImageIO;
+
 import java.awt.*;
 import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
 import java.awt.geom.Rectangle2D;
 import java.io.IOException;
 
 /**
  * Created by gjoosen on 07/03/15.
+ * Edited by master D Mathijssen on 17-3-2015 and some other days
  */
 public abstract class Draw {
 
@@ -39,11 +42,12 @@ public abstract class Draw {
         g.drawImage(this.image, this.getAffineTransform(), null);
     }
 
-    public boolean contains(Point point){
+    public boolean contains(Point2D point){
         Shape shape = new Rectangle2D.Double(0, 0, image.getWidth(null), image.getHeight(null));
         return this.getAffineTransform().createTransformedShape(shape).contains(point);
     }
 
+    //getters and setters down here
     public double getX() {
         return x;
     }

+ 58 - 52
src/gui/simulator/Terrain.java

@@ -13,12 +13,13 @@ import java.awt.Shape;
 import java.awt.TexturePaint;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
+import java.awt.event.MouseMotionAdapter;
 import java.awt.event.MouseWheelEvent;
+import java.awt.event.MouseWheelListener;
 import java.awt.geom.*;
 import java.awt.image.BufferedImage;
 import java.io.File;
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
 
@@ -29,13 +30,14 @@ import javax.swing.SwingUtilities;
 public class Terrain extends JPanel {
 
     private List<Draw> entities;
-    private Point2D offset, oldPosition;
+    private Point2D oldPosition;
     private Draw dragObject, selectedObject;
     private BufferedImage background;
     
     private int length, width;
+    private int sideBarWidth = 200;
     private SimulatorPane.Terrains terrain;
-    Point2D cameraPoint = new Point2D.Double(1920/2,1080/2);
+    Point2D cameraPoint = new Point2D.Double(width/2,length/2);
 	float cameraScale = 1;
 	
 	Point2D lastClickPosition;
@@ -77,36 +79,41 @@ public class Terrain extends JPanel {
         this.listeners();
     }
 
+    private void getFacility(MouseEvent e){
+    	Point2D clickPoint = getClickPoint(e.getPoint());
+    	if(e.getX() < 200)
+		{
+			if(e.getY() < 300){
+				dragObject = new Stage((int)clickPoint.getX(),(int)clickPoint.getY(), 0.5, 10);
+			}else if(e.getY() > 300 && e.getY() < 600){
+				dragObject = new RestRoom((int)clickPoint.getX(),(int)clickPoint.getY(), 0.5, 10);
+			}else if(e.getY() > 600 && e.getY() < 900){
+				//dragObject = new custom facility
+			}
+			else if(e.getY() > 900 && e.getY() < 1200){
+				//dragObject = new custom facility
+			}
+			entities.add(dragObject);
+		}
+    }
     private void listeners(){
         addMouseListener(new MouseAdapter() {
             @Override
             public void mousePressed(MouseEvent e) {
-            	lastMousePosition = e.getPoint();
             	Point2D clickPoint = getClickPoint(e.getPoint());
-                boolean newObject = false;
-                if(e.getX() < 200)
-				{
-					if(e.getY() < 300){
-						dragObject = new Stage((int)clickPoint.getX(),(int)clickPoint.getY(), 0.5, 10);
-						offset = new Point2D.Double(e.getX() - dragObject.getX(), e.getY() - dragObject.getY());
-					}else if(e.getY() > 300 && e.getY() < 600){
-						dragObject = new RestRoom((int)clickPoint.getX(),(int)clickPoint.getY(), 0.5, 10);
-						offset = new Point2D.Double(e.getX() - dragObject.getX(), e.getY() - dragObject.getY());
-					}
-					entities.add(dragObject);
-				}
-                for(Draw drawObject: entities){
-                    if(drawObject.contains(e.getPoint())){
-                        dragObject = drawObject;
-                        offset = new Point2D.Double(e.getX() - drawObject.getX(), e.getY() - drawObject.getY());
-                        selectedObject = dragObject;
-                        newObject = true;
-                        oldPosition = new Point2D.Double(selectedObject.getX(), selectedObject.getY());
-                    }
-                }
-                if(!newObject){
-                    selectedObject = null;
-                    //map dragging
+				lastClickPosition = clickPoint;
+				lastMousePosition = e.getPoint();
+                //if selected in sidebar
+				getFacility(e);
+                //else selected in terrain
+                if(e.getX() > sideBarWidth){
+	                for(Draw drawObject: entities){
+	                    if(drawObject.contains(clickPoint)){
+	                        dragObject = drawObject;
+	                        selectedObject = dragObject;
+	                        oldPosition = new Point2D.Double(selectedObject.getX(), selectedObject.getY());
+	                    }
+	                }
                 }
                 repaint();
             }
@@ -125,22 +132,22 @@ public class Terrain extends JPanel {
                         }
                     }
                 }
-
+                selectedObject = null;
                 dragObject = null;
                 repaint();
             }
         });
 
-        addMouseMotionListener(new MouseAdapter() {
+        addMouseMotionListener(new MouseMotionAdapter() {
             @Override
             public void mouseDragged(MouseEvent e) {
             	Point2D clickPoint = getClickPoint(e.getPoint());
                 if(dragObject != null){
                     if(SwingUtilities.isLeftMouseButton(e)){
-                            dragObject.setX(e.getX() - offset.getX());
-                            dragObject.setY(e.getY() - offset.getY());
+                    		dragObject.setX(dragObject.getX() - (lastClickPosition.getX() - clickPoint.getX()));
+                    		dragObject.setY(dragObject.getY() - (lastClickPosition.getY() - clickPoint.getY()));
                     }else if(SwingUtilities.isRightMouseButton(e)){
-                        dragObject.setRotation(e.getX() * -1);
+                    	dragObject.rotation += (lastClickPosition.getX() - clickPoint.getX() + lastClickPosition.getY() - clickPoint.getY());
                     }
                 }
                 else
@@ -149,35 +156,30 @@ public class Terrain extends JPanel {
 							cameraPoint.getX() + (lastMousePosition.getX() - e.getX()),
 							cameraPoint.getY() + (lastMousePosition.getY() - e.getY())
 							);
-					repaint();
 				}
+                repaint();
 				lastMousePosition = e.getPoint();
 				lastClickPosition = clickPoint;
-                repaint();
             }
         });
-
-        addMouseWheelListener(new MouseAdapter() {
+        
+        addMouseWheelListener(new MouseWheelListener() {
             @Override
             public void mouseWheelMoved(MouseWheelEvent e) {
+            	Point2D clickPoint = getClickPoint(e.getPoint());
                 for(Draw object: entities){
-                    if(object.contains(e.getPoint())){
-                        double scale = object.getScale();
-                        scale *= 1 + (e.getPreciseWheelRotation() / 10);
-                        object.setScale(scale);
-                    }else{
-                    	cameraScale *= 1 - (e.getPreciseWheelRotation()/10.0);
-//                    	if(e.getWheelRotation() == -1){
-//                    		cameraScale++;
-//                    	}else if(e.getWheelRotation() == 1){
-//                    		cameraScale--;
-//                    	}
+                	//if object selected, scale object
+                    if(object.contains(clickPoint)){
+                    	object.scale *= 1 + (e.getPreciseWheelRotation()/10.0);
+						repaint();
+						return;
                     }
                 }
+                //scale camera
+            	cameraScale *= 1 - (e.getPreciseWheelRotation()/10.0);
             	repaint();
             }
         });
-        
     }
 
     private void initEntities(){
@@ -191,7 +193,7 @@ public class Terrain extends JPanel {
         Graphics2D g2 = (Graphics2D) g;
         
         //draw sidebar
-        g2.setClip(new Rectangle2D.Double(0,0, 200, getHeight()));
+        g2.setClip(new Rectangle2D.Double(0,0, sideBarWidth, getHeight()));
         g2.setColor(Color.GRAY);
         g2.fill3DRect(0, 0, 200, 50, true);
         g2.setColor(Color.WHITE);
@@ -210,15 +212,18 @@ public class Terrain extends JPanel {
 		
 		//draw simulation field
 		g2.setClip(new Rectangle2D.Double(200, 0, getWidth()-200, getHeight()));
+		AffineTransform oldTransform = g2.getTransform();
 		g2.translate(200,0);
 		g2.setTransform(getCamera());
         TexturePaint p = new TexturePaint(background, new Rectangle2D.Double(0, 0, 500, 500));
 		g2.setPaint(p);
 		g2.fill(new Rectangle2D.Double(0,0,width,length));
-        for(Draw drawObject: entities){
+        
+		for(Draw drawObject: entities){
             drawObject.draw(g2); 
         }
-
+		
+		//draw collide boxes 
         if(this.selectedObject != null){
             Shape shape = this.selectedObject.getRect();
             g2.setColor(Color.RED);
@@ -240,6 +245,7 @@ public class Terrain extends JPanel {
             }
             g2.fill(this.selectedObject.getAffineTransform().createTransformedShape(this.selectedObject.getRect()));
             g2.setClip(null);
+            g2.setTransform(oldTransform);
         }
     }