|
@@ -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);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+}
|