texturekey.java
来自「java 3d game jme 工程开发源代码」· Java 代码 · 共 207 行
JAVA
207 行
/*
* Copyright (c) 2003-2009 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package com.jme.util;
import java.io.IOException;
import java.net.URL;
import java.net.URLDecoder;
import com.jme.image.Image;
import com.jme.util.export.InputCapsule;
import com.jme.util.export.JMEExporter;
import com.jme.util.export.JMEImporter;
import com.jme.util.export.OutputCapsule;
import com.jme.util.export.Savable;
import com.jme.util.resource.ResourceLocatorTool;
/**
* <code>TextureKey</code> provides a way for the TextureManager to cache and
* retrieve <code>Texture</code> objects.
*
* @author Joshua Slack
* @version $Id: TextureKey.java,v 1.27 2007/10/06 05:57:41 renanse Exp $
*/
final public class TextureKey implements Savable {
protected URL location = null;
protected boolean flipped;
protected int code = Integer.MAX_VALUE;
protected Image.Format format = Image.Format.Guess;
protected String fileType;
public TextureKey() {
}
public TextureKey(URL location, boolean flipped, Image.Format imageType) {
this.location = location;
this.flipped = flipped;
this.format = imageType;
}
public boolean equals(Object other) {
if (other == this) {
return true;
}
if (!(other instanceof TextureKey)) {
return false;
}
TextureKey that = (TextureKey) other;
if (this.location == null) {
if (that.location != null)
return false;
} else if (!this.location.equals(that.location))
return false;
if (this.flipped != that.flipped)
return false;
if (this.format != that.format)
return false;
if (this.fileType == null && that.fileType != null)
return false;
else if (this.fileType != null && !this.fileType.equals(that.fileType))
return false;
return true;
}
public int hashCode() {
if (code == Integer.MAX_VALUE) {
code = 37;
if (location != null) {
code += 37 * location.hashCode();
}
if (fileType != null) {
code += 37 * fileType.hashCode();
}
code += 37 * format.ordinal();
code += 37 * (flipped ? 1 : 0);
}
return code;
}
public void resetHashCode() {
code = Integer.MAX_VALUE;
}
public void write(JMEExporter e) throws IOException {
OutputCapsule capsule = e.getCapsule(this);
if (location != null) {
capsule.write(location.getProtocol(), "protocol", null);
capsule.write(location.getHost(), "host", null);
capsule.write(location.getFile(), "file", null);
}
capsule.write(flipped, "flipped", false);
capsule.write(format, "format", Image.Format.Guess);
capsule.write(fileType, "fileType", null);
}
public void read(JMEImporter e) throws IOException {
InputCapsule capsule = e.getCapsule(this);
String protocol = capsule.readString("protocol", null);
String host = capsule.readString("host", null);
String file = capsule.readString("file", null);
if (file != null)
location = ResourceLocatorTool.locateResource(
ResourceLocatorTool.TYPE_TEXTURE, URLDecoder.decode(file,
"UTF-8"));
if (location == null && protocol != null && host != null
&& file != null) {
location = new URL(protocol, host, file);
}
flipped = capsule.readBoolean("flipped", false);
format = capsule.readEnum("format", Image.Format.class,
Image.Format.Guess);
fileType = capsule.readString("fileType", null);
}
public Image.Format getFormat() {
return format;
}
public void setFormat(Image.Format format) {
this.format = format;
}
public Class getClassTag() {
return this.getClass();
}
/**
* @return Returns the flipped.
*/
public boolean isFlipped() {
return flipped;
}
/**
* @param flipped
* The flipped to set.
*/
public void setFlipped(boolean flipped) {
this.flipped = flipped;
}
/**
* @return Returns the location.
*/
public URL getLocation() {
return location;
}
/**
* @param location
* The location to set.
*/
public void setLocation(URL location) {
this.location = location;
}
public String getFileType() {
return fileType;
}
public void setFileType(String fileType) {
this.fileType = fileType;
}
@Override
public String toString() {
String x = "tkey: loc:" + location + " flip: " + flipped + " code: "
+ hashCode() + " imageType: " + format + " fileType: "
+ fileType;
return x;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?