|
@@ -13,12 +13,13 @@ import java.awt.Shape;
|
|
|
import java.awt.TexturePaint;
|
|
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.MouseMotionAdapter;
|
|
|
import java.awt.event.MouseWheelEvent;
|
|
import java.awt.event.MouseWheelEvent;
|
|
|
|
|
+import java.awt.event.MouseWheelListener;
|
|
|
import java.awt.geom.*;
|
|
import java.awt.geom.*;
|
|
|
import java.awt.image.BufferedImage;
|
|
import java.awt.image.BufferedImage;
|
|
|
import java.io.File;
|
|
import java.io.File;
|
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
|
-import java.util.ArrayList;
|
|
|
|
|
import java.util.LinkedList;
|
|
import java.util.LinkedList;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
|
|
|
@@ -29,13 +30,14 @@ 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, oldPosition;
|
|
|
|
|
|
|
+ private Point2D oldPosition;
|
|
|
private Draw dragObject, selectedObject;
|
|
private Draw dragObject, selectedObject;
|
|
|
private BufferedImage background;
|
|
private BufferedImage background;
|
|
|
|
|
|
|
|
private int length, width;
|
|
private int length, width;
|
|
|
|
|
+ private int sideBarWidth = 200;
|
|
|
private SimulatorPane.Terrains terrain;
|
|
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;
|
|
float cameraScale = 1;
|
|
|
|
|
|
|
|
Point2D lastClickPosition;
|
|
Point2D lastClickPosition;
|
|
@@ -77,36 +79,41 @@ public class Terrain extends JPanel {
|
|
|
this.listeners();
|
|
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(){
|
|
private void listeners(){
|
|
|
addMouseListener(new MouseAdapter() {
|
|
addMouseListener(new MouseAdapter() {
|
|
|
@Override
|
|
@Override
|
|
|
public void mousePressed(MouseEvent e) {
|
|
public void mousePressed(MouseEvent e) {
|
|
|
- lastMousePosition = e.getPoint();
|
|
|
|
|
Point2D clickPoint = getClickPoint(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();
|
|
repaint();
|
|
|
}
|
|
}
|
|
@@ -125,22 +132,22 @@ public class Terrain extends JPanel {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+ selectedObject = null;
|
|
|
dragObject = null;
|
|
dragObject = null;
|
|
|
repaint();
|
|
repaint();
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
- addMouseMotionListener(new MouseAdapter() {
|
|
|
|
|
|
|
+ addMouseMotionListener(new MouseMotionAdapter() {
|
|
|
@Override
|
|
@Override
|
|
|
public void mouseDragged(MouseEvent e) {
|
|
public void mouseDragged(MouseEvent e) {
|
|
|
Point2D clickPoint = getClickPoint(e.getPoint());
|
|
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.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)){
|
|
}else if(SwingUtilities.isRightMouseButton(e)){
|
|
|
- dragObject.setRotation(e.getX() * -1);
|
|
|
|
|
|
|
+ dragObject.rotation += (lastClickPosition.getX() - clickPoint.getX() + lastClickPosition.getY() - clickPoint.getY());
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
else
|
|
else
|
|
@@ -149,35 +156,30 @@ public class Terrain extends JPanel {
|
|
|
cameraPoint.getX() + (lastMousePosition.getX() - e.getX()),
|
|
cameraPoint.getX() + (lastMousePosition.getX() - e.getX()),
|
|
|
cameraPoint.getY() + (lastMousePosition.getY() - e.getY())
|
|
cameraPoint.getY() + (lastMousePosition.getY() - e.getY())
|
|
|
);
|
|
);
|
|
|
- repaint();
|
|
|
|
|
}
|
|
}
|
|
|
|
|
+ repaint();
|
|
|
lastMousePosition = e.getPoint();
|
|
lastMousePosition = e.getPoint();
|
|
|
lastClickPosition = clickPoint;
|
|
lastClickPosition = clickPoint;
|
|
|
- repaint();
|
|
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
-
|
|
|
|
|
- addMouseWheelListener(new MouseAdapter() {
|
|
|
|
|
|
|
+
|
|
|
|
|
+ addMouseWheelListener(new MouseWheelListener() {
|
|
|
@Override
|
|
@Override
|
|
|
public void mouseWheelMoved(MouseWheelEvent e) {
|
|
public void mouseWheelMoved(MouseWheelEvent e) {
|
|
|
|
|
+ Point2D clickPoint = getClickPoint(e.getPoint());
|
|
|
for(Draw object: entities){
|
|
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();
|
|
repaint();
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
-
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private void initEntities(){
|
|
private void initEntities(){
|
|
@@ -191,7 +193,7 @@ public class Terrain extends JPanel {
|
|
|
Graphics2D g2 = (Graphics2D) g;
|
|
Graphics2D g2 = (Graphics2D) g;
|
|
|
|
|
|
|
|
//draw sidebar
|
|
//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.setColor(Color.GRAY);
|
|
|
g2.fill3DRect(0, 0, 200, 50, true);
|
|
g2.fill3DRect(0, 0, 200, 50, true);
|
|
|
g2.setColor(Color.WHITE);
|
|
g2.setColor(Color.WHITE);
|
|
@@ -210,15 +212,18 @@ public class Terrain extends JPanel {
|
|
|
|
|
|
|
|
//draw simulation field
|
|
//draw simulation field
|
|
|
g2.setClip(new Rectangle2D.Double(200, 0, getWidth()-200, getHeight()));
|
|
g2.setClip(new Rectangle2D.Double(200, 0, getWidth()-200, getHeight()));
|
|
|
|
|
+ AffineTransform oldTransform = g2.getTransform();
|
|
|
g2.translate(200,0);
|
|
g2.translate(200,0);
|
|
|
g2.setTransform(getCamera());
|
|
g2.setTransform(getCamera());
|
|
|
TexturePaint p = new TexturePaint(background, new Rectangle2D.Double(0, 0, 500, 500));
|
|
TexturePaint p = new TexturePaint(background, new Rectangle2D.Double(0, 0, 500, 500));
|
|
|
g2.setPaint(p);
|
|
g2.setPaint(p);
|
|
|
g2.fill(new Rectangle2D.Double(0,0,width,length));
|
|
g2.fill(new Rectangle2D.Double(0,0,width,length));
|
|
|
- for(Draw drawObject: entities){
|
|
|
|
|
|
|
+
|
|
|
|
|
+ for(Draw drawObject: entities){
|
|
|
drawObject.draw(g2);
|
|
drawObject.draw(g2);
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
+ //draw collide boxes
|
|
|
if(this.selectedObject != null){
|
|
if(this.selectedObject != null){
|
|
|
Shape shape = this.selectedObject.getRect();
|
|
Shape shape = this.selectedObject.getRect();
|
|
|
g2.setColor(Color.RED);
|
|
g2.setColor(Color.RED);
|
|
@@ -240,6 +245,7 @@ public class Terrain extends JPanel {
|
|
|
}
|
|
}
|
|
|
g2.fill(this.selectedObject.getAffineTransform().createTransformedShape(this.selectedObject.getRect()));
|
|
g2.fill(this.selectedObject.getAffineTransform().createTransformedShape(this.selectedObject.getRect()));
|
|
|
g2.setClip(null);
|
|
g2.setClip(null);
|
|
|
|
|
+ g2.setTransform(oldTransform);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|