summaryrefslogtreecommitdiffstats
path: root/src/jrummikub/model/StoneTray.java
diff options
context:
space:
mode:
authorIda Massow <massow@informatik.uni-luebeck.de>2011-05-04 19:09:39 +0200
committerIda Massow <massow@informatik.uni-luebeck.de>2011-05-04 19:09:39 +0200
commit6e9c1b539b412dc08716eb3f88adb53b3021a27b (patch)
treee7162d24700fb26b7103dc0f69705f70423cd288 /src/jrummikub/model/StoneTray.java
parent8e32bc9e696216129266406c085d59731aae043c (diff)
downloadJRummikub-6e9c1b539b412dc08716eb3f88adb53b3021a27b.tar
JRummikub-6e9c1b539b412dc08716eb3f88adb53b3021a27b.zip
Test für Austeilen geschrieben, eine Menge getSize hinzugefügt
git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@116 72836036-5685-4462-b002-a69064685172
Diffstat (limited to 'src/jrummikub/model/StoneTray.java')
-rw-r--r--src/jrummikub/model/StoneTray.java38
1 files changed, 24 insertions, 14 deletions
diff --git a/src/jrummikub/model/StoneTray.java b/src/jrummikub/model/StoneTray.java
index 080786b..d88d60c 100644
--- a/src/jrummikub/model/StoneTray.java
+++ b/src/jrummikub/model/StoneTray.java
@@ -11,7 +11,7 @@ import jrummikub.util.Pair;
* or {@link StoneSet}s.
*
* @param <E>
- * Type of positioned objects (must implement Sizeable)
+ * Type of positioned objects (must implement Sizeable)
*/
public class StoneTray<E extends Sizeable> implements IStoneTray<E> {
protected HashMap<E, Position> objects = new HashMap<E, Position>();
@@ -39,10 +39,12 @@ public class StoneTray<E extends Sizeable> implements IStoneTray<E> {
if (position.getY() < currentPosition.getY()) {
continue;
}
- if (position.getX() > currentPosition.getX() + currentObject.getWidth()) {
+ if (position.getX() > currentPosition.getX()
+ + currentObject.getWidth()) {
continue;
}
- if (position.getY() > currentPosition.getY() + currentObject.getHeight()) {
+ if (position.getY() > currentPosition.getY()
+ + currentObject.getHeight()) {
continue;
}
// Position is inside the current object
@@ -70,7 +72,8 @@ public class StoneTray<E extends Sizeable> implements IStoneTray<E> {
.entrySet()) {
Position currentPosition = i.getValue();
E currentObject = i.getKey();
- if (!objectsOverlap(object, position, currentObject, currentPosition)) {
+ if (!objectsOverlap(object, position, currentObject,
+ currentPosition)) {
continue;
}
// Object would be placed inside the current object
@@ -81,16 +84,16 @@ public class StoneTray<E extends Sizeable> implements IStoneTray<E> {
// Move object to avoid overlap
switch (direction) {
case TOP:
- newPosition = new Position(currentPosition.getX(), position.getY()
- - currentObject.getHeight());
+ newPosition = new Position(currentPosition.getX(),
+ position.getY() - currentObject.getHeight());
break;
case BOTTOM:
- newPosition = new Position(currentPosition.getX(), position.getY()
- + object.getHeight());
+ newPosition = new Position(currentPosition.getX(),
+ position.getY() + object.getHeight());
break;
case LEFT:
- newPosition = new Position(position.getX() - currentObject.getWidth(),
- currentPosition.getY());
+ newPosition = new Position(position.getX()
+ - currentObject.getWidth(), currentPosition.getY());
break;
case RIGHT:
newPosition = new Position(position.getX() + object.getWidth(),
@@ -153,13 +156,15 @@ public class StoneTray<E extends Sizeable> implements IStoneTray<E> {
float blockingRight = blocking.getValue().getX()
+ blocking.getKey().getWidth();
float overlapRight = Math.min(objectRight, blockingRight);
- float overlapLeft = Math.max(position.getX(), blocking.getValue().getX());
+ float overlapLeft = Math.max(position.getX(), blocking.getValue()
+ .getX());
float overlapX = overlapRight - overlapLeft;
float objectBottom = position.getY() + object.getHeight();
float blockingBottom = blocking.getValue().getY()
+ blocking.getKey().getHeight();
float overlapBottom = Math.min(objectBottom, blockingBottom);
- float overlapTop = Math.max(position.getY(), blocking.getValue().getY());
+ float overlapTop = Math
+ .max(position.getY(), blocking.getValue().getY());
float overlapY = overlapBottom - overlapTop;
// vertical or horizontal Shift
// TODO magic factor
@@ -178,8 +183,8 @@ public class StoneTray<E extends Sizeable> implements IStoneTray<E> {
@Override
public Iterator<Pair<E, Position>> iterator() {
- final Iterator<Map.Entry<E, Position>> entryIterator = objects.entrySet()
- .iterator();
+ final Iterator<Map.Entry<E, Position>> entryIterator = objects
+ .entrySet().iterator();
return new Iterator<Pair<E, Position>>() {
Iterator<Map.Entry<E, Position>> iterator = entryIterator;
@@ -225,4 +230,9 @@ public class StoneTray<E extends Sizeable> implements IStoneTray<E> {
return copy;
}
+ @Override
+ public int getSize() {
+ return objects.size();
+ }
+
}