From 65f428c572ab5e0148a16bd86654df26fe115c95 Mon Sep 17 00:00:00 2001 From: xrgman Date: Tue, 7 Apr 2015 14:56:59 +0200 Subject: [PATCH] New terrain --- Applicatie/MenuBar.java | 64 +++++- Applicatie/NewWorldPanel.java | 103 +++++++++ Applicatie/Panel.java | 33 ++- Applicatie/PropertiesPanel.java | 186 ++++++++++++++++- Listeners/Mouse.java | 2 +- Listeners/MouseMotion.java | 2 +- Listeners/MouseWheel.java | 2 +- Objects/DrawObject.java | 356 ++++++++++++++++++++++++++++++++ Objects/Entrance.java | 2 - Objects/Food.java | 2 - Objects/OldPath.java | 21 -- Objects/Path.java | 1 + Objects/Stage.java | 2 - Objects/Toilet.java | 2 - Objects/Wall.java | 2 - images/sand.jpg | Bin 0 -> 5071 bytes 16 files changed, 724 insertions(+), 56 deletions(-) create mode 100644 Applicatie/NewWorldPanel.java create mode 100644 Objects/DrawObject.java delete mode 100644 Objects/OldPath.java create mode 100644 images/sand.jpg diff --git a/Applicatie/MenuBar.java b/Applicatie/MenuBar.java index 343dbf9..486580f 100644 --- a/Applicatie/MenuBar.java +++ b/Applicatie/MenuBar.java @@ -17,19 +17,40 @@ public class MenuBar extends JMenuBar JMenu file = new JMenu("File"); - JMenuItem newPath = new JMenuItem("New Path"); - newPath.addActionListener(new ActionListener() { + JMenuItem item = new JMenuItem("New"); + item.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - w.getPanel().startPath(); + NewWorldPanel world = new NewWorldPanel(w.getPanel()); } }); + file.add(item); - file.add(newPath); + item = new JMenuItem("Open"); + item.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + + } + }); + file.add(item); - JMenuItem exit = new JMenuItem("Exit"); - exit.addActionListener(new ActionListener() + item = new JMenuItem("Save"); + item.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + + } + }); + file.add(item); + + file.addSeparator(); + + item = new JMenuItem("Exit"); + item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { @@ -37,8 +58,35 @@ public class MenuBar extends JMenuBar } }); - file.add(exit); - + file.add(item); add(file); + + file = new JMenu("Path"); + + item = new JMenuItem("New Path"); + item.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + w.getPanel().startPath(); + } + }); + + file.add(item); + add(file); + + file = new JMenu("Help"); + + item = new JMenuItem("About"); + item.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + JOptionPane.showMessageDialog(w.getFrames()[0],"Festivalplanner\nMade by: Wesley de Hek, Kenneth van Ewijk, Remco Sannen, Yorick Rommers & Guus van Dongen "); + } + }); + file.add(item); + add(file); + } } diff --git a/Applicatie/NewWorldPanel.java b/Applicatie/NewWorldPanel.java new file mode 100644 index 0000000..4be9363 --- /dev/null +++ b/Applicatie/NewWorldPanel.java @@ -0,0 +1,103 @@ +package Applicatie; + +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.Box; +import javax.swing.BoxLayout; +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTextField; + +public class NewWorldPanel extends JFrame { + + public NewWorldPanel(Panel topPanel) { + super("New World"); + setDefaultCloseOperation(HIDE_ON_CLOSE); + + String[] terrains = {"Grass", "Sand"}; + JPanel mainPanel = new JPanel(new BorderLayout()); + JButton button; + JLabel label; + JTextField heightTextField; + JTextField widthTextField; + JComboBox terrainBox; + + //Top: + JPanel panel = new JPanel(); + BoxLayout box = new BoxLayout(panel, BoxLayout.Y_AXIS); + panel.setLayout(box); + panel.add(Box.createRigidArea(new Dimension(0,20))); + label = new JLabel("Enter your preferences: "); + panel.add(label); + panel.add(Box.createRigidArea(new Dimension(0,15))); + //Width: + JPanel linePanel = new JPanel(); + label = new JLabel("Width: "); + widthTextField = new JTextField("1920"); + widthTextField.setPreferredSize(new Dimension(100,20)); + linePanel.add(label); + linePanel.add(widthTextField); + panel.add(linePanel); + //Height: + linePanel = new JPanel(); + label = new JLabel("Height: "); + heightTextField = new JTextField("1080"); + heightTextField.setPreferredSize(new Dimension(100,20)); + linePanel.add(label); + linePanel.add(heightTextField); + panel.add(linePanel); + //Terrain: + linePanel = new JPanel(); + label = new JLabel("Terrain: "); + terrainBox = new JComboBox(terrains); + terrainBox.setPreferredSize(new Dimension(100,20)); + linePanel.add(label); + linePanel.add(terrainBox); + panel.add(linePanel); + //Image: + + + + + mainPanel.add(panel,BorderLayout.NORTH); + //Bottom: + panel = new JPanel(); + //Cancel: + button = new JButton("Cancel"); + button.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + NewWorldPanel.this.dispose(); + } + }); + panel.add(button); + + button = new JButton("Apply"); + button.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + topPanel.newWorld(Integer.parseInt(widthTextField.getText()),Integer.parseInt(heightTextField.getText()),terrainBox.getSelectedIndex()); + NewWorldPanel.this.dispose(); + } + }); + panel.add(button); + + + mainPanel.add(panel,BorderLayout.SOUTH); + add(mainPanel); + + //Finishing off + pack(); + setSize(300,350); + setLocationRelativeTo(null); + setVisible(true); + } +} diff --git a/Applicatie/Panel.java b/Applicatie/Panel.java index 7c42f63..ed1894d 100644 --- a/Applicatie/Panel.java +++ b/Applicatie/Panel.java @@ -8,10 +8,7 @@ import java.awt.Graphics2D; import java.awt.Point; import java.awt.Stroke; import java.awt.TexturePaint; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.awt.geom.AffineTransform; -import java.awt.geom.Line2D; import java.awt.geom.NoninvertibleTransformException; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; @@ -23,15 +20,15 @@ import java.util.Iterator; import javax.imageio.ImageIO; import javax.swing.JPanel; -import javax.swing.Timer; import Listeners.Mouse; import Listeners.MouseMotion; import Listeners.MouseWheel; +import Objects.DrawObject; import Objects.Entrance; import Objects.Food; -import Objects.Path; import Objects.OldPath; +import Objects.Path; import Objects.Stage; import Objects.Toilet; import Objects.Wall; @@ -40,6 +37,7 @@ import Objects.Wall; public class Panel extends JPanel { + BufferedImage grass,sand; BufferedImage background; BufferedImage podiumImage, toiletImage, entranceImage, pathImage, wallImage, foodImage; @@ -54,6 +52,8 @@ public class Panel extends JPanel private DrawObject selectedObject; private String clickedOption = "drag"; private Path currentPath; + private int width = 1920; + private int height = 1080; Point2D cameraPoint = new Point2D.Double(getWidth() / 2, getHeight() / 2); float cameraScale = 1; @@ -84,13 +84,15 @@ public class Panel extends JPanel pp.setPanel(this); try { - background = ImageIO.read(new File("images/grass.jpg")); + grass = ImageIO.read(new File("images/grass.jpg")); + sand = ImageIO.read(new File("images/sand.jpg")); podiumImage = ImageIO.read(new File("images/stageIcon.png")); toiletImage = ImageIO.read(new File("images/wcIcon.png")); entranceImage = ImageIO.read(new File("images/entranceIcon.png")); pathImage = ImageIO.read(new File("images/pathIcon.png")); wallImage = ImageIO.read(new File("images/wallIcon.png")); foodImage = ImageIO.read(new File("images/foodIcon.png")); + background = grass; } catch (IOException e) { e.printStackTrace(); @@ -177,7 +179,7 @@ public class Panel extends JPanel TexturePaint p = new TexturePaint(background, new Rectangle2D.Double(0, 0, 100, 100)); g2.setPaint(p); - g2.fill(new Rectangle2D.Double(-1920, -1080, 3840, 2160)); + g2.fill(new Rectangle2D.Double(-width/2,-height/2, width, height)); BasicStroke stroke = new BasicStroke(10); g2.setStroke(stroke); @@ -452,4 +454,21 @@ public class Panel extends JPanel repaint(); } } + + public void newWorld(int width, int height, int terrainIndex) { + this.width = width; + this.height = height; + paths.clear(); + objects.clear(); + cameraScale = 1; + switch(terrainIndex) { + case 0: + background = grass; + break; + case 1: + background = sand; + break; + } + repaint(); + } } diff --git a/Applicatie/PropertiesPanel.java b/Applicatie/PropertiesPanel.java index ba9b0b8..8ac8164 100644 --- a/Applicatie/PropertiesPanel.java +++ b/Applicatie/PropertiesPanel.java @@ -20,8 +20,10 @@ import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; +import Objects.DrawObject; import Objects.Path; + @SuppressWarnings("serial") public class PropertiesPanel extends JPanel { @@ -35,11 +37,16 @@ public class PropertiesPanel extends JPanel JLabel nameLabel; + JPanel areaPanel; JTextField locationXField; JTextField locationYField; JTextField scaleField; JTextField rotationField; + JTextField areaTopField; + JTextField areaBottomField; + JTextField areaLeftField; + JTextField areaRightField; PropertiesPanel() { @@ -80,9 +87,13 @@ public class PropertiesPanel extends JPanel buttonPanel.setMaximumSize(new Dimension(200, 40)); buttonPanel.add(buttonLabel); add(buttonPanel); + + //AREA PANEL: AVAILABLE FOR ACTIONLISTENER + areaPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + areaPanel.setVisible(false); - // DELETE - JPanel deletePanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + // BUTTONS ROW 1 + JPanel row1ButtonPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); JButton deleteButton = new JButton("Delete"); deleteButton.setFont(new Font("Segoe UI", Font.PLAIN, 20)); deleteButton.addActionListener(new ActionListener() @@ -96,10 +107,165 @@ public class PropertiesPanel extends JPanel } } }); - deletePanel.setPreferredSize(new Dimension(200, 50)); - deletePanel.setMaximumSize(new Dimension(200, 50)); - deletePanel.add(deleteButton); - add(deletePanel); + JButton areaButton = new JButton("Area"); + areaButton.setFont(new Font("Segoe UI", Font.PLAIN, 20)); + areaButton.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + areaPanel.setVisible(!areaPanel.isVisible()); + } + }); + row1ButtonPanel.setPreferredSize(new Dimension(200, 50)); + row1ButtonPanel.setMaximumSize(new Dimension(200, 50)); + row1ButtonPanel.add(deleteButton); + row1ButtonPanel.add(areaButton); + add(row1ButtonPanel); + + + //AREA PANEL + JLabel areaLabel = new JLabel("Area size"); + areaLabel.setFont(new Font("Segoe UI", Font.ITALIC, 20)); + areaPanel.setPreferredSize(new Dimension(200, 150)); + areaPanel.setMaximumSize(new Dimension(200, 250)); + areaPanel.add(areaLabel); + add(areaPanel); + { + JPanel areaTopPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + areaTopPanel.setPreferredSize(new Dimension(200, 50)); + areaPanel.add(areaTopPanel); + + JLabel areaTopLabel = new JLabel("Top"); + areaTopPanel.add(areaTopLabel); + areaTopField = new JTextField(); + areaTopField.setPreferredSize(new Dimension(140, 25)); + { + areaTopField.addKeyListener(new KeyListener() + { + + public void keyTyped(KeyEvent e){} + + public void keyReleased(KeyEvent e) + { + try + { + areaTopField.setBackground(Color.WHITE); + int top = Integer.parseInt(areaTopField.getText()); + selectedObject.setAreaTop(top); + p.update(); + } catch (NumberFormatException nfe) + { + areaTopField.setBackground(Color.RED); + } + } + + public void keyPressed(KeyEvent e){} + }); + } + areaTopPanel.add(areaTopField); + } + { + JPanel areaBottomPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + areaBottomPanel.setPreferredSize(new Dimension(200, 50)); + areaPanel.add(areaBottomPanel); + + JLabel areaBottomLabel = new JLabel("Bottom"); + areaBottomPanel.add(areaBottomLabel); + areaBottomField = new JTextField(); + areaBottomField.setPreferredSize(new Dimension(120, 25)); + { + areaBottomField.addKeyListener(new KeyListener() + { + + public void keyTyped(KeyEvent e){} + + public void keyReleased(KeyEvent e) + { + try + { + areaBottomField.setBackground(Color.WHITE); + int bottom = Integer.parseInt(areaBottomField.getText()); + selectedObject.setAreaBottom(bottom); + p.update(); + } catch (NumberFormatException nfe) + { + areaBottomField.setBackground(Color.RED); + } + } + + public void keyPressed(KeyEvent e){} + }); + } + areaBottomPanel.add(areaBottomField); + } + { + JPanel areaLeftPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + areaLeftPanel.setPreferredSize(new Dimension(200, 50)); + areaPanel.add(areaLeftPanel); + + JLabel areaLeftLabel = new JLabel("Left"); + areaLeftPanel.add(areaLeftLabel); + areaLeftField = new JTextField(); + areaLeftField.setPreferredSize(new Dimension(138, 25)); + { + areaLeftField.addKeyListener(new KeyListener() + { + + public void keyTyped(KeyEvent e){} + + public void keyReleased(KeyEvent e) + { + try + { + areaLeftField.setBackground(Color.WHITE); + int left = Integer.parseInt(areaLeftField.getText()); + selectedObject.setAreaLeft(left); + p.update(); + } catch (NumberFormatException nfe) + { + areaLeftField.setBackground(Color.RED); + } + } + + public void keyPressed(KeyEvent e){} + }); + } + areaLeftPanel.add(areaLeftField); + } + { + JPanel areaRightPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + areaRightPanel.setPreferredSize(new Dimension(200, 50)); + areaPanel.add(areaRightPanel); + + JLabel areaRightLabel = new JLabel("Right"); + areaRightPanel.add(areaRightLabel); + areaRightField = new JTextField(); + areaRightField.setPreferredSize(new Dimension(130, 25)); + { + areaRightField.addKeyListener(new KeyListener() + { + + public void keyTyped(KeyEvent e){} + + public void keyReleased(KeyEvent e) + { + try + { + areaRightField.setBackground(Color.WHITE); + int right = Integer.parseInt(areaRightField.getText()); + selectedObject.setAreaRight(right); + p.update(); + } catch (NumberFormatException nfe) + { + areaRightField.setBackground(Color.RED); + } + } + + public void keyPressed(KeyEvent e){} + }); + } + areaRightPanel.add(areaRightField); + } // SPACER add(Box.createRigidArea(spacerDimension)); @@ -355,7 +521,7 @@ public class PropertiesPanel extends JPanel } nameLabel.setText("No Selection"); - + areaPanel.setVisible(false); } private void fillFields() @@ -367,6 +533,12 @@ public class PropertiesPanel extends JPanel locationYField.setText(Math.round(selectedObject.getPosition().getY()) + ""); scaleField.setText((double) Math.round(selectedObject.getScale() * 10) / 10 + ""); rotationField.setText(Math.round(selectedObject.getRotation() % 360) + ""); + + areaTopField.setText(selectedObject.getAreaTop() + ""); + areaBottomField.setText(selectedObject.getAreaBottom() + ""); + areaLeftField.setText(selectedObject.getAreaLeft() + ""); + areaRightField.setText(selectedObject.getAreaRight() + ""); + } public void setPanel(Panel p) diff --git a/Listeners/Mouse.java b/Listeners/Mouse.java index 6f50d83..e611c2c 100644 --- a/Listeners/Mouse.java +++ b/Listeners/Mouse.java @@ -6,8 +6,8 @@ import java.awt.event.MouseEvent; import java.awt.geom.Point2D; import java.awt.image.BufferedImage; -import Applicatie.DrawObject; import Applicatie.Panel; +import Objects.DrawObject; import Objects.Stage; public class Mouse extends MouseAdapter diff --git a/Listeners/MouseMotion.java b/Listeners/MouseMotion.java index a40a559..cd6ae6f 100644 --- a/Listeners/MouseMotion.java +++ b/Listeners/MouseMotion.java @@ -5,8 +5,8 @@ import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; import java.awt.geom.Point2D; -import Applicatie.DrawObject; import Applicatie.Panel; +import Objects.DrawObject; public class MouseMotion extends MouseMotionAdapter { diff --git a/Listeners/MouseWheel.java b/Listeners/MouseWheel.java index c841884..4f6fcea 100644 --- a/Listeners/MouseWheel.java +++ b/Listeners/MouseWheel.java @@ -4,8 +4,8 @@ import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelListener; import java.awt.geom.Point2D; -import Applicatie.DrawObject; import Applicatie.Panel; +import Objects.DrawObject; public class MouseWheel implements MouseWheelListener { diff --git a/Objects/DrawObject.java b/Objects/DrawObject.java new file mode 100644 index 0000000..ccb0aec --- /dev/null +++ b/Objects/DrawObject.java @@ -0,0 +1,356 @@ +package Objects; + +import java.awt.BasicStroke; +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.Image; +import java.awt.Shape; +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 javax.swing.ImageIcon; + +public abstract class DrawObject +{ + Point2D position; + double rotation; + double scale; + int width; + int height; + private Image image; + protected boolean selected; + + protected int areaTop; + protected int areaBottom; + protected int areaLeft; + protected int areaRight; + + private Rectangle2D rektAngle; + private Rectangle2D upperLeftCorner; + private Rectangle2D upperRightCorner; + private Rectangle2D bottomLeftCorner; + private Rectangle2D bottomRightCorner; + private Ellipse2D rotateDot; + + static final int UPPERLEFT = 0; + static final int UPPERRIGHT = 1; + static final int BOTTOMLEFT = 2; + static final int BOTTOMRIGHT = 3; + private Color rectangleColor; + + public DrawObject(String filename, Point2D position) + { + image = new ImageIcon(filename).getImage(); + + width = image.getWidth(null); + height = image.getHeight(null); + + scale = 1; + rotation = 0; + this.position = position; + rectangleColor = Color.BLACK; + + areaTop = 0; + areaBottom = 0; + areaLeft = 0; + areaRight = 0; + } + + public abstract String getName(); + + public void draw(Graphics2D g) + { + AffineTransform tx = getTransform(); + g.drawImage(image, tx, null); + if (selected) + { + // g.rotate(Math.toRadians(rotation), width/2, + // height/2); + AffineTransform rotate = AffineTransform.getRotateInstance(Math.toRadians(rotation), position.getX() + image.getWidth(null) / 2, position.getY() + image.getHeight(null) / 2); + // g.transform(rotate); + g.setColor(rectangleColor); + g.setStroke(new BasicStroke(7)); + rektAngle = new Rectangle2D.Double((int) position.getX() - areaLeft, (int) position.getY() - areaTop, width + areaLeft + areaRight, height + areaTop + areaBottom); + tx = getTransformRectangle(); + rektAngle.setFrame(tx.createTransformedShape(rektAngle).getBounds()); + g.draw(rektAngle); + g.setColor(Color.YELLOW); + upperLeftCorner = new Rectangle2D.Double(rektAngle.getX() - 7, rektAngle.getY() - 7, 15, 15); + upperRightCorner = new Rectangle2D.Double(rektAngle.getX() + rektAngle.getWidth() - 8, rektAngle.getY() - 7, 15, 15); + bottomLeftCorner = new Rectangle2D.Double(rektAngle.getX() - 7, rektAngle.getY() + rektAngle.getHeight() - 8, 15, 15); + bottomRightCorner = new Rectangle2D.Double(rektAngle.getX() + rektAngle.getWidth() - 8, rektAngle.getY() + rektAngle.getHeight() - 8, 15, 15); + g.fill(upperLeftCorner); // upperleft + g.fill(upperRightCorner); // upperright + g.fill(bottomLeftCorner); // bottomleft + g.fill(bottomRightCorner); // bottomright + g.setColor(Color.RED); + rotateDot = new Ellipse2D.Double((rektAngle.getX() + (rektAngle.getWidth() / 2)) - 8, rektAngle.getY() - 8, 15, 15); + g.fill(rotateDot); + + } + } + + protected AffineTransform getTransform() + { + AffineTransform tx = new AffineTransform(); + tx.scale(scale, scale); + tx.translate(position.getX(), position.getY()); + tx.rotate(Math.toRadians(rotation), (width + areaLeft + areaRight) / 2, (height + areaTop + areaBottom) / 2); + return tx; + } + + protected AffineTransform getTransformSelection() + { + AffineTransform tx = new AffineTransform(); + tx.scale(scale, scale); + tx.translate(position.getX(), position.getY()); + return tx; + } + + /** + * Special transformation for the selection rectangle, because the + * translation of the image one places the rectangle translated from the + * image. + * + * @return affineTransform + */ + private AffineTransform getTransformRectangle() + { + AffineTransform tx = new AffineTransform(); + tx.scale(scale, scale); + return tx; + } + + public boolean contains(Point2D clickPoint) + { + Shape shape; + if (rektAngle == null) + { + shape = new Rectangle2D.Double(0 - areaLeft, 0 - areaTop, width + areaLeft + areaRight, height + areaTop + areaBottom); + return getTransform().createTransformedShape(shape).contains(clickPoint); + + } + else + { + shape = new Rectangle2D.Double(-9 - areaLeft, -9 - areaTop, width + 13 + areaLeft + areaRight, height + 13 + areaTop + areaBottom); + return getTransformSelection().createTransformedShape(shape).contains(clickPoint); + } + + } + + public Point2D getObjectPoint(Point2D point) + { + try + { + return getTransform().inverseTransform(point, null); + + } + catch (NoninvertibleTransformException e) + { + e.printStackTrace(); + } + return null; + } + + /** + * Method that gets all the corner + * coordinates index: 0 -> top left 1 -> top right 3 -> bottom left 4 -> + * bottom right + * + * @return corner coordinates + */ + public Point2D[] getCorners() + { + Rectangle2D tempRekt = new Rectangle2D.Double(0, 0, image.getWidth(null), image.getHeight(null)); + tempRekt.setFrame(getTransform().createTransformedShape(tempRekt).getBounds()); + Point2D[] points = new Point2D[4]; + Point2D point = new Point2D.Double(tempRekt.getX(), tempRekt.getY()); + points[0] = point; + point = new Point2D.Double(tempRekt.getX() + tempRekt.getHeight(), tempRekt.getY()); + points[1] = point; + point = new Point2D.Double(tempRekt.getX(), tempRekt.getY() + tempRekt.getHeight()); + points[2] = point; + point = new Point2D.Double(tempRekt.getX() + tempRekt.getHeight(), tempRekt.getY() + tempRekt.getHeight()); + points[3] = point; + return points; + } + + /** + * Checking + * collision. + * + * @param object + * . the drawObject to check collision with. + * @return if there is a collision. + */ + public boolean collision(DrawObject object) + { + Shape ownShape = getRectangle(); + Rectangle2D otherRectangle = object.getTransform().createTransformedShape(object.getImageRectangle()).getBounds2D(); + if(ownShape != null && otherRectangle != null) { + if (ownShape.intersects(otherRectangle)) + return true; + else + return false; + } + else + return false; + } + + /** + * This method checks if the place thats clicked is inside one of the + * corners. + * + * @param point + * @param corner + * @return if the clicked point is inside one of the corners + */ + public boolean containsCorner(Point2D point, int corner) + { + Rectangle2D chosenCorner = null; + switch (corner) + { + case 0: + chosenCorner = upperLeftCorner; + break; + case 1: + chosenCorner = upperRightCorner; + break; + case 2: + chosenCorner = bottomLeftCorner; + break; + case 3: + chosenCorner = bottomRightCorner; + break; + case 4: + if (point.getX() > rotateDot.getX() && point.getX() < rotateDot.getX() + rotateDot.getWidth() && point.getY() > rotateDot.getY() && point.getY() < rotateDot.getY() + rotateDot.getHeight()) + return true; + else + return false; + + } + if (point.getX() > chosenCorner.getX() && point.getX() < chosenCorner.getX() + chosenCorner.getWidth() && point.getY() > chosenCorner.getY() && point.getY() < chosenCorner.getY() + chosenCorner.getHeight()) + return true; + else + return false; + } + + public void setSelected(boolean b) + { + selected = b; + } + + public Point2D getPosition() + { + return position; + } + + public void setPosition(Point2D position) + { + this.position = position; + } + + public double getRotation() + { + return rotation; + } + + public void setRotation(double rotation) + { + this.rotation = rotation; + } + + public double getScale() + { + return scale; + } + + public void setScale(double scale) + { + this.scale = scale; + } + + public Image getImage() + { + return image; + } + + public void setImage(Image image) + { + this.image = image; + } + + public boolean isSelected() + { + return selected; + } + + public Rectangle2D getRectangle() + { + return rektAngle; + } + + public void setRectangle(Rectangle2D rectangle) + { + rektAngle = rectangle; + } + + public Color getRectangleColor() + { + return rectangleColor; + } + + public void setRectangleColor(Color rectangleColor) + { + this.rectangleColor = rectangleColor; + } + + public Rectangle2D getImageRectangle() + { + return new Rectangle2D.Double(0, 0, image.getWidth(null), image.getHeight(null)); + } + + public int getAreaTop() + { + return areaTop; + } + + public void setAreaTop(int areaTop) + { + this.areaTop = areaTop; + } + + public int getAreaBottom() + { + return areaBottom; + } + + public void setAreaBottom(int areaBottom) + { + this.areaBottom = areaBottom; + } + + public int getAreaLeft() + { + return areaLeft; + } + + public void setAreaLeft(int areaLeft) + { + this.areaLeft = areaLeft; + } + + public int getAreaRight() + { + return areaRight; + } + + public void setAreaRight(int areaRight) + { + this.areaRight = areaRight; + } + +} diff --git a/Objects/Entrance.java b/Objects/Entrance.java index 69a7033..eab28db 100644 --- a/Objects/Entrance.java +++ b/Objects/Entrance.java @@ -2,8 +2,6 @@ package Objects; import java.awt.geom.Point2D; -import Applicatie.DrawObject; - public class Entrance extends DrawObject { diff --git a/Objects/Food.java b/Objects/Food.java index cdd5028..d6bdb65 100644 --- a/Objects/Food.java +++ b/Objects/Food.java @@ -1,8 +1,6 @@ package Objects; import java.awt.geom.Point2D; -import Applicatie.DrawObject; - public class Food extends DrawObject { diff --git a/Objects/OldPath.java b/Objects/OldPath.java deleted file mode 100644 index eea51b7..0000000 --- a/Objects/OldPath.java +++ /dev/null @@ -1,21 +0,0 @@ -package Objects; - -import java.awt.geom.Point2D; - -import Applicatie.DrawObject; - -public class OldPath extends DrawObject -{ - - public OldPath(Point2D position) - { - super("images/path.jpg", position); - } - - @Override - public String getName() - { - return "Path"; - } - -} diff --git a/Objects/Path.java b/Objects/Path.java index b6e7da0..67cbe12 100644 --- a/Objects/Path.java +++ b/Objects/Path.java @@ -21,6 +21,7 @@ import javax.imageio.ImageIO; */ public class Path { + private ArrayList points; private ArrayList lines; private Point2D tempPoint; diff --git a/Objects/Stage.java b/Objects/Stage.java index 9827adc..2c3b82c 100644 --- a/Objects/Stage.java +++ b/Objects/Stage.java @@ -2,8 +2,6 @@ package Objects; import java.awt.geom.Point2D; -import Applicatie.DrawObject; - public class Stage extends DrawObject { public Stage(Point2D position) diff --git a/Objects/Toilet.java b/Objects/Toilet.java index f0a0aa8..3a8708a 100644 --- a/Objects/Toilet.java +++ b/Objects/Toilet.java @@ -2,8 +2,6 @@ package Objects; import java.awt.geom.Point2D; -import Applicatie.DrawObject; - public class Toilet extends DrawObject { diff --git a/Objects/Wall.java b/Objects/Wall.java index 6c213d4..e79b3c1 100644 --- a/Objects/Wall.java +++ b/Objects/Wall.java @@ -2,8 +2,6 @@ package Objects; import java.awt.geom.Point2D; -import Applicatie.DrawObject; - public class Wall extends DrawObject { diff --git a/images/sand.jpg b/images/sand.jpg new file mode 100644 index 0000000000000000000000000000000000000000..94faf79f14fb6c03306ad3244d0d1de035358180 GIT binary patch literal 5071 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 M8HyLzvz$)+3%e12oB#j- literal 0 HcmV?d00001