diff options
Diffstat (limited to 'src/jrummikub/model/StoneTray.java')
-rw-r--r-- | src/jrummikub/model/StoneTray.java | 36 |
1 files changed, 23 insertions, 13 deletions
diff --git a/src/jrummikub/model/StoneTray.java b/src/jrummikub/model/StoneTray.java index ff32153..0d48bf5 100644 --- a/src/jrummikub/model/StoneTray.java +++ b/src/jrummikub/model/StoneTray.java @@ -69,19 +69,8 @@ public class StoneTray<E extends Sizeable> implements for (Pair<E, Position> i : objects) { Position currentPosition = i.getSecond(); E currentObject = i.getFirst(); - // Tests if position is left of, above ... the current object - if (position.getX() + object.getWidth() <= currentPosition.getX()) { - continue; - } - if (position.getY() + object.getHeight() <= currentPosition.getY()) { - continue; - } - if (position.getX() >= currentPosition.getX() - + currentObject.getWidth()) { - continue; - } - if (position.getY() >= currentPosition.getY() - + currentObject.getHeight()) { + if (!objectsOverlap(object, position, + currentObject, currentPosition)) { continue; } // Object would be placed inside the current object @@ -114,6 +103,27 @@ public class StoneTray<E extends Sizeable> implements objects.add(new Pair<E, Position>(object, position)); } + /** Tests whether two objects overlap **/ + private boolean objectsOverlap(E object1, Position position1, E object2, + Position position2) { + // Tests if position is left of, above ... the current object + if (position1.getX() + object1.getWidth() <= position2.getX()) { + return false; + } + if (position1.getY() + object1.getHeight() <= position2.getY()) { + return false; + } + if (position1.getX() >= position2.getX() + + object2.getWidth()) { + return false; + } + if (position1.getY() >= position2.getY() + + object2.getHeight()) { + return false; + } + return true; + } + private Direction getMoveDirection(E object, Position position, Pair<E, Position> blocking) { boolean isVertical = getMoveOrientationn(object, position, blocking); |