summaryrefslogtreecommitdiffstats
path: root/src/jrummikub/model/StoneTray.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/jrummikub/model/StoneTray.java')
-rw-r--r--src/jrummikub/model/StoneTray.java36
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);