|
|
@@ -1,8 +1,10 @@
|
|
|
package gui.simulator;
|
|
|
|
|
|
-import gui.simulator.facilities.Stage;
|
|
|
+import gui.simulator.facilities.*;
|
|
|
|
|
|
+import java.awt.BasicStroke;
|
|
|
import java.awt.Color;
|
|
|
+import java.awt.Font;
|
|
|
import java.awt.Graphics;
|
|
|
import java.awt.Graphics2D;
|
|
|
import java.awt.Point;
|
|
|
@@ -13,12 +15,14 @@ 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.image.BufferedImage;
|
|
|
import java.io.File;
|
|
|
import java.io.IOException;
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.LinkedList;
|
|
|
import java.util.List;
|
|
|
|
|
|
@@ -44,10 +48,12 @@ public class Terrain extends JPanel {
|
|
|
Point lastMousePosition;
|
|
|
|
|
|
public Terrain(int length, int width, int terrain){
|
|
|
+ //get values
|
|
|
this.length = length;
|
|
|
this.width = width;
|
|
|
this.terrain = terrain;
|
|
|
|
|
|
+ //set terrainbackground
|
|
|
switch(terrain){
|
|
|
case 1:
|
|
|
try {
|
|
|
@@ -72,7 +78,6 @@ public class Terrain extends JPanel {
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
this.dragObject = null;
|
|
|
this.entities = new LinkedList();
|
|
|
this.initEntities();
|
|
|
@@ -83,7 +88,19 @@ public class Terrain extends JPanel {
|
|
|
addMouseListener(new MouseAdapter() {
|
|
|
@Override
|
|
|
public void mousePressed(MouseEvent e) {
|
|
|
+ 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;
|
|
|
@@ -138,6 +155,8 @@ public class Terrain extends JPanel {
|
|
|
double scale = object.getScale();
|
|
|
scale *= 1 + (e.getPreciseWheelRotation() / 10);
|
|
|
object.setScale(scale);
|
|
|
+ }else{
|
|
|
+ cameraScale *= 1 - (e.getPreciseWheelRotation()/10.0);
|
|
|
}
|
|
|
}
|
|
|
repaint();
|
|
|
@@ -147,8 +166,8 @@ public class Terrain extends JPanel {
|
|
|
}
|
|
|
|
|
|
private void initEntities(){
|
|
|
- this.entities.add(new Stage(10, 10, 0.5, 10));
|
|
|
- this.entities.add(new Stage(200, 40, 2, 10));
|
|
|
+ this.entities.add(new Stage(300, 10, 0.5, 10));
|
|
|
+ this.entities.add(new Stage(400, 40, 2, 10));
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -156,12 +175,31 @@ public class Terrain extends JPanel {
|
|
|
super.paint(g);
|
|
|
Graphics2D g2 = (Graphics2D) g;
|
|
|
|
|
|
+ //draw sidebar
|
|
|
+ g2.setClip(new Rectangle2D.Double(0,0, 200, getHeight()));
|
|
|
+ g2.setColor(Color.GRAY);
|
|
|
+ g2.fill3DRect(0, 0, 200, 50, true);
|
|
|
+ g2.setColor(Color.WHITE);
|
|
|
+ g2.setFont(new Font("Serif", Font.BOLD, 20));
|
|
|
+ g2.drawString("Drag and place", 30, 25);
|
|
|
+ g2.setColor(Color.BLACK);
|
|
|
+ g2.setStroke(new BasicStroke(5));
|
|
|
+ g2.drawLine(199, 0, 199, getHeight());
|
|
|
+ //draw objects
|
|
|
+ Draw object1 = new Stage(0,50);
|
|
|
+ object1.draw(g2);
|
|
|
+ g2.drawString("stage", 80, 275);
|
|
|
+ Draw object2 = new RestRoom(0,300, 0.5, 10);
|
|
|
+ object2.draw(g2);
|
|
|
+ g2.drawString("toilettage", 70, 525);
|
|
|
+
|
|
|
+ //draw simulation field
|
|
|
+ g2.setClip(new Rectangle2D.Double(200, 0, getWidth()-200, getHeight()));
|
|
|
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){
|
|
|
- drawObject.draw(g2);
|
|
|
+ drawObject.draw(g2);
|
|
|
}
|
|
|
|
|
|
if(this.selectedObject != null){
|
|
|
@@ -192,6 +230,7 @@ public class Terrain extends JPanel {
|
|
|
}
|
|
|
|
|
|
g2.fill(this.drawDragRectangle(this.selectedObject));
|
|
|
+ g2.setClip(null);
|
|
|
}
|
|
|
}
|
|
|
|