|
|
@@ -1,5 +1,6 @@
|
|
|
package gui.simulator;
|
|
|
|
|
|
+import com.sun.istack.internal.NotNull;
|
|
|
import gui.simulator.facilities.Stage;
|
|
|
|
|
|
import javax.swing.*;
|
|
|
@@ -9,6 +10,7 @@ import java.awt.event.MouseEvent;
|
|
|
import java.awt.event.MouseListener;
|
|
|
import java.awt.event.MouseWheelEvent;
|
|
|
import java.awt.geom.AffineTransform;
|
|
|
+import java.awt.geom.Area;
|
|
|
import java.awt.geom.Point2D;
|
|
|
import java.awt.geom.Rectangle2D;
|
|
|
import java.util.List;
|
|
|
@@ -21,7 +23,7 @@ public class Terrain extends JPanel {
|
|
|
private Draw dragObject, selectedObject;
|
|
|
|
|
|
public Terrain(){
|
|
|
- this.setBackground(Color.green);
|
|
|
+ this.setBackground(new Color(100, 255, 255, 255));
|
|
|
this.dragObject = null;
|
|
|
this.entities = new LinkedList();
|
|
|
this.initEntities();
|
|
|
@@ -50,7 +52,6 @@ public class Terrain extends JPanel {
|
|
|
@Override
|
|
|
public void mouseReleased(MouseEvent e) {
|
|
|
dragObject = null;
|
|
|
-// selectedObject = null;
|
|
|
}
|
|
|
});
|
|
|
|
|
|
@@ -59,8 +60,8 @@ public class Terrain extends JPanel {
|
|
|
public void mouseDragged(MouseEvent e) {
|
|
|
if(dragObject != null){
|
|
|
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)){
|
|
|
dragObject.setRotation(e.getX() * -1);
|
|
|
}
|
|
|
@@ -85,8 +86,8 @@ public class Terrain extends JPanel {
|
|
|
}
|
|
|
|
|
|
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
|
|
|
@@ -100,16 +101,44 @@ public class Terrain extends JPanel {
|
|
|
|
|
|
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());
|
|
|
-
|
|
|
-
|
|
|
AffineTransform backup = g2.getTransform();
|
|
|
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())));
|
|
|
-
|
|
|
g2.transform(trans);
|
|
|
g2.setColor(Color.RED);
|
|
|
g2.draw(shape);
|
|
|
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);
|
|
|
+ }
|
|
|
}
|