Dropping of stones on hand

git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@208 72836036-5685-4462-b002-a69064685172
This commit is contained in:
Jannis Harder 2011-05-10 01:39:35 +02:00
parent c9eb1cbdb8
commit 201c40a399
2 changed files with 43 additions and 17 deletions

View file

@ -60,8 +60,16 @@ public class TurnControl {
connections.add(view.getPlayerPanel().getEndTurnEvent()
.add(endOfTurnListener));
connections.add(view.getPlayerPanel().getHandPanel().getStoneClickEvent()
.add(new IListener2<Stone, Boolean>() {
connections.add(view.getPlayerPanel().getHandPanel().getClickEvent()
.add(new IListener1<Position>() {
@Override
public void handle(Position pos) {
handClick(pos);
}
}));
connections.add(view.getPlayerPanel().getHandPanel()
.getStoneClickEvent().add(new IListener2<Stone, Boolean>() {
@Override
public void handle(Stone stone, Boolean collect) {
@ -69,8 +77,8 @@ public class TurnControl {
}
}));
connections.add(view.getPlayerPanel().getHandPanel().getRangeClickEvent()
.add(new IListener2<Stone, Boolean>() {
connections.add(view.getPlayerPanel().getHandPanel()
.getRangeClickEvent().add(new IListener2<Stone, Boolean>() {
@Override
public void handle(Stone stone, Boolean collect) {
@ -161,6 +169,26 @@ public class TurnControl {
timer.startTimer();
}
private void handClick(Position pos) {
List<Stone> handStones = new ArrayList<Stone>();
for (Stone s : selectedStones) {
if (hand.pickUp(s)) {
handStones.add(s);
}
}
int i = 0;
for (Stone s : handStones) {
float x = Math.max(0,
Math.min(13, pos.getX() - handStones.size() / 2.0f + i));
hand.drop(s, new Position(x, (float) Math.floor(pos.getY())));
selectedStones.remove(s);
i++;
}
view.setSelectedStones(selectedStones);
view.getPlayerPanel().getHandPanel().setStones(hand);
}
private void sortStones(Comparator<Stone> comparator) {
List<Stone> stones = new ArrayList<Stone>();
for (Pair<Stone, Position> entry : hand) {
@ -171,7 +199,6 @@ public class TurnControl {
}
Collections.sort(stones, comparator);
int x = 0, y = 0;
for (Stone stone : stones) {
hand.drop(stone, new Position(x, y));
@ -181,7 +208,8 @@ public class TurnControl {
y++;
if (y >= RoundControl.HAND_HEIGHT) {
throw new ArrayIndexOutOfBoundsException(); // TODO We can't handle
throw new ArrayIndexOutOfBoundsException(); // TODO We can't
// handle
// this yet...
}
}
@ -356,15 +384,12 @@ public class TurnControl {
table.drop(joinedSet, newPos);
} else {
StoneSet joinedSet = new StoneSet(selectedStones).join(newSet);
table.drop(joinedSet,
new Position(newPos.getX() - selectedStones.size(), newPos.getY()));
table.drop(joinedSet, new Position(newPos.getX()
- selectedStones.size(), newPos.getY()));
}
} else {
table.drop(
new StoneSet(selectedStones),
new Position(
pos.getX() + (set.size() - selectedStones.size()) * 0.5f, pos
.getY()));
table.drop(new StoneSet(selectedStones), new Position(pos.getX()
+ (set.size() - selectedStones.size()) * 0.5f, pos.getY()));
}
selectedStones.clear();
@ -459,7 +484,8 @@ public class TurnControl {
static class HandStonePositionComparator implements
Comparator<Pair<Stone, Position>> {
@Override
public int compare(Pair<Stone, Position> pair1, Pair<Stone, Position> pair2) {
public int compare(Pair<Stone, Position> pair1,
Pair<Stone, Position> pair2) {
Position pos1 = pair1.getSecond(), pos2 = pair2.getSecond();
if (pos1.getY() < pos2.getY()) {
return -1;

View file

@ -1051,7 +1051,7 @@ public class TurnControlTest {
Set<Stone> handStones = new HashSet<Stone>();
for (Pair<Stone, Position> stone : mockHand.stones) {
assertEquals(stone.getSecond(), new Position(2,0));
assertEquals(stone.getSecond().getY(), 0, 0.0001);
handStones.add(stone.getFirst());
}
assertEquals(expected, handStones);
@ -1081,7 +1081,7 @@ public class TurnControlTest {
Set<Stone> handStones = new HashSet<Stone>();
for (Pair<Stone, Position> stone : mockHand.stones) {
assertEquals(stone.getSecond(), new Position(2,0));
assertEquals(stone.getSecond().getY(), 0, 0.0001);
handStones.add(stone.getFirst());
}
assertEquals(expected, handStones);