/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.pepsoft.worldpainter;
import java.util.BitSet;
import java.util.EnumSet;
import java.util.Map;
import java.util.Set;
import org.pepsoft.util.undo.BufferKey;
import org.pepsoft.util.undo.Snapshot;
import org.pepsoft.util.undo.UndoManager;
import org.pepsoft.worldpainter.layers.Layer;
/**
*
* @author pepijn
*/
public final class TileSnapshot extends Tile {
public TileSnapshot(Tile tile, Snapshot snapshot) {
super(tile.getX(), tile.getY(), tile.getMaxHeight());
this.snapshot = snapshot;
HEIGHTMAP_BUFFER_KEY = new TileUndoBufferKey<>(tile, TileBuffer.HEIGHTMAP);
TERRAIN_BUFFER_KEY = new TileUndoBufferKey<>(tile, TileBuffer.TERRAIN);
WATERLEVEL_BUFFER_KEY = new TileUndoBufferKey<>(tile, TileBuffer.WATERLEVEL);
LAYER_DATA_BUFFER_KEY = new TileUndoBufferKey<>(tile, TileBuffer.LAYER_DATA);
BIT_LAYER_DATA_BUFFER_KEY = new TileUndoBufferKey<>(tile, TileBuffer.BIT_LAYER_DATA);
}
@Override
public void addListener(Listener listener) {
throw new UnsupportedOperationException();
}
@Override
public void unregister() {
// Do nothing
}
@Override
protected void ensureReadable(TileBuffer buffer) {
if (! readableBuffers.contains(buffer)) {
switch (buffer) {
case HEIGHTMAP:
heightMap = snapshot.getBuffer(HEIGHTMAP_BUFFER_KEY);
break;
case TERRAIN:
terrain = snapshot.getBuffer(TERRAIN_BUFFER_KEY);
break;
case WATERLEVEL:
waterLevel = snapshot.getBuffer(WATERLEVEL_BUFFER_KEY);
break;
case LAYER_DATA:
layerData = snapshot.getBuffer(LAYER_DATA_BUFFER_KEY);
break;
case BIT_LAYER_DATA:
bitLayerData = snapshot.getBuffer(BIT_LAYER_DATA_BUFFER_KEY);
break;
}
readableBuffers.add(buffer);
}
}
@Override
public boolean isEventsInhibited() {
return false;
}
@Override
public void register(UndoManager undoManager) {
throw new UnsupportedOperationException();
}
@Override
public void setBitLayerValue(Layer layer, int x, int y, boolean value) {
throw new UnsupportedOperationException();
}
@Override
public synchronized void inhibitEvents() {
throw new UnsupportedOperationException();
}
@Override
public synchronized void releaseEvents() {
throw new UnsupportedOperationException();
}
@Override
public void setHeight(int x, int y, float height) {
throw new UnsupportedOperationException();
}
@Override
public void setLayerValue(Layer layer, int x, int y, int value) {
throw new UnsupportedOperationException();
}
@Override
public void setTerrain(int x, int y, Terrain terrain) {
throw new UnsupportedOperationException();
}
@Override
public void setWaterLevel(int x, int y, int waterLevel) {
throw new UnsupportedOperationException();
}
@Override
public String toString() {
return "TileSnapshot[x=" + getX() + ",y=" + getY() + "]";
}
private final Snapshot snapshot;
private final Set<TileBuffer> readableBuffers = EnumSet.noneOf(TileBuffer.class);
private transient BufferKey<short[]> HEIGHTMAP_BUFFER_KEY;
private transient BufferKey<byte[]> TERRAIN_BUFFER_KEY;
private transient BufferKey<byte[]> WATERLEVEL_BUFFER_KEY;
private transient BufferKey<Map<Layer, byte[]>> LAYER_DATA_BUFFER_KEY;
private transient BufferKey<Map<Layer, BitSet>> BIT_LAYER_DATA_BUFFER_KEY;
private static final long serialVersionUID = 2011101501L;
}