From: Matthias T. <mt...@us...> - 2006-02-19 12:38:14
|
Update of /cvsroot/arianne/stendhal/tiled/src/tiled/core In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26453/tiled/src/tiled/core Modified Files: TileSet.java TileLayer.java PropertiesLayer.java MapLayer.java Sprite.java Removed Files: ObjectGroup.java MapObject.java Log Message: - restored painting undo/redo, should be less memory consuming now - removed object support. Objects are replaced by tiles with properties now --- ObjectGroup.java DELETED --- Index: TileLayer.java =================================================================== RCS file: /cvsroot/arianne/stendhal/tiled/src/tiled/core/TileLayer.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** TileLayer.java 12 Feb 2006 10:38:21 -0000 1.3 --- TileLayer.java 19 Feb 2006 12:38:01 -0000 1.4 *************** *** 197,227 **** */ public MapLayer createDiff(MapLayer ml) { ! if (ml == null) { return null; } ! if (ml instanceof TileLayer) { ! Rectangle r = null; ! for (int y = bounds.y; y < bounds.height + bounds.y; y++) { ! for (int x = bounds.x; x < bounds.width + bounds.x; x++) { ! if (((TileLayer)ml).getTileAt(x, y) != getTileAt(x, y)) { ! if (r != null) { ! r.add(x, y); ! } else { ! r = new Rectangle(new Point(x, y)); ! } } } } ! if (r != null) { ! MapLayer diff = new TileLayer( ! new Rectangle(r.x, r.y, r.width + 1, r.height + 1)); ! diff.copyFrom(ml); ! return diff; ! } else { ! return new TileLayer(); ! } } else { ! return null; } } --- 197,224 ---- */ public MapLayer createDiff(MapLayer ml) { ! if (ml == null || !(ml instanceof TileLayer)) { return null; } ! Rectangle r = null; ! TileLayer other = (TileLayer) ml; ! for (int y = bounds.y; y < bounds.height + bounds.y; y++) { ! for (int x = bounds.x; x < bounds.width + bounds.x; x++) { ! if (other.getTileAt(x, y) != getTileAt(x, y)) { ! if (r != null) { ! r.add(x, y); ! } else { ! r = new Rectangle(x, y, 0, 0); } } } + } ! if (r != null) { ! MapLayer diff = new TileLayer(new Rectangle(r.x, r.y, r.width + 1, r.height + 1)); ! diff.copyFrom(ml); ! diff.setName(name); ! return diff; } else { ! return new TileLayer(); } } *************** *** 258,267 **** */ public void setTileAt(int tx, int ty, Tile ti) { ! try { ! if (canEdit()) { ! map[ty - bounds.y][tx - bounds.x] = ti; ! } ! } catch (ArrayIndexOutOfBoundsException e) { ! // Silently ignore out of bounds exception } } --- 255,261 ---- */ public void setTileAt(int tx, int ty, Tile ti) { ! if (canEdit() && contains(tx,ty)) ! { ! map[ty - bounds.y][tx - bounds.x] = ti; } } *************** *** 333,337 **** */ public void mergeOnto(MapLayer other) { ! if(!other.canEdit()) return; --- 327,331 ---- */ public void mergeOnto(MapLayer other) { ! if(!other.canEdit() || !(other instanceof TileLayer)) return; *************** *** 350,363 **** * copyFrom() copies the empty cells as well. * ! * @see tiled.core.MapLayer#mergeOnto * @param other */ public void copyFrom(MapLayer other) { ! if (!canEdit()) return; ! for (int y = bounds.y; y < bounds.y + bounds.height; y++) { ! for (int x = bounds.x; x < bounds.x + bounds.width; x++) { ! setTileAt(x, y, ((TileLayer)other).getTileAt(x, y)); } } --- 344,363 ---- * copyFrom() copies the empty cells as well. * ! * @see tiled.core.MapLayer#copyFrom * @param other */ public void copyFrom(MapLayer other) { ! if (!canEdit() || !(other instanceof TileLayer)) return; + + TileLayer otherLayer = (TileLayer) other; + + Rectangle realBounds = bounds.intersection(other.getBounds()); ! for (int y = realBounds.y; y < realBounds.y + realBounds.height; y++) ! { ! for (int x = realBounds.x; x < realBounds.x + realBounds.width; x++) ! { ! setTileAt(x, y, otherLayer.getTileAt(x,y)); } } *************** *** 372,376 **** */ public void maskedCopyFrom(MapLayer other, Area mask) { ! if (!canEdit()) return; --- 372,376 ---- */ public void maskedCopyFrom(MapLayer other, Area mask) { ! if (!canEdit() || !(other instanceof TileLayer)) return; *************** *** 394,398 **** */ public void copyTo(MapLayer other) { ! if (!other.canEdit()) return; --- 394,398 ---- */ public void copyTo(MapLayer other) { ! if (!other.canEdit() || !(other instanceof TileLayer)) return; *************** *** 412,417 **** */ public Object clone() throws CloneNotSupportedException { ! TileLayer clone = null; ! clone = (TileLayer)super.clone(); // Clone the layer data --- 412,416 ---- */ public Object clone() throws CloneNotSupportedException { ! TileLayer clone = (TileLayer)super.clone(); // Clone the layer data *************** *** 452,454 **** --- 451,472 ---- bounds.height = height; } + + /** copies the layer */ + public MapLayer getLayerCopy(Rectangle bounds) + { + Rectangle realBounds = bounds.union(bounds); + TileLayer other = new TileLayer(); + other.setBounds(realBounds); + copyParameter(other); + + for (int x = realBounds.x; x < realBounds.x+realBounds.width; x++) + { + for (int y = realBounds.y; y < realBounds.y+realBounds.height; y++) + { + other.setTileAt(x,y,getTileAt(x,y)); + } + } + + return other; + } } Index: TileSet.java =================================================================== RCS file: /cvsroot/arianne/stendhal/tiled/src/tiled/core/TileSet.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** TileSet.java 12 Feb 2006 10:38:21 -0000 1.3 --- TileSet.java 19 Feb 2006 12:38:01 -0000 1.4 *************** *** 111,116 **** } - // System.out.println("Importing " + imgFilename + "..."); - importTileBitmap(ImageIO.read(imgFile.toURL()), tileWidth, tileHeight, spacing, createTiles); --- 111,114 ---- *************** *** 277,281 **** tiles.set(t.getId(), t); - //System.out.println("adding tile " +t.getId()); t.setTileSet(this); t.setStandardHeight(standardHeight); --- 275,278 ---- *************** *** 663,667 **** Image[] imgs = images.get(key); if (imgs[0] == image) { - //System.out.println("Success: " + key); return key; } --- 660,663 ---- *************** *** 695,700 **** return addImage(image); } else { - //System.out.print(name+".addImage(Image, Object): " + key + " "); - //System.out.println("Checksum: " + cs); Image[] imgs = new Image[8]; imgs[0] = internImage(image); --- 691,694 ---- *************** *** 705,709 **** public void removeImage(String id) { - //System.out.println(name+".removeImage(Object): " + id); // This operation is siginificantly slower now that 'images' stores // images directly instead of storing hashes. Fortunately this --- 699,702 ---- Index: MapLayer.java =================================================================== RCS file: /cvsroot/arianne/stendhal/tiled/src/tiled/core/MapLayer.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** MapLayer.java 12 Feb 2006 10:38:21 -0000 1.3 --- MapLayer.java 19 Feb 2006 12:38:01 -0000 1.4 *************** *** 42,46 **** protected String name; protected boolean isVisible = true; ! protected boolean bLocked = false; protected Map myMap; protected float opacity = 1.0f; --- 42,46 ---- protected String name; protected boolean isVisible = true; ! protected boolean locked = false; protected Map myMap; protected float opacity = 1.0f; *************** *** 103,110 **** } - public abstract void rotate(int angle); - - public abstract void mirror(int dir); - /** * Sets the bounds (in tiles) to the specified Rectangle. --- 103,106 ---- *************** *** 243,263 **** } - public abstract void mergeOnto(MapLayer other); - - public abstract void copyFrom(MapLayer other); - - public abstract void maskedCopyFrom(MapLayer other, Area mask); - - public abstract MapLayer createDiff(MapLayer ml); - - /** - * Unlike mergeOnto, copyTo includes the null tile when merging - * - * @see tiled.core.MapLayer#copyFrom - * @see tiled.core.MapLayer#mergeOnto - * @param other the layer to copy this layer to - */ - public abstract void copyTo(MapLayer other); - /** * Creates a copy of this layer. --- 239,242 ---- *************** *** 277,289 **** } - /** - * @see MultilayerPlane#resize - * - * @param width the new width of the layer - * @param height the new height of the layer - * @param dx the shift in x direction - * @param dy the shift in y direction - */ - public abstract void resize(int width, int height, int dx, int dy); /** --- 256,259 ---- *************** *** 293,297 **** */ public boolean isLocked() { ! return bLocked; } --- 263,267 ---- */ public boolean isLocked() { ! return locked; } *************** *** 303,307 **** */ public void setLocked(boolean lock) { ! bLocked = lock; } --- 273,277 ---- */ public void setLocked(boolean lock) { ! locked = lock; } *************** *** 317,319 **** --- 287,346 ---- return !isLocked() && isVisible(); } + + /** + * Copies the layer parameter (except the bounds and the map) to the + * destination layer. It is a convenience method for #getLayerCopy(). + * + * <b>Note:</b> The class of the destination layer is not checked. + * + * @param destination the destination layer + */ + protected void copyParameter(MapLayer destination) + { + destination.name = name; + destination.isVisible = isVisible; + destination.locked = locked; + destination.opacity = opacity; + destination.properties.clear(); + destination.properties.putAll(properties); + } + + /** rotates the layer */ + public abstract void rotate(int angle); + /** mirrors the layer */ + public abstract void mirror(int dir); + public abstract void mergeOnto(MapLayer other); + public abstract void copyFrom(MapLayer other); + public abstract void maskedCopyFrom(MapLayer other, Area mask); + public abstract MapLayer createDiff(MapLayer ml); + + /** + * @see MultilayerPlane#resize + * + * @param width the new width of the layer + * @param height the new height of the layer + * @param dx the shift in x direction + * @param dy the shift in y direction + */ + public abstract void resize(int width, int height, int dx, int dy); + + /** + * Unlike mergeOnto, copyTo includes the null tile when merging + * + * @param other the layer to copy this layer to + * @see tiled.core.MapLayer#copyFrom + * @see tiled.core.MapLayer#mergeOnto + */ + public abstract void copyTo(MapLayer other); + + /** + * Returns a copy of this layer within the bounds <code>bounds</code>. If + * <code>bounds</code> is <code>null</code> the layer should copy all. + * + * @param bounds the bounds to the copied layer + * @return the copied layer + * @see #copyParameter(MapLayer) + */ + public abstract MapLayer getLayerCopy(Rectangle bounds); + } Index: Sprite.java =================================================================== RCS file: /cvsroot/arianne/stendhal/tiled/src/tiled/core/Sprite.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** Sprite.java 6 Dec 2005 20:10:35 -0000 1.1 --- Sprite.java 19 Feb 2006 12:38:01 -0000 1.2 *************** *** 251,255 **** x=(((int)currentFrame)%fpl)*(frameSize.width+borderWidth); - //System.out.println(""+currentFrame+": ("+x+"x"+y+")->("+frameSize.width+"x"+frameSize.height+")"); g.drawImage(sprite,0,0,frameSize.width,frameSize.height,x,y,frameSize.width+x,frameSize.height+y,null); } --- 251,254 ---- Index: PropertiesLayer.java =================================================================== RCS file: /cvsroot/arianne/stendhal/tiled/src/tiled/core/PropertiesLayer.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** PropertiesLayer.java 12 Feb 2006 10:38:21 -0000 1.1 --- PropertiesLayer.java 19 Feb 2006 12:38:01 -0000 1.2 *************** *** 4,7 **** --- 4,8 ---- package tiled.core; + import java.awt.Rectangle; import java.awt.geom.Area; import java.util.Properties; *************** *** 24,28 **** public PropertiesLayer(int width, int height) { ! super(width,height); properties = new Properties[width][height]; setName("properties"); --- 25,37 ---- public PropertiesLayer(int width, int height) { ! this(0,0,width,height); ! } ! /** ! * @param width ! * @param height ! */ ! public PropertiesLayer(int x, int y, int width, int height) ! { ! super(new Rectangle(x,y,width,height)); properties = new Properties[width][height]; setName("properties"); *************** *** 56,62 **** if (!contains(x,y)) return ; ! Properties props; ! props = new Properties(); ! if (properties != null) { --- 65,70 ---- if (!contains(x,y)) return ; ! Properties props = new Properties(); ! if (properties != null) { *************** *** 67,79 **** } public void rotate(int angle) { } public void mirror(int dir) { } - public void mergeOnto(MapLayer other) { } - public void copyFrom(MapLayer other) { } - public void maskedCopyFrom(MapLayer other, Area mask) { } - public MapLayer createDiff(MapLayer ml) { return null; } - public void copyTo(MapLayer other) { } public void resize(int width, int height, int dx, int dy) { } ! public boolean isUsed(Tile t) { return false; } ! } --- 75,230 ---- } + /** creates a diff of the layers. The return layers contains all differences + * of <code>ml</code> + */ + public MapLayer createDiff(MapLayer ml) + { + if (!(ml instanceof PropertiesLayer)) + { + return null; + } + + PropertiesLayer other = (PropertiesLayer) ml; + + Rectangle r = null; + + for (int y = bounds.y; y < bounds.height + bounds.y; y++) + { + for (int x = bounds.x; x < bounds.width + bounds.x; x++) + { + if (other.getProps(x, y).equals(getProps(x,y))) + { + if (r != null) + { + r.add(x, y); + } + else + { + r = new Rectangle(x, y); + } + } + } + } + + if (r != null) { + MapLayer diff = new PropertiesLayer(r.x, r.y, r.width + 1, r.height + 1); + diff.copyFrom(ml); + return diff; + } else { + return new PropertiesLayer(0,0); + } + } + + /** + * Copy data from another layer onto this layer. All previous Properties are + * overwritten. + * + * @see tiled.core.MapLayer#copyFrom + * @param other + */ + public void copyFrom(MapLayer other) + { + if (!canEdit() || !(other instanceof PropertiesLayer)) + return; + + PropertiesLayer otherLayer = (PropertiesLayer) other; + + for (int y = bounds.y; y < bounds.y + bounds.height; y++) + { + for (int x = bounds.x; x < bounds.x + bounds.width; x++) + { + setProps(x, y, otherLayer.getProps(x, y)); + } + } + } + + /** + * Merges data from another layer onto this layer. All previous Properties + * are appended. + * + * Note: duplicate Properties will be overwritten. + * + * @see tiled.core.MapLayer#mergeOnto + * @param other + */ + public void mergeOnto(MapLayer other) + { + if (!canEdit() || !(other instanceof PropertiesLayer)) + return; + + PropertiesLayer otherLayer = (PropertiesLayer) other; + + for (int y = bounds.y; y < bounds.y + bounds.height; y++) + { + for (int x = bounds.x; x < bounds.x + bounds.width; x++) + { + getProps(x,y).putAll(otherLayer.getProps(x, y)); + } + } + } + + /** + * Unlike mergeOnto, copyTo includes the null tile when merging + * + * @see tiled.core.MapLayer#copyFrom + * @see tiled.core.MapLayer#mergeOnto + * @param other the layer to copy this layer to + */ + public void copyTo(MapLayer other) + { + if (!canEdit() || !(other instanceof PropertiesLayer)) + return; + + PropertiesLayer otherLayer = (PropertiesLayer) other; + + for (int y = bounds.y; y < bounds.y + bounds.height; y++) + { + for (int x = bounds.x; x < bounds.x + bounds.width; x++) + { + setProps(x,y,otherLayer.getProps(x, y)); + } + } + } + + /** + * Creates a copy of this layer. + * + * @see java.lang.Object#clone + * @return a clone of this layer, as complete as possible + * @exception CloneNotSupportedException + */ + public Object clone() throws CloneNotSupportedException + { + PropertiesLayer clone = (PropertiesLayer) super.clone(); + + // Clone the layer data + clone.properties = new Properties[getWidth()][getHeight()]; + for (int x = 0; x < getWidth(); x++) + { + for (int y = 0; y < getHeight(); y++) + { + Properties newProps = null; + Properties props = properties[x][y]; + if (props != null && props.size() > 0) + { + newProps = new Properties(); + newProps.putAll(props); + } + clone.properties[x][y] = newProps; + } + } + return clone; + } + + // TODO: not yet implemented public void rotate(int angle) { } public void mirror(int dir) { } public void resize(int width, int height, int dx, int dy) { } ! public void maskedCopyFrom(MapLayer other, Area mask) { } ! ! /** returns a copy of the layer */ ! public MapLayer getLayerCopy(Rectangle bounds) ! { ! return null; ! } } --- MapObject.java DELETED --- |