fixed overlapping objects
banaan
This commit is contained in:
+30
-11
@@ -148,17 +148,36 @@ public abstract class DrawObject
|
||||
return points;
|
||||
}
|
||||
|
||||
public boolean collision(Point2D[] corners) {
|
||||
Point2D[] ownCorners = getCorners();
|
||||
for(int i = 0; i < corners.length; i++) {
|
||||
Point2D corner = corners[i];
|
||||
if(corner.getX() > ownCorners[0].getX() && corner.getX() < ownCorners[1].getX()) {
|
||||
if(corner.getY() > ownCorners[0].getY() && corner.getY() < ownCorners[2].getY()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
/**
|
||||
*
|
||||
* @param corners
|
||||
* @return if there is a collision
|
||||
*/
|
||||
public boolean collision(DrawObject object) {
|
||||
//Point2D[] ownCorners = getCorners();
|
||||
Point2D[] objectCorners = object.getCorners();
|
||||
Shape ownShape = new Rectangle2D.Double(-9, -9, image.getWidth(null) + 13, image.getHeight(null) + 13);
|
||||
ownShape = getTransformSelection().createTransformedShape(ownShape);
|
||||
//Shape otherShape = new Rectangle2D.Double(-9, -9,object.getImage().getWidth(null) + 13,object.getImage().getHeight(null) + 13);
|
||||
//otherShape = getTransformSelection().createTransformedShape(otherShape);
|
||||
if(ownShape.contains(objectCorners[0]))
|
||||
return true;
|
||||
else if(ownShape.contains(objectCorners[1]))
|
||||
return true;
|
||||
else if(ownShape.contains(objectCorners[2]))
|
||||
return true;
|
||||
else if(ownShape.contains(objectCorners[3]))
|
||||
return true;
|
||||
// if(otherShape.contains(ownCorners[0]))
|
||||
// return true;
|
||||
// else if(otherShape.contains(ownCorners[1]))
|
||||
// return true;
|
||||
// else if(otherShape.contains(ownCorners[2]))
|
||||
// return true;
|
||||
// else if(otherShape.contains(ownCorners[3]))
|
||||
// return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package Applicatie;
|
||||
|
||||
import java.awt.BasicStroke;
|
||||
import java.awt.Color;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Point;
|
||||
@@ -53,6 +54,7 @@ public class Panel extends JPanel
|
||||
|
||||
Point2D lastClickPosition = new Point(0, 0);
|
||||
Point lastMousePosition = new Point(0, 0);
|
||||
Point2D selectionPosition = new Point(0,0);
|
||||
|
||||
// how to nieuwe dingen aan het panel toe te voegen:
|
||||
// maak bufferedimage global aan, voeg er een image aan toe, en voeg de
|
||||
@@ -60,6 +62,14 @@ public class Panel extends JPanel
|
||||
// en maak een case statement die een new Object returnt in
|
||||
// createNewDrawObject.
|
||||
|
||||
public Point2D getSelectionPosition() {
|
||||
return selectionPosition;
|
||||
}
|
||||
|
||||
public void setSelectionPosition(Point2D selectionPosition) {
|
||||
this.selectionPosition = selectionPosition;
|
||||
}
|
||||
|
||||
Panel(PropertiesPanel pp)
|
||||
{
|
||||
this.pp = pp;
|
||||
@@ -339,4 +349,27 @@ public class Panel extends JPanel
|
||||
repaint();
|
||||
}
|
||||
}
|
||||
|
||||
public void clearObjectSelection() {
|
||||
for(DrawObject o : objects) {
|
||||
o.setSelected(false);
|
||||
}
|
||||
}
|
||||
|
||||
public void checkCollision() {
|
||||
boolean collision = false;
|
||||
for(DrawObject o : getObjects()) {
|
||||
if(getSelectedObject().collision(o) && o != getSelectedObject()) {
|
||||
collision = true;
|
||||
getSelectedObject().setRectangleColor(Color.RED);
|
||||
break;
|
||||
}
|
||||
if(!collision)
|
||||
getSelectedObject().setRectangleColor(Color.BLACK);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
+36
-4
@@ -1,7 +1,9 @@
|
||||
package Listeners;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.awt.event.KeyListener;
|
||||
import java.awt.geom.Point2D;
|
||||
|
||||
import Applicatie.Panel;
|
||||
|
||||
@@ -16,20 +18,50 @@ public class Keyboard implements KeyListener {
|
||||
@Override
|
||||
public void keyPressed(KeyEvent e) {
|
||||
if(e.getKeyCode() == e.VK_DELETE ) {
|
||||
if(panel.getSelectedObject() != null) {
|
||||
if(panel.getSelectedObject() != null)
|
||||
panel.removeObject(panel.getSelectedObject());
|
||||
}
|
||||
}
|
||||
else if(e.getKeyCode() == e.VK_LEFT) {
|
||||
if(panel.getSelectedObject() != null)
|
||||
panel.getSelectedObject().setPosition(new Point2D.Double(panel.getSelectedObject().getPosition().getX()-5,panel.getSelectedObject().getPosition().getY()));
|
||||
panel.checkCollision();
|
||||
}
|
||||
else if(e.getKeyCode() == e.VK_RIGHT) {
|
||||
if(panel.getSelectedObject() != null)
|
||||
panel.getSelectedObject().setPosition(new Point2D.Double(panel.getSelectedObject().getPosition().getX()+5,panel.getSelectedObject().getPosition().getY()));
|
||||
panel.checkCollision();
|
||||
}
|
||||
else if(e.getKeyCode() == e.VK_UP) {
|
||||
if(panel.getSelectedObject() != null)
|
||||
panel.getSelectedObject().setPosition(new Point2D.Double(panel.getSelectedObject().getPosition().getX(),panel.getSelectedObject().getPosition().getY()-5));
|
||||
panel.checkCollision();
|
||||
}
|
||||
else if(e.getKeyCode() == e.VK_DOWN) {
|
||||
if(panel.getSelectedObject() != null)
|
||||
panel.getSelectedObject().setPosition(new Point2D.Double(panel.getSelectedObject().getPosition().getX(),panel.getSelectedObject().getPosition().getY()+5));
|
||||
panel.checkCollision();
|
||||
}
|
||||
panel.repaint();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void keyReleased(KeyEvent e) {
|
||||
|
||||
//if(e.getKeyCode() == e.VK_LEFT) {
|
||||
checkCollision();
|
||||
//}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void keyTyped(KeyEvent e) {
|
||||
|
||||
}
|
||||
|
||||
private void checkCollision() {
|
||||
if(panel.getSelectedObject() != null) {
|
||||
if(panel.getSelectedObject().getRectangleColor() != Color.BLACK) {
|
||||
panel.getSelectedObject().setPosition(panel.getSelectionPosition());
|
||||
panel.getSelectedObject().setRectangleColor(Color.BLACK);
|
||||
}
|
||||
panel.repaint();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+25
-12
@@ -1,17 +1,14 @@
|
||||
package Listeners;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.geom.Point2D;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
|
||||
import Applicatie.DrawObject;
|
||||
import Applicatie.Panel;
|
||||
|
||||
import Objects.Stage;
|
||||
|
||||
public class Mouse extends MouseAdapter
|
||||
{
|
||||
|
||||
@@ -39,7 +36,13 @@ public class Mouse extends MouseAdapter
|
||||
{
|
||||
DrawObject tempDrawObj = panel.createNewDrawObject(i);
|
||||
tempDrawObj.setPosition(clickPoint);
|
||||
if(!panel.getObjects().isEmpty())
|
||||
panel.clearObjectSelection();
|
||||
panel.setDragObject(tempDrawObj);
|
||||
panel.getDragObject().setSelected(true);
|
||||
panel.getPP().setSelected(tempDrawObj);
|
||||
panel.setSelectedObject(tempDrawObj);
|
||||
selectedObject = tempDrawObj;
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
@@ -58,11 +61,11 @@ public class Mouse extends MouseAdapter
|
||||
{
|
||||
if (o == selectedObject)
|
||||
{
|
||||
boolean upperLeft = o.containsCorner(clickPoint, 0);
|
||||
boolean upperRight = o.containsCorner(clickPoint, 1);
|
||||
boolean bottomLeft = o.containsCorner(clickPoint, 2);
|
||||
boolean bottomRight = o.containsCorner(clickPoint, 3);
|
||||
boolean rotate = o.containsCorner(clickPoint, 4);
|
||||
boolean upperLeft = o.containsCorner(clickPoint,0);
|
||||
boolean upperRight = o.containsCorner(clickPoint,1);
|
||||
boolean bottomLeft = o.containsCorner(clickPoint,2);
|
||||
boolean bottomRight = o.containsCorner(clickPoint,3);
|
||||
boolean rotate = o.containsCorner(clickPoint,4);
|
||||
if (upperLeft)
|
||||
{
|
||||
panel.setClickedOption("upperLeft");
|
||||
@@ -95,13 +98,14 @@ public class Mouse extends MouseAdapter
|
||||
panel.setDragObject(o);
|
||||
panel.getPP().setSelected(o);
|
||||
panel.setSelectedObject(o);
|
||||
|
||||
panel.setSelectionPosition(panel.getDragObject().getPosition());
|
||||
}
|
||||
}
|
||||
}
|
||||
if (panel.getDragObject() == null && selectedObject != null)
|
||||
{
|
||||
selectedObject.setSelected(false);
|
||||
panel.setSelectedObject(null);
|
||||
panel.getPP().clearSelected();
|
||||
selectedObject = null;
|
||||
}
|
||||
@@ -110,8 +114,17 @@ public class Mouse extends MouseAdapter
|
||||
|
||||
public void mouseReleased(MouseEvent e)
|
||||
{
|
||||
panel.setDragObject(null);
|
||||
panel.setClickedOption("drag");
|
||||
if(panel.getDragObject() != null) {
|
||||
if(panel.getDragObject().getRectangleColor() != Color.RED) {
|
||||
panel.setDragObject(null);
|
||||
panel.setClickedOption("drag");
|
||||
}
|
||||
else {
|
||||
panel.getDragObject().setPosition(panel.getSelectionPosition());
|
||||
panel.getDragObject().setRectangleColor(Color.BLACK);
|
||||
}
|
||||
panel.setSelectionPosition(panel.getSelectedObject().getPosition());
|
||||
}
|
||||
panel.repaint();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package Listeners;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Point;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.event.MouseMotionAdapter;
|
||||
import java.awt.geom.Point2D;
|
||||
@@ -22,7 +21,6 @@ public class MouseMotion extends MouseMotionAdapter
|
||||
public void mouseDragged(MouseEvent e)
|
||||
{
|
||||
Point2D clickPoint = panel.getClickPoint(e.getPoint());
|
||||
Point2D tempPoint = null;
|
||||
if (panel.getDragObject() != null)
|
||||
{
|
||||
switch (panel.getClickedOption())
|
||||
@@ -32,18 +30,7 @@ public class MouseMotion extends MouseMotionAdapter
|
||||
if (panel.getDragObject() != null)
|
||||
panel.getDragObject().setPosition(new Point2D.Double((panel.getDragObject().getPosition().getX()) - ((panel.getLastClickPosition().getX() - clickPoint.getX())) / panel.getDragObject().getScale(),
|
||||
(panel.getDragObject().getPosition().getY()) - (panel.getLastClickPosition().getY() - clickPoint.getY()) / panel.getDragObject().getScale()));
|
||||
for(DrawObject o : panel.getObjects()) {
|
||||
if(o.collision(panel.getDragObject().getCorners()) && o != panel.getDragObject()) {
|
||||
System.out.println("Hover");
|
||||
collision = true;
|
||||
panel.getDragObject().setRectangleColor(Color.RED);
|
||||
break;
|
||||
}
|
||||
if(!collision) {
|
||||
System.out.println("nega");
|
||||
panel.getDragObject().setRectangleColor(Color.BLACK);
|
||||
}
|
||||
}
|
||||
panel.checkCollision();
|
||||
break;
|
||||
case "upperLeft":
|
||||
if (clickPoint.getX() < panel.getDragObject().getPosition().getX() && clickPoint.getY() < panel.getDragObject().getPosition().getY())
|
||||
|
||||
Reference in New Issue
Block a user