Kaynağa Gözat

Simulator start.

Gilian Joosen 10 yıl önce
ebeveyn
işleme
4d0ad11710

BIN
res/simulator/tent.png


+ 3 - 2
src/gui/frames/MainFrame.java

@@ -14,6 +14,7 @@ import javax.swing.JFrame;
 import javax.swing.JPanel;
 
 import agenda.Agenda;
+import gui.simulator.SimulatorPane;
 
 @SuppressWarnings("serial")
 public class MainFrame extends JFrame{
@@ -25,7 +26,7 @@ public class MainFrame extends JFrame{
     
     public MainFrame(){
         this.agenda = new Agenda();
-        this.currentPanel = new Table(this.agenda);
+        this.currentPanel = new SimulatorPane(this.agenda);
         this.add(this.currentPanel);
 		this.setResizable(true);
 		this.setBounds(100,100,1440,900);
@@ -62,7 +63,7 @@ public class MainFrame extends JFrame{
                 this.updateView(new AgendaPane(this.agenda));
                 break;
             case SIMULATOR:
-                //komt later nog.
+                this.updateView(new SimulatorPane(this.agenda));
                 break;
             case TABLE:
                 this.updateView(new Table(this.agenda));

+ 1 - 1
src/simulator/AccessPoint.java → src/gui/simulator/AccessPoint.java

@@ -1,4 +1,4 @@
-package simulator;
+package gui.simulator;
 
 public class AccessPoint {
 

+ 81 - 0
src/gui/simulator/Draw.java

@@ -0,0 +1,81 @@
+package gui.simulator;
+
+import javax.imageio.ImageIO;
+import java.awt.*;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Rectangle2D;
+import java.io.IOException;
+
+/**
+ * Created by gjoosen on 07/03/15.
+ */
+public abstract class Draw {
+
+    private Image image;
+    private double x, y, rotation, scale;
+
+    public Draw(String image, int x, int y, double scale){
+        try{
+            System.out.println(getClass().getResource(image));
+            this.image = ImageIO.read(getClass().getResource(image));
+        }catch(IOException ex){
+            ex.printStackTrace();
+        }
+        this.x = x;
+        this.y = y;
+        this.scale = scale;
+    }
+
+    private AffineTransform getAffineTransform(){
+        AffineTransform transform = new AffineTransform();
+        transform.translate(this.x, this.y);
+        transform.scale(this.scale, this.scale);
+        transform.rotate(Math.toRadians(this.rotation), this.image.getWidth(null) /2 , this.image.getHeight(null) / 2);
+        return transform;
+    }
+
+    public void draw(Graphics2D g){
+        g.drawImage(this.image, this.getAffineTransform(), null);
+    }
+
+    public boolean contains(Point point){
+        Shape shape = new Rectangle2D.Double(0, 0, image.getWidth(null), image.getHeight(null));
+        return this.getAffineTransform().createTransformedShape(shape).contains(point);
+    }
+
+    public double getX() {
+        return x;
+    }
+
+    public double getY() {
+        return y;
+    }
+
+    public void setX(double x){
+        this.x = x;
+    }
+
+    public void setY(double y){
+        this.y = y;
+    }
+
+    public void setRotation(double rotation) {
+        this.rotation = rotation;
+    }
+
+    public double getScale() {
+        return scale;
+    }
+
+    public void setScale(double scale) {
+        this.scale = scale;
+    }
+
+    public int getWidth(){
+        return this.image.getWidth(null);
+    }
+
+    public int getHeight(){
+        return this.image.getHeight(null);
+    }
+}

+ 1 - 1
src/simulator/ExitPoint.java → src/gui/simulator/ExitPoint.java

@@ -1,4 +1,4 @@
-package simulator;
+package gui.simulator;
 
 public class ExitPoint {
 

+ 1 - 1
src/simulator/MarkedArea.java → src/gui/simulator/MarkedArea.java

@@ -1,4 +1,4 @@
-package simulator;
+package gui.simulator;
 
 public class MarkedArea {
 

+ 6 - 4
src/simulator/SimulatorPane.java → src/gui/simulator/SimulatorPane.java

@@ -1,9 +1,10 @@
-package simulator;
+package gui.simulator;
 
-import java.awt.Color;
+import java.awt.*;
 
 import javax.swing.BorderFactory;
 import javax.swing.JPanel;
+import javax.swing.border.Border;
 
 import agenda.Agenda;
 
@@ -12,10 +13,11 @@ public class SimulatorPane extends JPanel{
 	private Agenda agenda;
 
 	public SimulatorPane(Agenda agenda){
+        super.setLayout(new BorderLayout());
 		this.agenda = agenda;
         this.setOpaque(true);
-        this.setBackground(Color.WHITE);
+        this.setBackground(Color.RED);
         this.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
+        this.add(new Terrain(), BorderLayout.CENTER);
 	}
-	
 }

+ 100 - 0
src/gui/simulator/Terrain.java

@@ -0,0 +1,100 @@
+package gui.simulator;
+
+import gui.simulator.facilities.Stage;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseWheelEvent;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.util.List;
+import java.util.LinkedList;
+
+public class Terrain extends JPanel {
+
+    private List<Draw> entities;
+    private Point2D offset;
+    private Draw dragObject, selectedObject;
+
+    public Terrain(){
+        this.setBackground(Color.green);
+        this.dragObject = null;
+        this.entities = new LinkedList();
+        this.initEntities();
+        this.listeners();
+    }
+
+    private void listeners(){
+        addMouseListener(new MouseAdapter() {
+            @Override
+            public void mousePressed(MouseEvent e) {
+                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;
+                    }
+                }
+            }
+
+            @Override
+            public void mouseReleased(MouseEvent e) {
+                dragObject = null;
+                selectedObject = null;
+            }
+        });
+
+        addMouseMotionListener(new MouseAdapter() {
+            @Override
+            public void mouseDragged(MouseEvent e) {
+                if(dragObject != null){
+                    if(SwingUtilities.isLeftMouseButton(e)){
+                        dragObject.setX(e.getX() - offset.getX());
+                        dragObject.setY(e.getY() - offset.getY());
+                    }else if(SwingUtilities.isRightMouseButton(e)){
+                        dragObject.setRotation(e.getX() * -1);
+                    }
+                }
+                repaint();
+            }
+        });
+
+        addMouseWheelListener(new MouseAdapter() {
+            @Override
+            public void mouseWheelMoved(MouseWheelEvent e) {
+                for(Draw object: entities){
+                    if(object.contains(e.getPoint())){
+                        double scale = object.getScale();
+                        scale *= 1 + (e.getPreciseWheelRotation() / 10);
+                        object.setScale(scale);
+                    }
+                }
+                repaint();
+            }
+        });
+    }
+
+    private void initEntities(){
+        this.entities.add(new Stage(10, 10, 0.5));
+        this.entities.add(new Stage(100, 40, 2));
+    }
+
+    @Override
+    public void paint(Graphics g) {
+        super.paint(g);
+        Graphics2D g2 = (Graphics2D) g;
+
+        for(Draw drawObject: entities){
+            drawObject.draw(g2);
+        }
+
+        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());
+            g2.setColor(Color.RED);
+            g2.draw(shape);
+        }
+    }
+}

+ 1 - 1
src/simulator/Visitor.java → src/gui/simulator/Visitor.java

@@ -1,4 +1,4 @@
-package simulator;
+package gui.simulator;
 
 public class Visitor {
 

+ 1 - 1
src/simulator/WayPoint.java → src/gui/simulator/WayPoint.java

@@ -1,4 +1,4 @@
-package simulator;
+package gui.simulator;
 
 public class WayPoint {
 

+ 1 - 1
src/simulator/facilities/BuildingObject.java → src/gui/simulator/facilities/BuildingObject.java

@@ -1,4 +1,4 @@
-package simulator.facilities;
+package gui.simulator.facilities;
 
 public class BuildingObject {
 

+ 5 - 0
src/gui/simulator/facilities/Drinks.java

@@ -0,0 +1,5 @@
+package gui.simulator.facilities;
+
+public class Drinks {
+
+}

+ 5 - 0
src/gui/simulator/facilities/RestRoom.java

@@ -0,0 +1,5 @@
+package gui.simulator.facilities;
+
+public class RestRoom {
+
+}

+ 5 - 0
src/gui/simulator/facilities/SnackBar.java

@@ -0,0 +1,5 @@
+package gui.simulator.facilities;
+
+public class SnackBar {
+
+}

+ 19 - 0
src/gui/simulator/facilities/Stage.java

@@ -0,0 +1,19 @@
+package gui.simulator.facilities;
+
+import gui.simulator.Draw;
+
+import javax.imageio.ImageIO;
+import java.awt.*;
+import java.io.File;
+import java.io.IOException;
+
+public class Stage extends Draw {
+
+    public Stage(int x, int y) {
+        super("/simulator/tent.png", x, y, 1);
+    }
+
+    public Stage(int x, int y, double scale) {
+        super("/simulator/tent.png", x, y, scale);
+    }
+}

+ 0 - 5
src/simulator/Terrain.java

@@ -1,5 +0,0 @@
-package simulator;
-
-public class Terrain {
-
-}

+ 0 - 5
src/simulator/facilities/Drinks.java

@@ -1,5 +0,0 @@
-package simulator.facilities;
-
-public class Drinks {
-
-}

+ 0 - 5
src/simulator/facilities/RestRoom.java

@@ -1,5 +0,0 @@
-package simulator.facilities;
-
-public class RestRoom {
-
-}

+ 0 - 5
src/simulator/facilities/SnackBar.java

@@ -1,5 +0,0 @@
-package simulator.facilities;
-
-public class SnackBar {
-
-}

+ 0 - 5
src/simulator/facilities/Stage.java

@@ -1,5 +0,0 @@
-package simulator.facilities;
-
-public class Stage {
-
-}