Switched undo/redo buffer to use BlockPoint. Added Point.toBlockPoint().

Dieser Commit ist enthalten in:
sk89q 2010-10-11 11:21:43 -07:00
Ursprung f64cc76906
Commit 6882aa416d
2 geänderte Dateien mit 21 neuen und 12 gelöschten Zeilen

Datei anzeigen

@ -36,15 +36,15 @@ public class EditSession {
/** /**
* Stores the original blocks before modification. * Stores the original blocks before modification.
*/ */
private HashMap<Point,Integer> original = new HashMap<Point,Integer>(); private HashMap<BlockPoint,Integer> original = new HashMap<BlockPoint,Integer>();
/** /**
* Stores the current blocks. * Stores the current blocks.
*/ */
private HashMap<Point,Integer> current = new HashMap<Point,Integer>(); private HashMap<BlockPoint,Integer> current = new HashMap<BlockPoint,Integer>();
/** /**
* Queue. * Queue.
*/ */
private HashMap<Point,Integer> queue = new HashMap<Point,Integer>(); private HashMap<BlockPoint,Integer> queue = new HashMap<BlockPoint,Integer>();
/** /**
* The maximum number of blocks to change at a time. If this number is * The maximum number of blocks to change at a time. If this number is
* exceeded, a MaxChangedBlocksException exception will be * exceeded, a MaxChangedBlocksException exception will be
@ -130,14 +130,14 @@ public class EditSession {
public boolean setBlock(Point pt, int blockType) public boolean setBlock(Point pt, int blockType)
throws MaxChangedBlocksException { throws MaxChangedBlocksException {
if (!original.containsKey(pt)) { if (!original.containsKey(pt)) {
original.put(pt, getBlock(pt)); original.put(pt.toBlockPoint(), getBlock(pt));
if (maxBlocks != -1 && original.size() > maxBlocks) { if (maxBlocks != -1 && original.size() > maxBlocks) {
throw new MaxChangedBlocksException(maxBlocks); throw new MaxChangedBlocksException(maxBlocks);
} }
} }
current.put(pt, blockType); current.put(pt.toBlockPoint(), blockType);
return smartSetBlock(pt, blockType); return smartSetBlock(pt, blockType);
} }
@ -153,7 +153,7 @@ public class EditSession {
if (queued) { if (queued) {
if (blockType != 0 && queuedBlocks.contains(blockType) if (blockType != 0 && queuedBlocks.contains(blockType)
&& rawGetBlock(pt.add(0, -1, 0)) == 0) { && rawGetBlock(pt.add(0, -1, 0)) == 0) {
queue.put(pt, blockType); queue.put(pt.toBlockPoint(), blockType);
return getBlock(pt) != blockType; return getBlock(pt) != blockType;
} else if (blockType == 0 } else if (blockType == 0
&& queuedBlocks.contains(rawGetBlock(pt.add(0, 1, 0)))) { && queuedBlocks.contains(rawGetBlock(pt.add(0, 1, 0)))) {
@ -207,8 +207,8 @@ public class EditSession {
* Restores all blocks to their initial state. * Restores all blocks to their initial state.
*/ */
public void undo() { public void undo() {
for (Map.Entry<Point,Integer> entry : original.entrySet()) { for (Map.Entry<BlockPoint,Integer> entry : original.entrySet()) {
Point pt = (Point)entry.getKey(); BlockPoint pt = (BlockPoint)entry.getKey();
smartSetBlock(pt, (int)entry.getValue()); smartSetBlock(pt, (int)entry.getValue());
} }
flushQueue(); flushQueue();
@ -218,8 +218,8 @@ public class EditSession {
* Sets to new state. * Sets to new state.
*/ */
public void redo() { public void redo() {
for (Map.Entry<Point,Integer> entry : current.entrySet()) { for (Map.Entry<BlockPoint,Integer> entry : current.entrySet()) {
Point pt = (Point)entry.getKey(); BlockPoint pt = (BlockPoint)entry.getKey();
smartSetBlock(pt, (int)entry.getValue()); smartSetBlock(pt, (int)entry.getValue());
} }
flushQueue(); flushQueue();
@ -287,8 +287,8 @@ public class EditSession {
public void flushQueue() { public void flushQueue() {
if (!queued) { return; } if (!queued) { return; }
for (Map.Entry<Point,Integer> entry : queue.entrySet()) { for (Map.Entry<BlockPoint,Integer> entry : queue.entrySet()) {
Point pt = (Point)entry.getKey(); BlockPoint pt = (BlockPoint)entry.getKey();
rawSetBlock(pt, (int)entry.getValue()); rawSetBlock(pt, (int)entry.getValue());
} }
} }

Datei anzeigen

@ -377,4 +377,13 @@ public class Point {
public String toString() { public String toString() {
return "(" + x + ", " + y + ", " + z + ")"; return "(" + x + ", " + y + ", " + z + ")";
} }
/**
* Gets a BlockPoint version.
*
* @return BlockPoint
*/
public BlockPoint toBlockPoint() {
return new BlockPoint(this);
}
} }