|
|
@@ -14,11 +14,7 @@ import java.awt.TexturePaint;
|
|
|
import java.awt.event.MouseAdapter;
|
|
|
import java.awt.event.MouseEvent;
|
|
|
import java.awt.event.MouseWheelEvent;
|
|
|
-import java.awt.geom.AffineTransform;
|
|
|
-import java.awt.geom.Ellipse2D;
|
|
|
-import java.awt.geom.NoninvertibleTransformException;
|
|
|
-import java.awt.geom.Point2D;
|
|
|
-import java.awt.geom.Rectangle2D;
|
|
|
+import java.awt.geom.*;
|
|
|
import java.awt.image.BufferedImage;
|
|
|
import java.io.File;
|
|
|
import java.io.IOException;
|
|
|
@@ -33,7 +29,7 @@ import javax.swing.SwingUtilities;
|
|
|
public class Terrain extends JPanel {
|
|
|
|
|
|
private List<Draw> entities;
|
|
|
- private Point2D offset;
|
|
|
+ private Point2D offset, oldPosition;
|
|
|
private Draw dragObject, selectedObject;
|
|
|
private BufferedImage background;
|
|
|
|
|
|
@@ -107,17 +103,33 @@ public class Terrain extends JPanel {
|
|
|
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
|
|
|
}
|
|
|
repaint();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void mouseReleased(MouseEvent e) {
|
|
|
+ if(selectedObject != null){
|
|
|
+ for(Draw drawObject: entities){
|
|
|
+ if(drawObject == selectedObject){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if(intersection(selectedObject, drawObject)){
|
|
|
+ //move back
|
|
|
+ selectedObject.setX(oldPosition.getX());
|
|
|
+ selectedObject.setY(oldPosition.getY());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
dragObject = null;
|
|
|
+ repaint();
|
|
|
}
|
|
|
});
|
|
|
|
|
|
@@ -203,19 +215,14 @@ 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);
|
|
|
+ Shape shape = this.selectedObject.getRect();
|
|
|
g2.setColor(Color.RED);
|
|
|
- g2.draw(shape);
|
|
|
- g2.transform(backup);
|
|
|
+ g2.draw(this.selectedObject.getAffineTransform().createTransformedShape(shape));
|
|
|
|
|
|
boolean collide = false;
|
|
|
for(Draw draw: entities){
|
|
|
if(!draw.equals(this.selectedObject)){
|
|
|
- if(intersection(draw, this.selectedObject)){
|
|
|
+ if(intersection(this.selectedObject, draw)){
|
|
|
collide = true;
|
|
|
}
|
|
|
}
|
|
|
@@ -228,8 +235,7 @@ public class Terrain extends JPanel {
|
|
|
g2.setColor(new Color(0, 254, 0, 128));
|
|
|
|
|
|
}
|
|
|
-
|
|
|
- g2.fill(this.drawDragRectangle(this.selectedObject));
|
|
|
+ g2.fill(this.selectedObject.getAffineTransform().createTransformedShape(this.selectedObject.getRect()));
|
|
|
g2.setClip(null);
|
|
|
}
|
|
|
}
|
|
|
@@ -241,9 +247,11 @@ public class Terrain extends JPanel {
|
|
|
}
|
|
|
|
|
|
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);
|
|
|
+ Area area = new Area(d1.getAffineTransform().createTransformedShape(d1.getRect()));
|
|
|
+ Area area2 = new Area(d2.getAffineTransform().createTransformedShape(d2.getRect()));
|
|
|
+
|
|
|
+ area.intersect(area2);
|
|
|
+ return !area.isEmpty();
|
|
|
}
|
|
|
|
|
|
private Point2D getClickPoint(Point point) {
|
|
|
@@ -259,7 +267,6 @@ public class Terrain extends JPanel {
|
|
|
AffineTransform tx = new AffineTransform();
|
|
|
tx.translate(-cameraPoint.getX() + getWidth()/2, -cameraPoint.getY() + getHeight()/2);
|
|
|
tx.scale(cameraScale, cameraScale);
|
|
|
-
|
|
|
return tx;
|
|
|
}
|
|
|
}
|