fixed overlapping objects

banaan
This commit is contained in:
xrgman
2015-03-18 12:51:30 +01:00
parent 34bc4526fc
commit 10951fe225
5 changed files with 125 additions and 41 deletions
+30 -11
View File
@@ -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;
}
/**
+33
View File
@@ -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
View File
@@ -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
View File
@@ -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 -14
View File
@@ -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())