|
@@ -1,29 +1,56 @@
|
|
|
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 java.awt.*;
|
|
|
|
|
|
|
+import java.awt.Color;
|
|
|
|
|
+import java.awt.Graphics;
|
|
|
|
|
+import java.awt.Graphics2D;
|
|
|
|
|
+import java.awt.Point;
|
|
|
|
|
+import java.awt.Rectangle;
|
|
|
|
|
+import java.awt.Shape;
|
|
|
|
|
+import java.awt.TexturePaint;
|
|
|
import java.awt.event.MouseAdapter;
|
|
import java.awt.event.MouseAdapter;
|
|
|
import java.awt.event.MouseEvent;
|
|
import java.awt.event.MouseEvent;
|
|
|
-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.NoninvertibleTransformException;
|
|
|
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.awt.image.BufferedImage;
|
|
|
|
|
+import java.io.File;
|
|
|
|
|
+import java.io.IOException;
|
|
|
import java.util.LinkedList;
|
|
import java.util.LinkedList;
|
|
|
|
|
+import java.util.List;
|
|
|
|
|
+
|
|
|
|
|
+import javax.imageio.ImageIO;
|
|
|
|
|
+import javax.swing.JPanel;
|
|
|
|
|
+import javax.swing.SwingUtilities;
|
|
|
|
|
|
|
|
public class Terrain extends JPanel {
|
|
public class Terrain extends JPanel {
|
|
|
|
|
|
|
|
private List<Draw> entities;
|
|
private List<Draw> entities;
|
|
|
private Point2D offset;
|
|
private Point2D offset;
|
|
|
private Draw dragObject, selectedObject;
|
|
private Draw dragObject, selectedObject;
|
|
|
-
|
|
|
|
|
- public Terrain(){
|
|
|
|
|
- this.setBackground(new Color(100, 255, 255, 255));
|
|
|
|
|
|
|
+ private BufferedImage background;
|
|
|
|
|
+
|
|
|
|
|
+ private int length;
|
|
|
|
|
+ private int width;
|
|
|
|
|
+
|
|
|
|
|
+ Point2D cameraPoint = new Point2D.Double(1920/2,1080/2);
|
|
|
|
|
+ float cameraScale = 1;
|
|
|
|
|
+
|
|
|
|
|
+ Point2D lastClickPosition;
|
|
|
|
|
+ Point lastMousePosition;
|
|
|
|
|
+
|
|
|
|
|
+ public Terrain(int length, int width){
|
|
|
|
|
+ this.length = length;
|
|
|
|
|
+ this.width = width;
|
|
|
|
|
+
|
|
|
|
|
+ try {
|
|
|
|
|
+ background = ImageIO.read(new File("res/grass.jpg"));
|
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
|
+ e.printStackTrace();
|
|
|
|
|
+ }
|
|
|
this.dragObject = null;
|
|
this.dragObject = null;
|
|
|
this.entities = new LinkedList();
|
|
this.entities = new LinkedList();
|
|
|
this.initEntities();
|
|
this.initEntities();
|
|
@@ -58,6 +85,7 @@ public class Terrain extends JPanel {
|
|
|
addMouseMotionListener(new MouseAdapter() {
|
|
addMouseMotionListener(new MouseAdapter() {
|
|
|
@Override
|
|
@Override
|
|
|
public void mouseDragged(MouseEvent e) {
|
|
public void mouseDragged(MouseEvent e) {
|
|
|
|
|
+ Point2D clickPoint = getClickPoint(e.getPoint());
|
|
|
if(dragObject != null){
|
|
if(dragObject != null){
|
|
|
if(SwingUtilities.isLeftMouseButton(e)){
|
|
if(SwingUtilities.isLeftMouseButton(e)){
|
|
|
dragObject.setX(e.getX() - offset.getX());
|
|
dragObject.setX(e.getX() - offset.getX());
|
|
@@ -66,6 +94,16 @@ public class Terrain extends JPanel {
|
|
|
dragObject.setRotation(e.getX() * -1);
|
|
dragObject.setRotation(e.getX() * -1);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ cameraPoint = new Point2D.Double(
|
|
|
|
|
+ cameraPoint.getX() + (lastMousePosition.getX() - e.getX()),
|
|
|
|
|
+ cameraPoint.getY() + (lastMousePosition.getY() - e.getY())
|
|
|
|
|
+ );
|
|
|
|
|
+ repaint();
|
|
|
|
|
+ }
|
|
|
|
|
+ lastMousePosition = e.getPoint();
|
|
|
|
|
+ lastClickPosition = clickPoint;
|
|
|
repaint();
|
|
repaint();
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
@@ -83,6 +121,7 @@ public class Terrain extends JPanel {
|
|
|
repaint();
|
|
repaint();
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private void initEntities(){
|
|
private void initEntities(){
|
|
@@ -94,6 +133,10 @@ public class Terrain extends JPanel {
|
|
|
public void paint(Graphics g) {
|
|
public void paint(Graphics g) {
|
|
|
super.paint(g);
|
|
super.paint(g);
|
|
|
Graphics2D g2 = (Graphics2D) g;
|
|
Graphics2D g2 = (Graphics2D) g;
|
|
|
|
|
+
|
|
|
|
|
+ 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);
|
|
drawObject.draw(g2);
|
|
@@ -141,4 +184,21 @@ public class Terrain extends JPanel {
|
|
|
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()));
|
|
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);
|
|
return s1.intersects(s2);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ private Point2D getClickPoint(Point point) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ return getCamera().inverseTransform(point, null);
|
|
|
|
|
+ } catch (NoninvertibleTransformException e1) {
|
|
|
|
|
+ e1.printStackTrace();
|
|
|
|
|
+ }
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private AffineTransform getCamera() {
|
|
|
|
|
+ AffineTransform tx = new AffineTransform();
|
|
|
|
|
+ tx.translate(-cameraPoint.getX() + getWidth()/2, -cameraPoint.getY() + getHeight()/2);
|
|
|
|
|
+ tx.scale(cameraScale, cameraScale);
|
|
|
|
|
+
|
|
|
|
|
+ return tx;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|