maplayer.java

来自「tiled地图编辑器是2d的,很不错的国外软件,使用起来很方便的」· Java 代码 · 共 327 行

JAVA
327
字号
/* *  Tiled Map Editor, (c) 2004-2006 * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 2 of the License, or *  (at your option) any later version. * *  Adam Turk <aturk@biggeruniverse.com> *  Bjorn Lindeijer <b.lindeijer@xs4all.nl> */package tiled.core;import java.awt.Rectangle;import java.awt.geom.Area;import java.util.Properties;/** * A layer of a map. * * @see Map * @see MultilayerPlane */public abstract class MapLayer implements Cloneable{    /** MIRROR_HORIZONTAL */    public static final int MIRROR_HORIZONTAL = 1;    /** MIRROR_VERTICAL */    public static final int MIRROR_VERTICAL   = 2;    /** ROTATE_90 */    public static final int ROTATE_90  = 90;    /** ROTATE_180 */    public static final int ROTATE_180 = 180;    /** ROTATE_270 */    public static final int ROTATE_270 = 270;    protected String name;    protected boolean isVisible = true;    protected boolean bLocked = false;    protected Map myMap;    protected float opacity = 1.0f;    protected Rectangle bounds;    private Properties properties;    public MapLayer() {        bounds = new Rectangle();        setMap(null);        properties = new Properties();    }    /**     * @param w width in tiles     * @param h height in tiles     */    public MapLayer(int w, int h) {        this(new Rectangle(0, 0, w, h));    }    public MapLayer(Rectangle r) {        this();        setBounds(r);    }    public MapLayer(MapLayer ml) {        this(ml.bounds);        name = ml.getName();        properties = new Properties(ml.getProperties());    }    /**     * @param m the map this layer is part of     */    MapLayer(Map m) {        this();        setMap(m);    }    /**     * @param m the map this layer is part of     * @param w width in tiles     * @param h height in tiles     */    public MapLayer(Map m, int w, int h) {        this(w, h);        setMap(m);    }    /**     * Performs a linear translation of this layer by (<i>dx, dy</i>).     *     * @param dx distance over x axis     * @param dy distance over y axis     */    public void translate(int dx, int dy) {        bounds.x += dx;        bounds.y += dy;    }    public abstract void rotate(int angle);    public abstract void mirror(int dir);    /**     * Sets the bounds (in tiles) to the specified Rectangle.     *     * @param bounds     */    public void setBounds(Rectangle bounds) {        this.bounds = new Rectangle(bounds);    }    /**     * Sets the name of this layer.     *     * @param name the new name     */    public void setName(String name) {        this.name = name;    }    /**     * Sets the map this layer is part of.     *     * @param m the Map object     */    public void setMap(Map m) {        myMap = m;    }    /**     * Sets layer opacity. If it is different from the previous value and the     * layer is visible, a MapChangedEvent is fired.     *     * @param opacity the new opacity for this layer     */    public void setOpacity(float opacity) {        if (this.opacity != opacity) {            this.opacity = opacity;            if (isVisible() && myMap != null) {                myMap.fireMapChanged();            }        }    }    /**     * Sets the visibility of this map layer. If it changes from its current     * value, a MapChangedEvent is fired.     *     * @param visible <code>true</code> to make the layer visible;     *                <code>false</code> to make it invisible     */    public void setVisible(boolean visible) {        if (isVisible != visible) {            isVisible = visible;            if (myMap != null) {                myMap.fireMapChanged();            }        }    }    /**     * Sets the offset of this map layer. The offset is a distance by which to     * shift this layer from the origin of the map.     *     * @param xOff x offset in tiles     * @param yOff y offset in tiles     */    public void setOffset(int xOff, int yOff) {        bounds.x = xOff;        bounds.y = yOff;    }    /**     * Returns the name of this layer.     *     * @return a java.lang.String of the name of the layer     */    public String getName() {        return name;    }    /**     * Returns layer width in tiles.     */    public int getWidth() {        return bounds.width;    }    /**     * Returns layer height in tiles.     */    public int getHeight() {        return bounds.height;    }    /**     * Returns the layer bounds in tiles.     * @return the layer bounds in tiles     */    public Rectangle getBounds() {        return new Rectangle(bounds);    }    /**     * Assigns the layer bounds in tiles to the given rectangle.     * @param rect the rectangle to which the layer bounds are assigned     */    public void getBounds(Rectangle rect) {        rect.setBounds(bounds);    }    /**     * A convenience method to check if a point in tile-space is within     * the layer boundaries.     *     * @param x the x-coordinate of the point     * @param y the y-coordinate of the point     * @return <code>true</code> if the point (x,y) is within the layer     *         boundaries, <code>false</code> otherwise.     */    public boolean contains(int x, int y) {        return bounds.contains(x, y);    }    /**     * Returns layer opacity.     *     * @return layer opacity, ranging from 0.0 to 1.0     */    public float getOpacity() {        return opacity;    }    /**     * Returns whether this layer is visible.     *     * @return <code>true</code> if the layer is visible, <code>false</code>     * otherwise.     */    public boolean isVisible() {        return isVisible;    }    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 MapLayer#copyFrom     * @see MapLayer#mergeOnto     * @param other the layer to copy this layer to     */    public abstract void copyTo(MapLayer other);    public abstract boolean isUsed(Tile t);    public abstract boolean isEmpty();    /**     * Creates a copy of this layer.     *     * @see Object#clone     * @return a clone of this layer, as complete as possible     * @exception CloneNotSupportedException     */    public Object clone() throws CloneNotSupportedException {        MapLayer clone = (MapLayer) super.clone();        // Create a new bounds object        clone.bounds = new Rectangle(bounds);        clone.properties = (Properties) properties.clone();        return clone;    }    /**     * @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);    /**     * Get the locked status of the layer.     *     * @see MapLayer#setLocked(boolean)     */    public boolean getLocked() {        return bLocked;    }    /**     * Set the locked status of the layer. A locked layer can't be edited.     *     * @param lock <code>true</code> to lock the layer, <code>false</code> to     *             unlock the layer     */    public void setLocked(boolean lock) {        bLocked = lock;    }    public void setProperties(Properties p) {        properties = p;    }    public Properties getProperties() {        return properties;    }    public boolean canEdit() {        return !getLocked() && isVisible();    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?