Browse Source

New features added. (intersection)

Gilian Joosen 10 years ago
parent
commit
fc8e0344c8

+ 7 - 2
src/gui/simulator/Draw.java

@@ -13,8 +13,9 @@ public abstract class Draw {
 
 
     private Image image;
     private Image image;
     private double x, y, rotation, scale;
     private double x, y, rotation, scale;
+    private double distanceToOtherObjects;
 
 
-    public Draw(String image, int x, int y, double scale){
+    public Draw(String image, int x, int y, double scale, double distanceToOtherObjects){
         try{
         try{
             System.out.println(getClass().getResource(image));
             System.out.println(getClass().getResource(image));
             this.image = ImageIO.read(getClass().getResource(image));
             this.image = ImageIO.read(getClass().getResource(image));
@@ -24,6 +25,7 @@ public abstract class Draw {
         this.x = x;
         this.x = x;
         this.y = y;
         this.y = y;
         this.scale = scale;
         this.scale = scale;
+        this.distanceToOtherObjects = distanceToOtherObjects;
     }
     }
 
 
     public AffineTransform getAffineTransform(){
     public AffineTransform getAffineTransform(){
@@ -78,8 +80,11 @@ public abstract class Draw {
     public int getHeight(){
     public int getHeight(){
         return this.image.getHeight(null);
         return this.image.getHeight(null);
     }
     }
-
     public double getRotation() {
     public double getRotation() {
         return rotation;
         return rotation;
     }
     }
+
+    public double getDistanceToOtherObjects() {
+        return distanceToOtherObjects;
+    }
 }
 }

+ 38 - 9
src/gui/simulator/Terrain.java

@@ -1,5 +1,6 @@
 package gui.simulator;
 package gui.simulator;
 
 
+import com.sun.istack.internal.NotNull;
 import gui.simulator.facilities.Stage;
 import gui.simulator.facilities.Stage;
 
 
 import javax.swing.*;
 import javax.swing.*;
@@ -9,6 +10,7 @@ import java.awt.event.MouseEvent;
 import java.awt.event.MouseListener;
 import java.awt.event.MouseListener;
 import java.awt.event.MouseWheelEvent;
 import java.awt.event.MouseWheelEvent;
 import java.awt.geom.AffineTransform;
 import java.awt.geom.AffineTransform;
+import java.awt.geom.Area;
 import java.awt.geom.Point2D;
 import java.awt.geom.Point2D;
 import java.awt.geom.Rectangle2D;
 import java.awt.geom.Rectangle2D;
 import java.util.List;
 import java.util.List;
@@ -21,7 +23,7 @@ public class Terrain extends JPanel {
     private Draw dragObject, selectedObject;
     private Draw dragObject, selectedObject;
 
 
     public Terrain(){
     public Terrain(){
-        this.setBackground(Color.green);
+        this.setBackground(new Color(100, 255, 255, 255));
         this.dragObject = null;
         this.dragObject = null;
         this.entities = new LinkedList();
         this.entities = new LinkedList();
         this.initEntities();
         this.initEntities();
@@ -50,7 +52,6 @@ public class Terrain extends JPanel {
             @Override
             @Override
             public void mouseReleased(MouseEvent e) {
             public void mouseReleased(MouseEvent e) {
                 dragObject = null;
                 dragObject = null;
-//                selectedObject = null;
             }
             }
         });
         });
 
 
@@ -59,8 +60,8 @@ public class Terrain extends JPanel {
             public void mouseDragged(MouseEvent e) {
             public void mouseDragged(MouseEvent e) {
                 if(dragObject != null){
                 if(dragObject != null){
                     if(SwingUtilities.isLeftMouseButton(e)){
                     if(SwingUtilities.isLeftMouseButton(e)){
-                        dragObject.setX(e.getX() - offset.getX());
-                        dragObject.setY(e.getY() - offset.getY());
+                            dragObject.setX(e.getX() - offset.getX());
+                            dragObject.setY(e.getY() - offset.getY());
                     }else if(SwingUtilities.isRightMouseButton(e)){
                     }else if(SwingUtilities.isRightMouseButton(e)){
                         dragObject.setRotation(e.getX() * -1);
                         dragObject.setRotation(e.getX() * -1);
                     }
                     }
@@ -85,8 +86,8 @@ public class Terrain extends JPanel {
     }
     }
 
 
     private void initEntities(){
     private void initEntities(){
-        this.entities.add(new Stage(10, 10, 0.5));
-        this.entities.add(new Stage(100, 40, 2));
+        this.entities.add(new Stage(10, 10, 0.5, 10));
+        this.entities.add(new Stage(200, 40, 2, 10));
     }
     }
 
 
     @Override
     @Override
@@ -100,16 +101,44 @@ public class Terrain extends JPanel {
 
 
         if(this.selectedObject != null){
         if(this.selectedObject != null){
             Shape shape = new Rectangle2D.Double(this.selectedObject.getX(), this.selectedObject.getY() , this.selectedObject.getWidth() * this.selectedObject.getScale(), this.selectedObject.getHeight() * this.selectedObject.getScale());
             Shape shape = new Rectangle2D.Double(this.selectedObject.getX(), this.selectedObject.getY() , this.selectedObject.getWidth() * this.selectedObject.getScale(), this.selectedObject.getHeight() * this.selectedObject.getScale());
-
-
             AffineTransform backup = g2.getTransform();
             AffineTransform backup = g2.getTransform();
             AffineTransform trans = new AffineTransform();
             AffineTransform trans = new AffineTransform();
             trans.rotate(Math.toRadians(this.selectedObject.getRotation()), (this.selectedObject.getX() + (this.selectedObject.getWidth() / 2 * this.selectedObject.getScale())),(this.selectedObject.getY() +  (this.selectedObject.getHeight() /2 * this.selectedObject.getScale())));
             trans.rotate(Math.toRadians(this.selectedObject.getRotation()), (this.selectedObject.getX() + (this.selectedObject.getWidth() / 2 * this.selectedObject.getScale())),(this.selectedObject.getY() +  (this.selectedObject.getHeight() /2 * this.selectedObject.getScale())));
-
             g2.transform(trans);
             g2.transform(trans);
             g2.setColor(Color.RED);
             g2.setColor(Color.RED);
             g2.draw(shape);
             g2.draw(shape);
             g2.transform(backup);
             g2.transform(backup);
+
+            boolean collide = false;
+            for(Draw draw: entities){
+                if(!draw.equals(this.selectedObject)){
+                    if(intersection(draw, this.selectedObject)){
+                        collide = true;
+                    }
+                }
+            }
+
+            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));
         }
         }
     }
     }
+
+    private Rectangle drawDragRectangle(Draw shape){
+        Rectangle rectangle = null;
+        rectangle = new Rectangle((int) (shape.getX() - shape.getDistanceToOtherObjects()), (int) (shape.getY() - shape.getDistanceToOtherObjects()), (int) (shape.getWidth() * shape.getScale() + (2 * shape.getDistanceToOtherObjects())), (int) (shape.getHeight() * shape.getScale() + (2 * shape.getDistanceToOtherObjects())));
+        return rectangle;
+    }
+
+    private boolean intersection(Draw d1, Draw d2){
+        Rectangle2D.Double s1 = new Rectangle2D.Double(d1.getX() - d1.getDistanceToOtherObjects(), d1.getY() - d1.getDistanceToOtherObjects(), d1.getWidth() * d1.getScale() + (2*d1.getDistanceToOtherObjects()) , d1.getHeight() * d1.getScale() + (2*d1.getDistanceToOtherObjects()));
+        Rectangle2D.Double s2 = new Rectangle2D.Double(d2.getX() - d2.getDistanceToOtherObjects(), d2.getY() - d2.getDistanceToOtherObjects(), d2.getWidth() * d2.getScale() + (2*d2.getDistanceToOtherObjects()) , d2.getHeight() * d2.getScale() + (2*d2.getDistanceToOtherObjects()));
+        return s1.intersects(s2);
+    }
 }
 }

+ 3 - 3
src/gui/simulator/facilities/Stage.java

@@ -10,10 +10,10 @@ import java.io.IOException;
 public class Stage extends Draw {
 public class Stage extends Draw {
 
 
     public Stage(int x, int y) {
     public Stage(int x, int y) {
-        super("/simulator/tent.png", x, y, 1);
+        super("/simulator/tent.png", x, y, 1, 0);
     }
     }
 
 
-    public Stage(int x, int y, double scale) {
-        super("/simulator/tent.png", x, y, scale);
+    public Stage(int x, int y, double scale, double distance) {
+        super("/simulator/tent.png", x, y, scale, distance);
     }
     }
 }
 }