From 8dd4e47dae6bd81ddf0a8aa868dd5f7b07a5d5e2 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Mon, 3 Jul 2006 11:30:30 +0000 Subject: [PATCH] Removed org.lwjgl.util.model --- build.xml | 41 +- res/model/BonedModelSample.xml | 74 --- res/model/MeshedModelSample.xml | 40 -- .../org/lwjgl/util/applet/LWJGLInstaller.java | 312 +++++++++++ src/java/org/lwjgl/util/model/BoneFrame.java | 66 --- src/java/org/lwjgl/util/model/BonedModel.java | 80 --- .../org/lwjgl/util/model/BonedVertex.java | 68 --- src/java/org/lwjgl/util/model/Frame.java | 99 ---- src/java/org/lwjgl/util/model/MeshFrame.java | 65 --- .../org/lwjgl/util/model/MeshedModel.java | 67 --- src/java/org/lwjgl/util/model/Model.java | 140 ----- src/java/org/lwjgl/util/model/Triangle.java | 89 ---- src/java/org/lwjgl/util/model/Vertex.java | 79 --- src/java/org/lwjgl/util/model/Weight.java | 73 --- .../lwjgl/util/model/loaders/XMLLoader.java | 501 ------------------ .../org/lwjgl/util/model/loaders/XMLUtil.java | 191 ------- .../renderer/AnimationEventListener.java | 47 -- .../util/model/renderer/FrameProcessor.java | 55 -- .../util/model/renderer/ModelRenderer.java | 327 ------------ .../lwjgl/util/model/renderer/Sprite3D.java | 93 ---- 20 files changed, 333 insertions(+), 2174 deletions(-) delete mode 100644 res/model/BonedModelSample.xml delete mode 100644 res/model/MeshedModelSample.xml create mode 100644 src/java/org/lwjgl/util/applet/LWJGLInstaller.java delete mode 100644 src/java/org/lwjgl/util/model/BoneFrame.java delete mode 100644 src/java/org/lwjgl/util/model/BonedModel.java delete mode 100644 src/java/org/lwjgl/util/model/BonedVertex.java delete mode 100644 src/java/org/lwjgl/util/model/Frame.java delete mode 100644 src/java/org/lwjgl/util/model/MeshFrame.java delete mode 100644 src/java/org/lwjgl/util/model/MeshedModel.java delete mode 100644 src/java/org/lwjgl/util/model/Model.java delete mode 100644 src/java/org/lwjgl/util/model/Triangle.java delete mode 100644 src/java/org/lwjgl/util/model/Vertex.java delete mode 100644 src/java/org/lwjgl/util/model/Weight.java delete mode 100644 src/java/org/lwjgl/util/model/loaders/XMLLoader.java delete mode 100644 src/java/org/lwjgl/util/model/loaders/XMLUtil.java delete mode 100644 src/java/org/lwjgl/util/model/renderer/AnimationEventListener.java delete mode 100644 src/java/org/lwjgl/util/model/renderer/FrameProcessor.java delete mode 100644 src/java/org/lwjgl/util/model/renderer/ModelRenderer.java delete mode 100644 src/java/org/lwjgl/util/model/renderer/Sprite3D.java diff --git a/build.xml b/build.xml index 7bf374d5..9874954c 100644 --- a/build.xml +++ b/build.xml @@ -31,6 +31,17 @@ + + + + + + + + + + + @@ -53,16 +64,10 @@ - + - - - - - - @@ -162,7 +167,6 @@ - @@ -171,7 +175,6 @@ - @@ -182,7 +185,6 @@ - @@ -314,6 +316,12 @@ + + + + + + @@ -326,11 +334,6 @@ - - - - - @@ -348,18 +351,15 @@ + - - - - - + @@ -438,6 +438,7 @@ + diff --git a/res/model/BonedModelSample.xml b/res/model/BonedModelSample.xml deleted file mode 100644 index 3be4b23e..00000000 --- a/res/model/BonedModelSample.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/res/model/MeshedModelSample.xml b/res/model/MeshedModelSample.xml deleted file mode 100644 index 206111fd..00000000 --- a/res/model/MeshedModelSample.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/java/org/lwjgl/util/applet/LWJGLInstaller.java b/src/java/org/lwjgl/util/applet/LWJGLInstaller.java new file mode 100644 index 00000000..bc9b1d68 --- /dev/null +++ b/src/java/org/lwjgl/util/applet/LWJGLInstaller.java @@ -0,0 +1,312 @@ +/* + * Copyright (c) 2006 LWJGL Project + * 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 'LWJGL' 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 org.lwjgl.util.applet; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileFilter; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.security.AccessController; +import java.security.PrivilegedAction; +import java.security.PrivilegedExceptionAction; + +import org.lwjgl.LWJGLUtil; + +/** + *

+ * + *

+ * @author Brian Matzon + * @version $Revision$ + * $Id$ + */ +public class LWJGLInstaller { + + /** + * Files to install for each supported platform + * @see org.lwjgl.LWJGLUtil#getPlatform() + */ + public static final String[][] PLATFORM_FILES = { + { "lwjgl", "lwjgl-fmod3", "lwjgl-devil", "openal", "fmod", "IL", "ILU", "ILUT", "jinput-osx"}, + { "lwjgl", "lwjgl-fmod3", "lwjgl-devil", "openal", "fmod", "IL", "ILU", "ILUT", "jinput-linux"}, + { "lwjgl", "lwjgl-fmod3", "lwjgl-devil", "OpenAL32", "fmod", "DevIL", "ILU", "ILUT", "jinput-dx8", "jinput-raw"} + }; + + /** Whether the installer has been called */ + public static boolean installed; + + /** Whether to hook uninstall rutine. Must be called prior to installation */ + public static boolean disableUninstall = false; + + /** Buffer used when copying files */ + private static final byte[] COPY_BUFFER = new byte[4096]; + + private LWJGLInstaller() { + /* Unused */ + } + + /** + * Create a temporary installation of LWJGL. + * This will extract the relevant native files (for the platform) into + * the users temp directory, and instruct the LWJGL subsystem to load its + * native files from there. + * The files required by the installer, are gotten from the classloader via its + * getResource command, and are assumed to in the path: /native// + * Any call to this method will also add a shutdown hook to the uninstall of the libraries + * Note: Due to the nature of native libraries, we cannot actually uninstall the currently + * loaded files, but rather the "last" installed. This means that the most recent install of LWJGL + * will always be present in the users temp dir. + * + * @see java.lang.ClassLoader#getResource(String) + */ + public static void tempInstall() throws Exception { + // only need to install once + if (installed) { + return; + } + + try { + // libraries to validate and install + String[] libraries = PLATFORM_FILES[LWJGLUtil.getPlatform() - 1]; + + // Validate the certificates of the native files + validateCertificates(); + + // install shutdown installer hook + if(!disableUninstall) { + AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + Runtime.getRuntime().addShutdownHook(new Thread() { + public void run() { + uninstall(); + } + }); + return null; + } + }); + } + + // create a temporary dir for the native files + String user_temp_dir = getPriviledgedString("java.io.tmpdir"); + final String path = createTemporaryDir(user_temp_dir); + + // extract natives + for (int i = 0; i < libraries.length; i++) { + String library = System.mapLibraryName(libraries[i]); + extract(library, path); + } + + AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + System.setProperty("org.lwjgl.librarypath", path); + return null; + } + }); + } catch (Exception e) { + LWJGLUtil.log("Failed extraction e = " + e.getMessage()); + uninstall(); + throw e; + } + } + + /** + * Validates the certificates of the native libraries. + * When installing native libraries, it is imperative that we also check the certficates. + * The reson for this, is that a user may inject a malicious jar to the classpath + * before the "real" LWJGL jar, containing native libraries with unwanted code. + * By forcing all the native libraries to have the same certificate as the signed + * installer, we can also be sure that the native libraries indeed are correct. + * @throws Exception If we encounter a certificate mismatch + */ + private static void validateCertificates() throws Exception { + /* TODO */ + } + + /** + * Extracts a file in the classpath to a specified dir + * + * @param file File to extract + * @param path Path to extract to + */ + private static void extract(final String file, final String path) { + AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + // check for existing file, and get out + File out = new File(path + File.separator + file); + if (out.exists()) { + return null; + } + + // create the new file and copy it to its destination + try { + out.createNewFile(); + String in = "/native/" + LWJGLUtil.getPlatformName() + "/" + file; + OutputStream os = new BufferedOutputStream(new FileOutputStream(out)); + InputStream is = new BufferedInputStream(getClass().getResourceAsStream(in)); + + // Sanity check + // =========================================== + if (os == null) { + LWJGLUtil.log("Unable to write to outputstream at " + out.getAbsolutePath()); + return null; + } + + if (is == null) { + LWJGLUtil.log("Unable to read classpath inputstream from " + in); + return null; + } + // ------------------------------------------- + + // copy the actual file + copyFile(is, os); + } catch (IOException ioe) { + LWJGLUtil.log("Exception while extracting " + file + ": " + ioe.getMessage()); + return null; + } + return null; + } + }); + } + + /** + * Copies an inputstream to an outputstream + * @param is InputStream to read from + * @param os OutputStream to write to + * @throws IOException if the copy process fail in any way + */ + static void copyFile(InputStream is, OutputStream os) throws IOException { + int len; + while ((len = is.read(COPY_BUFFER)) > 0) { + os.write(COPY_BUFFER, 0, len); + } + is.close(); + os.close(); + } + + /** + * Creates the temporary dir to store lwjgl files in. + * The temporary dir will be created in the users temp dir and + * called 'lwjgl-' and appended System.currentTimeMillis(). A watermark file + * called '.lwjglinstaller' will also be created in the directory. + * @return Name of temp directory or null if directory creation failed + */ + static String createTemporaryDir(final String user_temp_dir) throws Exception { + return (String) AccessController.doPrivileged(new PrivilegedExceptionAction() { + public Object run() throws Exception { + // create the temp directory + File tempDir = new File(user_temp_dir + File.separator + "lwjgl-" + System.currentTimeMillis()); + if(!tempDir.mkdir()) { + throw new IOException("Failed to create directory: " + tempDir); + } + + // add the watermark file + // TODO: Write some info to the file ? + File watermark = new File(tempDir.getAbsolutePath() + File.separator + ".lwjglinstaller"); + watermark.createNewFile(); + return tempDir.getAbsolutePath(); + } + }); + } + + + /** + * Gets a property as a privileged action. + */ + private static String getPriviledgedString(final String property) { + return (String) AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + return System.getProperty(property); + } + }); + } + + /** + * Uninstalls any PREVIOUS installations + * We cannot uninstall the current installation, since the files are locked + * by the VM. + */ + private static void uninstall() { + LWJGLUtil.log("running LWJGL uninstaller"); + + // locate all installer dirs and uninstall them + AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + String temp = System.getProperty("java.io.tmpdir"); + File tempDir = new File(temp); + File[] files = tempDir.listFiles(new FileFilter() { + + /* + * @see java.io.FileFilter#accept(java.io.File) + */ + public boolean accept(File pathname) { + return pathname.getAbsolutePath().indexOf("lwjgl") != -1 && isInstallDirectory(pathname); + } + + /** + * Checks whether the specified directory is an install directory. + * This is done by checking for the watermark file + * @param directory Directory to check + * @return true if the directory is an install directory + */ + private boolean isInstallDirectory(File directory) { + File installFile = new File(directory.getAbsolutePath() + File.separator + ".lwjglinstaller"); + return installFile.exists(); + } + + }); + + // uninstall each of the dirs + for (int i = 0; i < files.length; i++) { + uninstall(files[i]); + } + return null; + } + }); + } + + /** + * Uninstall LWJGL from a directory. This deletes all the files in the directory + * and deletes the directory too. + * @param file directory to uninstall LWJGL from + */ + private static void uninstall(File file) { + File[] files = file.listFiles(); + for (int i = 0; i < files.length; i++) { + files[i].delete(); + } + file.delete(); + } +} diff --git a/src/java/org/lwjgl/util/model/BoneFrame.java b/src/java/org/lwjgl/util/model/BoneFrame.java deleted file mode 100644 index 3a2d7e8b..00000000 --- a/src/java/org/lwjgl/util/model/BoneFrame.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2002-2004 LWJGL Project - * 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 'LWJGL' 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 org.lwjgl.util.model; - -import org.lwjgl.util.vector.Matrix4f; - -/** - * A BoneFrame describes a set of new positions for Bones in an animation. - * @author $Author$ - * @version $Revision$ - * $Id$ - */ -public class BoneFrame extends Frame { - - public static final long serialVersionUID = 1L; - - /** The new transformations for each Bone in the Skeleton */ - private final Matrix4f[] bone; - - /** - * C'tor - * @param time - * @param action - * @param bone[] - */ - public BoneFrame(float time, String action, Matrix4f[] bone) { - super(time, action); - this.bone = bone; - } - - /** - * @return the Bones - */ - public Matrix4f[] getBone() { - return bone; - } -} diff --git a/src/java/org/lwjgl/util/model/BonedModel.java b/src/java/org/lwjgl/util/model/BonedModel.java deleted file mode 100644 index 6c2b632e..00000000 --- a/src/java/org/lwjgl/util/model/BonedModel.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (c) 2002-2004 LWJGL Project - * 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 'LWJGL' 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 org.lwjgl.util.model; - -import java.util.Map; - -import org.lwjgl.util.Color; -import org.lwjgl.util.vector.Vector2f; - - -/** - * - * A simple animated, skinned, boned 3D model, consisting of a single mesh - * with a single material. The model's internal format is optimised for RAM storage; - * no metadata is held in memory - in other words this is not a good class to use - * for, say, a 3d modelling application. - * - * @author $Author$ - * @version $Revision$ - * $Id$ - */ -public class BonedModel extends Model { - - public static final long serialVersionUID = 1L; - - /** Vertices */ - private final BonedVertex[] vertex; - - /** - * C'tor - * @param material - * @param triangle - * @param skin[] - * @param color[] - * @param animation - * @param vertex - */ - public BonedModel(String name, String material, Triangle[] triangle, Vector2f[] skin, Color[] color, Map animation, BonedVertex[] vertex) { - super(name, material, triangle, skin, color, animation); - this.vertex = vertex; - } - - /** - * @return Returns the vertices - */ - public BonedVertex[] getVertex() { - return vertex; - } - - -} diff --git a/src/java/org/lwjgl/util/model/BonedVertex.java b/src/java/org/lwjgl/util/model/BonedVertex.java deleted file mode 100644 index bcad3494..00000000 --- a/src/java/org/lwjgl/util/model/BonedVertex.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) 2002-2004 LWJGL Project - * 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 'LWJGL' 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 org.lwjgl.util.model; - -import org.lwjgl.util.vector.ReadableVector3f; - -/** - * - * A BonedVerex is a Vertex influenced by bone Weights - * - * @author $Author$ - * @version $Revision$ - * $Id$ - */ -public class BonedVertex extends Vertex { - - public static final long serialVersionUID = 1L; - - /** Bone weights */ - private final Weight[] weight; - - /** - * C'tor - * @param coords - * @param normal - * @param skin - */ - public BonedVertex(ReadableVector3f coords, ReadableVector3f normal, Weight[] skin) { - super(coords, normal); - this.weight = skin; - } - - /** - * @return Returns the skin. - */ - public Weight[] getWeight() { - return weight; - } -} diff --git a/src/java/org/lwjgl/util/model/Frame.java b/src/java/org/lwjgl/util/model/Frame.java deleted file mode 100644 index 87b80f63..00000000 --- a/src/java/org/lwjgl/util/model/Frame.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (c) 2002-2004 LWJGL Project - * 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 'LWJGL' 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 org.lwjgl.util.model; - -import java.io.Serializable; - -/** - * The base class for animation frames. - * @author $Author$ - * @version $Revision$ - * $Id$ - */ -public abstract class Frame implements Serializable, Comparable { - - public static final long serialVersionUID = 1L; - - /** Frame time */ - private final float time; - - /** User-defined action to occur after this frame has been used. May be null */ - private final String action; - - /** - * C'tor - * @param time - * @param action - */ - public Frame(float time, String action) { - this.time = time; - this.action = action; - } - - /** - * @return the frame time - */ - public final float getTime() { - return time; - } - - /* (non-Javadoc) - * @see java.lang.Comparable#compareTo(java.lang.Object) - */ - public int compareTo(Object o) { - if (o == null) { - return 0; - } - if (! (o instanceof Frame)) { - return 0; - } - Frame f = (Frame) o; - if (f.time == time) { - return 0; - } else if (f.time > time) { - return 1; - } else { - return -1; - } - } - - /** - * Gets the user-defined animation action. This can be processed by whatever - * is animating the model to perform some special action after the frame is - * used. For example, you could use "stop" to stop the animation, or "rewind" - * to repeat the animation ad infinitum. - * @return String, or null, for no action - */ - public final String getAction() { - return action; - } -} diff --git a/src/java/org/lwjgl/util/model/MeshFrame.java b/src/java/org/lwjgl/util/model/MeshFrame.java deleted file mode 100644 index a5762330..00000000 --- a/src/java/org/lwjgl/util/model/MeshFrame.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (c) 2002-2004 LWJGL Project - * 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 'LWJGL' 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 org.lwjgl.util.model; - - -/** - * A MeshFrame describes a set of new positions for Vertices in an animation. - * @author $Author$ - * @version $Revision$ - * $Id$ - */ -public class MeshFrame extends Frame { - - public static final long serialVersionUID = 1L; - - /** The vertices */ - private final Vertex[] vertex; - - /** - * C'tor - * @param time - * @param action - * @param bone[] - */ - public MeshFrame(float time, String action, Vertex[] vertex) { - super(time, action); - this.vertex = vertex; - } - - /** - * @return the Vertices - */ - public Vertex[] getVertex() { - return vertex; - } -} diff --git a/src/java/org/lwjgl/util/model/MeshedModel.java b/src/java/org/lwjgl/util/model/MeshedModel.java deleted file mode 100644 index 94d71535..00000000 --- a/src/java/org/lwjgl/util/model/MeshedModel.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (c) 2002-2004 LWJGL Project - * 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 'LWJGL' 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 org.lwjgl.util.model; - -import java.util.Map; - -import org.lwjgl.util.Color; -import org.lwjgl.util.vector.Vector2f; - - -/** - * - * A simple animated 3d mesh, consisting of multiple vertex positions. - * with a single material. The model's internal format is optimised for RAM storage; - * no metadata is held in memory - in other words this is not a good class to use - * for, say, a 3d modelling application. - * - * @author $Author$ - * @version $Revision$ - * $Id$ - */ -public class MeshedModel extends Model { - - public static final long serialVersionUID = 1L; - - /** - * C'tor - * @param material - * @param triangle - * @param skin[] - * @param color[] - * @param animation - */ - public MeshedModel(String name, String material, Triangle[] triangle, Vector2f[] skin, Color[] color, Map animation) { - super(name, material, triangle, skin, color, animation); - } - -} diff --git a/src/java/org/lwjgl/util/model/Model.java b/src/java/org/lwjgl/util/model/Model.java deleted file mode 100644 index 02520aff..00000000 --- a/src/java/org/lwjgl/util/model/Model.java +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Copyright (c) 2002-2004 LWJGL Project - * 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 'LWJGL' 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 org.lwjgl.util.model; - -import java.io.Serializable; -import java.util.Map; - -import org.lwjgl.util.Color; -import org.lwjgl.util.vector.Vector2f; - - -/** - * - * Base class for the two kinds of model supported. A Model has a single "material" - * and a single triangular mesh with a single skin, and any number of animations. - * - * @author $Author$ - * @version $Revision$ - * $Id$ - */ -public abstract class Model implements Serializable { - - public static final long serialVersionUID = 1L; - - /** Model name */ - private final String name; - - /** Material */ - private final String material; - - /** Triangles */ - private final Triangle[] triangle; - - /** Skin */ - private final Vector2f[] skin; - - /** Colour */ - private final Color[] color; - - /** The animations: a Map of string names to Frame[] arrays */ - private final Map animation; - - /** - * C'tor - * @param name - * @param material - * @param triangle - * @param skin[] - * @param color[] - * @param animation - */ - public Model(String name, String material, Triangle[] triangle, Vector2f[] skin, Color[] color, Map animation) { - this.name = name; - this.material = material; - this.triangle = triangle; - this.skin = skin; - this.color = color; - this.animation = animation; - } - - /** - * Get a named animation from the Model - * @param name The name of the animation - * @return the Frames of an animation (or null, if no such animation exists) - */ - public final Frame[] getAnimation(String name) { - return (Frame[]) animation.get(name); - } - - /** - * @return Returns the material. - */ - public final String getMaterial() { - return material; - } - - /** - * @return Returns the triangles. - */ - public final Triangle[] getTriangle() { - return triangle; - } - - /** - * @return Returns the skin. - */ - public final Vector2f[] getSkin() { - return skin; - } - - /** - * @return Returns the color - */ - public final Color[] getColor() { - return color; - } - - /* (non-Javadoc) - * @see java.lang.Object#toString() - */ - public String toString() { - return "Model["+name+"]"; - } - - /** - * @return Returns the name. - */ - public final String getName() { - return name; - } -} diff --git a/src/java/org/lwjgl/util/model/Triangle.java b/src/java/org/lwjgl/util/model/Triangle.java deleted file mode 100644 index 8e13ab09..00000000 --- a/src/java/org/lwjgl/util/model/Triangle.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright (c) 2002-2004 LWJGL Project - * 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 'LWJGL' 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 org.lwjgl.util.model; - -import java.io.Serializable; - -/** - * @author $Author$ - * @version $Revision$ - * $Id$ - */ -public class Triangle implements Serializable { - - public static final long serialVersionUID = 1L; - - /** Vertex indices: these look up into the parent Mesh's vertex array */ - private final int a, b, c; - - /** Adjacency, for stripification */ - private final int adjacency; - - /** - * C'tor - * @param a - * @param b - * @param c - * @param adjacency - */ - public Triangle(int a, int b, int c, int adjacency) { - this.a = a; - this.b = b; - this.c = c; - this.adjacency = adjacency; - } - - /** - * @return Returns the 'a' vertex index - */ - public int getA() { - return a; - } - /** - * @return Returns the 'b' vertex index - */ - public int getB() { - return b; - } - /** - * @return Returns the 'c' vertex index - */ - public int getC() { - return c; - } - /** - * @return Returns the adjacency. - */ - public int getAdjacency() { - return adjacency; - } -} diff --git a/src/java/org/lwjgl/util/model/Vertex.java b/src/java/org/lwjgl/util/model/Vertex.java deleted file mode 100644 index ff28e8dd..00000000 --- a/src/java/org/lwjgl/util/model/Vertex.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (c) 2002-2004 LWJGL Project - * 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 'LWJGL' 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 org.lwjgl.util.model; - -import java.io.Serializable; - -import org.lwjgl.util.vector.ReadableVector3f; - -/** - * - * A single vertex in a mesh. - * - * @author $Author$ - * @version $Revision$ - * $Id$ - */ -public class Vertex implements Serializable { - - public static final long serialVersionUID = 1L; - - /** Coordinates */ - private final ReadableVector3f coords; - - /** Normal */ - private final ReadableVector3f normal; - - /** - * C'tor - * @param coords - * @param normal - */ - public Vertex(ReadableVector3f coords, ReadableVector3f normal) { - this.coords = coords; - this.normal = normal; - } - - /** - * @return Returns the coords. - */ - public ReadableVector3f getCoords() { - return coords; - } - - /** - * @return Returns the normal. - */ - public ReadableVector3f getNormal() { - return normal; - } -} diff --git a/src/java/org/lwjgl/util/model/Weight.java b/src/java/org/lwjgl/util/model/Weight.java deleted file mode 100644 index fa56d299..00000000 --- a/src/java/org/lwjgl/util/model/Weight.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (c) 2002-2004 LWJGL Project - * 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 'LWJGL' 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 org.lwjgl.util.model; - -import java.io.Serializable; - -/** - * Describes how a bone influences a vertex. - * @author $Author$ - * @version $Revision$ - * $Id$ - */ -public class Weight implements Serializable { - - public static final long serialVersionUID = 1L; - - /** Bone index */ - private final int bone; - - /** Weight */ - private final float weight; - - /** - * C'tor - */ - public Weight(int bone, float weight) { - this.bone = bone; - this.weight = weight; - } - - /** - * @return Returns the bone index. - */ - public int getBone() { - return bone; - } - - /** - * @return Returns the weight. - */ - public float getWeight() { - return weight; - } -} diff --git a/src/java/org/lwjgl/util/model/loaders/XMLLoader.java b/src/java/org/lwjgl/util/model/loaders/XMLLoader.java deleted file mode 100644 index 1a32f19e..00000000 --- a/src/java/org/lwjgl/util/model/loaders/XMLLoader.java +++ /dev/null @@ -1,501 +0,0 @@ -/* - * Copyright (c) 2002-2004 LWJGL Project - * 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 'LWJGL' 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 org.lwjgl.util.model.loaders; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import org.lwjgl.util.Color; -import org.lwjgl.util.model.BoneFrame; -import org.lwjgl.util.model.BonedModel; -import org.lwjgl.util.model.BonedVertex; -import org.lwjgl.util.model.MeshFrame; -import org.lwjgl.util.model.MeshedModel; -import org.lwjgl.util.model.Model; -import org.lwjgl.util.model.Triangle; -import org.lwjgl.util.model.Vertex; -import org.lwjgl.util.model.Weight; -import org.lwjgl.util.vector.Matrix4f; -import org.lwjgl.util.vector.Vector2f; -import org.lwjgl.util.vector.Vector3f; -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -/** - * - * Loads a Model from an XML document. Construct with an XML Document as the argument, - * and then retrieve the Model by calling load(). - * - * @author $Author$ - * @version $Revision$ - * $Id$ - */ -public class XMLLoader { - - /** The source document */ - private final Document src; - - /** Expected number of vertices */ - private int numVertices; - - /** Expected number of bones */ - private int numBones; - - /** - * C'tor - */ - public XMLLoader(Document src) { - this.src = src; - } - - /** - * Load the model from the XML document and return it. - * @return Model - * @throws Exception - */ - public Model load() throws Exception { - String name = XMLUtil.getString(src.getDocumentElement(), "modelname"); - String material = XMLUtil.getString(src.getDocumentElement(), "material"); - numVertices = XMLUtil.getInt(src.getDocumentElement(), "vertexcount"); - if (XMLUtil.getString(src.getDocumentElement(), "type").equals("boned")) { - // It's a boned model - numBones = XMLUtil.getInt(src.getDocumentElement(), "bones", 0); - return new BonedModel( - name, - material, - loadTriangles(), - loadSkin(), - loadColor(), - loadBoneAnimations(), - loadBonedVertices() - ); - } else if (XMLUtil.getString(src.getDocumentElement(), "type").equals("meshed")) { - // It's a mesh keyframe model - return new MeshedModel( - name, - material, - loadTriangles(), - loadSkin(), - loadColor(), - loadMeshAnimations() - ); - } else { - throw new Exception("Unsupported model type."); - } - } - - /** - * Load all the BonedVertices - * @return Vertex[] - * @throws Exception - */ - private BonedVertex[] loadBonedVertices() throws Exception { - Element verticesElement = XMLUtil.getChild(src.getDocumentElement(), "vertices"); - if (verticesElement == null) { - return null; - } - List vertexElements = XMLUtil.getChildren(verticesElement, "vertex"); - if (vertexElements.size() != numVertices) { - throw new Exception("Vertex count incorrect, got "+vertexElements.size()+", expected "+numVertices); - } - BonedVertex[] vertices = new BonedVertex[vertexElements.size()]; - int vertexCount = 0; - for (Iterator i = vertexElements.iterator(); i.hasNext(); ) { - Element vertexElement = (Element) i.next(); - vertices[vertexCount++] = loadBonedVertex(vertexElement); - } - return vertices; - } - - /** - * Load the skin - * @return Vector2f[] - * @throws Exception - */ - private Vector2f[] loadSkin() throws Exception { - Element skinElement = XMLUtil.getChild(src.getDocumentElement(), "skin"); - if (skinElement == null) { - return null; - } - List skinElements = XMLUtil.getChildren(skinElement, "texcoord"); - if (skinElements.size() == 0) { - return null; - } - if (skinElements.size() != numVertices) { - throw new Exception("Skin count incorrect, got "+skinElements.size()+", expected "+numVertices); - } - Vector2f[] skins = new Vector2f[skinElements.size()]; - int skinCount = 0; - for (Iterator i = skinElements.iterator(); i.hasNext(); ) { - Element texCoordElement = (Element) i.next(); - skins[skinCount++] = loadTexCoord(texCoordElement); - } - return skins; - } - - /** - * Load the colour - * @return Color[] - * @throws Exception - */ - private Color[] loadColor() throws Exception { - Element colorsElement = XMLUtil.getChild(src.getDocumentElement(), "colors"); - if (colorsElement == null) { - return null; - } - - List colorElements = XMLUtil.getChildren(colorsElement, "color"); - if (colorElements.size() == 0) { - return null; - } - if (colorElements.size() != numVertices) { - throw new Exception("Color count incorrect, got "+colorElements.size()+", expected "+numVertices); - } - Color[] colors = new Color[colorElements.size()]; - int colorCount = 0; - for (Iterator i = colorElements.iterator(); i.hasNext(); ) { - Element colorElement = (Element) i.next(); - colors[colorCount++] = loadColor(colorElement); - } - return colors; - } - - /** - * Load all the Triangles - * @return Triangle[] - * @throws Exception - */ - private Triangle[] loadTriangles() throws Exception { - Element meshElement = XMLUtil.getChild(src.getDocumentElement(), "mesh"); - if (meshElement == null) { - return null; - } - List triangleElements = XMLUtil.getChildren(meshElement, "triangle"); - Triangle[] triangles = new Triangle[triangleElements.size()]; - int triangleCount = 0; - for (Iterator i = triangleElements.iterator(); i.hasNext(); ) { - Element triangleElement = (Element) i.next(); - triangles[triangleCount++] = loadTriangle(triangleElement); - } - return triangles; - } - - /** - * Load all the bone animations - * @return Map of animation names to BoneFrame[] animations - * @throws Exception - */ - private Map loadBoneAnimations() throws Exception { - Element animationElement = XMLUtil.getChild(src.getDocumentElement(), "animation"); - if (animationElement == null) { - return null; - } - List sequenceElements = XMLUtil.getChildren(src.getDocumentElement(), "sequence"); - Map animations = new HashMap(sequenceElements.size()); - for (Iterator i = sequenceElements.iterator(); i.hasNext(); ) { - Element sequenceElement = (Element) i.next(); - animations.put(XMLUtil.getString(sequenceElement, "sequencename"), loadBonedAnimation(sequenceElement)); - } - return animations; - } - - /** - * Load all the mesh keyframe animations - * @return Map of animation names to MeshFrame[] animations - * @throws Exception - */ - private Map loadMeshAnimations() throws Exception { - Element animationElement = XMLUtil.getChild(src.getDocumentElement(), "animation"); - if (animationElement == null) { - return null; - } - List sequenceElements = XMLUtil.getChildren(animationElement, "sequence"); - Map animations = new HashMap(sequenceElements.size()); - for (Iterator i = sequenceElements.iterator(); i.hasNext(); ) { - Element sequenceElement = (Element) i.next(); - animations.put(XMLUtil.getString(sequenceElement, "sequencename"), loadMeshAnimation(sequenceElement)); - } - return animations; - } - - /** - * Load a Vertex from XML - * @param vertexElement - * @return a Vertex - * @throws Exception - */ - private BonedVertex loadBonedVertex(Element vertexElement) throws Exception { - List weightElements = XMLUtil.getChildren(vertexElement, "weight"); - Weight[] weights; - if (weightElements.size() == 0) { - weights = null; - } else { - weights = new Weight[weightElements.size()]; - int weightCount = 0; - for (Iterator i = weightElements.iterator(); i.hasNext(); ) { - Element weightElement = (Element) i.next(); - weights[weightCount++] = loadWeight(weightElement); - } - } - - return new BonedVertex( - new Vector3f( - XMLUtil.getFloat(vertexElement, "x"), - XMLUtil.getFloat(vertexElement, "y"), - XMLUtil.getFloat(vertexElement, "z") - ), - XMLUtil.hasAttribute(vertexElement, "nx") ? - new Vector3f( - XMLUtil.getFloat(vertexElement, "nx"), - XMLUtil.getFloat(vertexElement, "ny"), - XMLUtil.getFloat(vertexElement, "nz") - ) - : null, - weights - ); - } - - /** - * Load a Vertex from XML - * @param vertexElement - * @return a Vertex - * @throws Exception - */ - private Vertex loadMeshVertex(Element vertexElement) throws Exception { - return new Vertex( - new Vector3f( - XMLUtil.getFloat(vertexElement, "x"), - XMLUtil.getFloat(vertexElement, "y"), - XMLUtil.getFloat(vertexElement, "z") - ), - XMLUtil.hasAttribute(vertexElement, "nx") ? - new Vector3f( - XMLUtil.getFloat(vertexElement, "nx"), - XMLUtil.getFloat(vertexElement, "ny"), - XMLUtil.getFloat(vertexElement, "nz") - ) - : null - ); - } - - /** - * Load a Weight from XML - * @param element - * @return a Skin - * @throws Exception - */ - private Weight loadWeight(Element element) throws Exception { - int bone = XMLUtil.getInt(element, "bone"); - if (bone < 0 || bone >= numBones) { - throw new Exception("Bone index out of range"); - } - return new Weight( - bone, - XMLUtil.getFloat(element, "weight") - ); - } - - /** - * Load a Triangle from XML - * @param element - * @param numVertices - * @return a Triangle - * @throws Exception - */ - private Triangle loadTriangle(Element element) throws Exception { - // Perform sanity checks - int a = XMLUtil.getInt(element, "a"); - if (a < 0 || a >= numVertices) { - throw new Exception("'a' is out of range"); - } - int b = XMLUtil.getInt(element, "b"); - if (b < 0 || b >= numVertices) { - throw new Exception("'b' is out of range"); - } - int c = XMLUtil.getInt(element, "c"); - if (c < 0 || c >= numVertices) { - throw new Exception("'c' is out of range"); - } - if (a == b || a == c || b == c) { - throw new Exception("Degenerate triangle"); - } - return new Triangle( - a, - b, - c, - XMLUtil.getInt(element, "adjacency", 0) - ); - } - - /** - * Load a texture coordinate from XML - * @param element - * @return a Vector2f - * @throws Exception - */ - private Vector2f loadTexCoord(Element element) throws Exception { - return new Vector2f( - XMLUtil.getFloat(element, "u"), - XMLUtil.getFloat(element, "v") - ); - } - - /** - * Load a colour from XML - * @param element - * @return a Color - * @throws Exception - */ - private Color loadColor(Element element) throws Exception { - return new Color( - XMLUtil.getInt(element, "red"), - XMLUtil.getInt(element, "green"), - XMLUtil.getInt(element, "blue"), - XMLUtil.getInt(element, "alpha", 255) - ); - } - - /** - * Load a boned Animation from XML - * @param element - * @return BoneFrame[] - * @throws Exception - */ - private BoneFrame[] loadBonedAnimation(Element element) throws Exception { - List frameElements = XMLUtil.getChildren(element, "frame"); - BoneFrame[] frames = new BoneFrame[frameElements.size()]; - int frameCount = 0; - for (Iterator i = frameElements.iterator(); i.hasNext(); ) { - Element frameElement = (Element) i.next(); - frames[frameCount++] = loadBoneFrame(frameElement); - } - Arrays.sort(frames); - return frames; - } - - /** - * Load a mesh Animation from XML - * @param element - * @return MeshFrame[] - * @throws Exception - */ - private MeshFrame[] loadMeshAnimation(Element element) throws Exception { - List frameElements = XMLUtil.getChildren(element, "frame"); - MeshFrame[] frames = new MeshFrame[frameElements.size()]; - int frameCount = 0; - for (Iterator i = frameElements.iterator(); i.hasNext(); ) { - Element frameElement = (Element) i.next(); - frames[frameCount++] = loadMeshFrame(frameElement); - } - Arrays.sort(frames); - return frames; - } - - /** - * Load a Frame from XML - * @param element - * @return BoneFrame - * @throws Exception - */ - private BoneFrame loadBoneFrame(Element element) throws Exception { - List boneElements = XMLUtil.getChildren(element, "bone"); - if (boneElements.size() != numBones) { - throw new Exception("Expected "+numBones+" bones in frame, only got "+boneElements.size()); - } - Matrix4f[] bones = new Matrix4f[boneElements.size()]; - int boneCount = 0; - for (Iterator i = boneElements.iterator(); i.hasNext(); ) { - Element boneElement = (Element) i.next(); - bones[boneCount++] = loadBone(boneElement); - } - return new BoneFrame( - XMLUtil.getFloat(element, "time"), - XMLUtil.getString(element, "action", null), - bones - ); - } - - /** - * Load a Frame from XML - * @param element - * @return MeshFrame - * @throws Exception - */ - private MeshFrame loadMeshFrame(Element element) throws Exception { - List vertexElements = XMLUtil.getChildren(element, "vertex"); - Vertex[] vertices = new Vertex[vertexElements.size()]; - if (vertices.length != numVertices) { - throw new Exception("Vertex count incorrect"); - } - int vertexCount = 0; - for (Iterator i = vertexElements.iterator(); i.hasNext(); ) { - Element vertexElement = (Element) i.next(); - vertices[vertexCount++] = loadMeshVertex(vertexElement); - } - return new MeshFrame( - XMLUtil.getFloat(element, "time"), - XMLUtil.getString(element, "action", null), - vertices - ); - } - - /** - * Load a Bone from XML - * @param element - * @return a Matrix4f - * @throws Exception - */ - private Matrix4f loadBone(Element element) throws Exception { - Matrix4f ret = new Matrix4f(); - ret.m00 = XMLUtil.getFloat(element, "m00"); - ret.m01 = XMLUtil.getFloat(element, "m01"); - ret.m02 = XMLUtil.getFloat(element, "m02"); - ret.m03 = XMLUtil.getFloat(element, "m03"); - ret.m10 = XMLUtil.getFloat(element, "m10"); - ret.m11 = XMLUtil.getFloat(element, "m11"); - ret.m12 = XMLUtil.getFloat(element, "m12"); - ret.m13 = XMLUtil.getFloat(element, "m13"); - ret.m20 = XMLUtil.getFloat(element, "m20"); - ret.m21 = XMLUtil.getFloat(element, "m21"); - ret.m22 = XMLUtil.getFloat(element, "m22"); - ret.m23 = XMLUtil.getFloat(element, "m23"); - ret.m30 = XMLUtil.getFloat(element, "m30", 0.0f); - ret.m31 = XMLUtil.getFloat(element, "m31", 0.0f); - ret.m32 = XMLUtil.getFloat(element, "m32", 0.0f); - ret.m33 = XMLUtil.getFloat(element, "m33", 1.0f); - return ret; - } - -} diff --git a/src/java/org/lwjgl/util/model/loaders/XMLUtil.java b/src/java/org/lwjgl/util/model/loaders/XMLUtil.java deleted file mode 100644 index 3c7cbcca..00000000 --- a/src/java/org/lwjgl/util/model/loaders/XMLUtil.java +++ /dev/null @@ -1,191 +0,0 @@ -/* - * Copyright (c) 2002-2004 LWJGL Project - * 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 'LWJGL' 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 org.lwjgl.util.model.loaders; - -import java.util.ArrayList; -import java.util.List; - -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -/** - * Some simple XML utilities - * @author cas - */ -final class XMLUtil { - - /** - * Get a single child element - * @param child - * @return the single child element, or null - * @throws Exception if the child is present multiple times - */ - static Element getChild(Element element, String child) throws Exception { - NodeList nodes = element.getChildNodes(); - Element ret = null; - for (int i = 0; i < nodes.getLength(); i ++) { - Node childNode = (Node) nodes.item(i); - if (childNode.getNodeName().equals(child) && childNode.getNodeType() == Node.ELEMENT_NODE) { - if (ret != null) { - throw new Exception("Child element '"+child+"' present multiple times"); - } else { - ret = (Element) childNode; - } - } - } - return ret; - } - - /** - * @param name The name of the child elements you want - * @return a List of child Elements - */ - static List getChildren(Element element, String name) throws Exception { - NodeList nodes = element.getChildNodes(); - ArrayList ret = new ArrayList(nodes.getLength()); - for (int i = 0; i < nodes.getLength(); i ++) { - Node childNode = (Node) nodes.item(i); - if (childNode.getNodeName().equals(name) && childNode.getNodeType() == Node.ELEMENT_NODE) { - ret.add(childNode); - } - } - return ret; - } - - /** - * A convenience method for getting float values out of XML elements - * @param attribute The name of the attribute - * @throws NumberFormatException If the supplied attribute is not a number - * @throws Exception if the value is missing - * @return the parsed float value - */ - static float getFloat(Element element, String attribute) throws Exception { - String s = element.getAttribute(attribute); - if (s == null || "".equals(s)) - throw new Exception("Attribute '"+attribute+"' has not been specified for "+element.getNodeName()); - else - return Float.parseFloat(s); - } - - - /** - * A convenience method for getting float values out of XML elements - * @param attribute The name of the attribute - * @param defaultValue The default value to return if no default is specified - * @throws NumberFormatException If the supplied attribute is not a number - * @return the parsed float value - */ - static float getFloat(Element element, String attribute, float defaultValue) throws Exception { - String s = element.getAttribute(attribute); - if (s == null || "".equals(s)) - return defaultValue; - else - return Float.parseFloat(s); - } - - - /** - * A convenience method for getting integer values out of XML elements - * @param attribute The name of the attribute - * @throws NumberFormatException If the supplied attribute is not a number - * @throws Exception if the value is missing - * @return the parsed integer value - */ - static int getInt(Element element, String attribute) throws Exception { - String s = element.getAttribute(attribute); - if (s == null || "".equals(s)) - throw new Exception("Attribute '"+attribute+"' has not been specified for "+element.getNodeName()); - else - return Integer.parseInt(s); - } - - - /** - * A convenience method for getting integer values out of XML elements - * @param attribute The name of the attribute - * @param defaultValue The default value to return if no default is specified - * @throws NumberFormatException If the supplied attribute is not a number - * @return the parsed integer value - */ - static int getInt(Element element, String attribute, int defaultValue) throws Exception { - String s = element.getAttribute(attribute); - if (s == null || "".equals(s)) - return defaultValue; - else - return Integer.parseInt(s); - } - - - /** - * A convenience method for getting string values out of XML elements - * @param attribute The name of the attribute - * @return the string value, which will not be null - * @throws Exception the value is not specified - */ - static String getString(Element element, String attribute) throws Exception { - String s = element.getAttribute(attribute); - if (s == null || "".equals(s)) - throw new Exception("Attribute '"+attribute+"' has not been specified for "+element.getNodeName()); - else - return s; - } - - - /** - * A convenience method for getting string values out of XML elements - * @param attribute The name of the attribute - * @param defaultValue The default value to return if no default is specified - * @return the string value, which will not be null - */ - static String getString(Element element, String attribute, String defaultValue) throws Exception { - String s = element.getAttribute(attribute); - if (s == null || "".equals(s)) - return defaultValue; - else - return s; - } - - /** - * @return true if the specified attribute is present and not empty or null in the element - */ - static boolean hasAttribute(Element element, String attribute) { - String s = element.getAttribute(attribute); - if (s == null || "".equals(s)) - return false; - else - return true; - } - - - -} diff --git a/src/java/org/lwjgl/util/model/renderer/AnimationEventListener.java b/src/java/org/lwjgl/util/model/renderer/AnimationEventListener.java deleted file mode 100644 index c7cf71aa..00000000 --- a/src/java/org/lwjgl/util/model/renderer/AnimationEventListener.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2002-2004 LWJGL Project - * 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 'LWJGL' 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 org.lwjgl.util.model.renderer; - -/** - * Listens out for events that occur in animations and takes appropriate actions - * @author $Author$ - * @version $Revision$ - * $Id$ - */ -public interface AnimationEventListener { - /** - * Fired when a frame with an action associated with it is rendered - * @param src The source Renderer - * @param action The action - */ - public void receiveAnimationEvent(ModelRenderer src, String action); -} diff --git a/src/java/org/lwjgl/util/model/renderer/FrameProcessor.java b/src/java/org/lwjgl/util/model/renderer/FrameProcessor.java deleted file mode 100644 index fee44ed6..00000000 --- a/src/java/org/lwjgl/util/model/renderer/FrameProcessor.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2002-2004 LWJGL Project - * 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 'LWJGL' 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 org.lwjgl.util.model.renderer; - -import org.lwjgl.util.Renderable; -import org.lwjgl.util.model.Frame; -import org.lwjgl.util.model.Model; - -/** - * The interface for processing individual frames of rendered models. - * Typically the processor will process the frame of animation, and store - * the processed results in some data structure that make it easy to render. - * @author $Author$ - * @version $Revision$ - * $Id$ - */ -public interface FrameProcessor extends Renderable { - - /** - * Process a frame. - * @param model The model - * @param frame The frame to process - */ - public void process(Model model, Frame frame); - -} diff --git a/src/java/org/lwjgl/util/model/renderer/ModelRenderer.java b/src/java/org/lwjgl/util/model/renderer/ModelRenderer.java deleted file mode 100644 index 7d50d579..00000000 --- a/src/java/org/lwjgl/util/model/renderer/ModelRenderer.java +++ /dev/null @@ -1,327 +0,0 @@ -/* - * Copyright (c) 2002-2004 LWJGL Project - * 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 'LWJGL' 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 org.lwjgl.util.model.renderer; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.lwjgl.util.Renderable; -import org.lwjgl.util.Timer; -import org.lwjgl.util.model.Frame; -import org.lwjgl.util.model.Model; - -/** - * - * Pluggable model renderer - *

- * Material lookups are performed by mapping the material name to a Renderable thing. You must - * suppy appropriate Renderables - typically something that binds a 2D texture and sets up some - * GL state. - *

- * To animate things, you will need to call Timer.tick() every frame to update the timers in your - * Renderables. Then they'll just animate themselves. Hurrah! - * - * @author $Author$ - * @version $Revision$ - * $Id$ - */ -public class ModelRenderer implements Renderable { - - /** Material map: String name->Renderable */ - private static final Map materials = new HashMap(); - - /** The model we're rendering */ - private Model model; - - /** The frame processor */ - private FrameProcessor processor; - - /** Animation event listeners */ - private List listeners; - - /** The current material */ - private Renderable material; - - /** The animation currently being animated */ - private Frame[] frame; - - /** The current time */ - private final Timer timer = new Timer(); - - /** Last frame rendered */ - private Frame currentFrame; - - /** Visibility */ - private boolean visible = true; - - /** - * C'tor - */ - public ModelRenderer() { - } - - /** - * @param model The model to set. - */ - public void setModel(Model model) { - if (this.model == model) { - return; - } - this.model = model; - material = (Renderable) materials.get(model.getMaterial()); - frame = null; - } - - /** - * @return the Model we're rendering with this Renderer - */ - public Model getModel() { - return model; - } - - /** - * Set the animation - * @param animation - */ - public void setAnimation(String animation) { - if (model == null) { - return; - } - frame = model.getAnimation(animation); - timer.reset(); - } - - /** - * Update the model - */ - public void update() { - - // Don't do anything if there's no model or no animation or no processor - if (model == null || frame == null || processor == null) { - return; - } - - // Work out what frame to show - Frame frame = findFrame(); - if (frame != currentFrame) { - currentFrame = frame; - processFrame(); - if (currentFrame.getAction() != null) { - fireAnimationEvent(currentFrame.getAction()); - } - } - - } - - /** - * Render things - */ - public void render() { - - // Don't do anything if there's no model or no animation or no processor - if (model == null || frame == null || processor == null || !visible) { - return; - } - - // Set up GL state from the Model's material - if (material != null) { - material.render(); - } - - // Render the current frame - renderFrame(); - - } - - /** - * Find the nearest frame to the current time - * @return the Frame nearest the current time - */ - private Frame findFrame() { - float time = timer.getTime(); - - // Use a binary search to find the frame - int i = 0; - for (int j = frame.length - 1; i <= j;) { - int k = i + j >> 1; - Frame f = frame[k]; - if (f.getTime() == time) { - return f; - } else if (f.getTime() < time) { - i = k + 1; - } else { - j = k - 1; - } - } - - return frame[i + 1]; - } - - /** - * Process the current frame of animation - */ - protected void processFrame() { - processor.process(model, currentFrame); - } - - /** - * Render the current frame - */ - protected void renderFrame() { - processor.render(); - } - - /** - * Add a material - * - * @param name - * The material's name - * @param renderable - * The renderable object - */ - public static void putMaterial(String name, Renderable renderable) { - materials.put(name, renderable); - } - - /** - * Remove a material - * @param name The material's name - * @return a Renderable - */ - public static Renderable removeMaterial(String name) { - return (Renderable) materials.remove(name); - } - - /** - * Determine if this Renderer is visible - * @return boolean - */ - public boolean isVisible() { - return visible; - } - - /** - * Sets the visibility of this Renderer - * @param visible - */ - public void setVisible(boolean visible) { - this.visible = visible; - } - - /** - * Determines if the animation is paused - * @return boolean - */ - public boolean isPaused() { - return timer.isPaused(); - } - - /** - * Pause the animation - */ - public void pause() { - timer.pause(); - } - - /** - * Rewind the animation - */ - public void rewind() { - timer.reset(); - } - - /** - * Resume a paused animation - */ - public void resume() { - timer.resume(); - } - - /** - * @return Returns the processor. - */ - public FrameProcessor getProcessor() { - return processor; - } - - /** - * Sets the processor. The processor is the clever bit that actually does the - * vertex twiddling and rendering. - * @param processor The processor to set. - */ - public void setProcessor(FrameProcessor processor) { - this.processor = processor; - } - - /** - * Add an animation listener - * @param listener - */ - public void addAnimationEventListener(AnimationEventListener listener) { - if (listeners == null) { - listeners = new ArrayList(1); - } - listeners.remove(listener); - listeners.add(listener); - } - - /** - * Remove an animation listener - * @param listener - */ - public void removeAnimationEventListener(AnimationEventListener listener) { - if (listeners == null) { - return; - } - listeners.remove(listener); - if (listeners.size() == 0) { - listeners = null; - } - } - - /** - * Fire an animation event - * @param action - */ - protected void fireAnimationEvent(String action) { - if (listeners == null) { - return; - } - int n = listeners.size(); - for (int i = 0; i < n; i ++) { - AnimationEventListener listener = (AnimationEventListener) listeners.get(i); - listener.receiveAnimationEvent(this, action); - } - } -} diff --git a/src/java/org/lwjgl/util/model/renderer/Sprite3D.java b/src/java/org/lwjgl/util/model/renderer/Sprite3D.java deleted file mode 100644 index bdaf6f7e..00000000 --- a/src/java/org/lwjgl/util/model/renderer/Sprite3D.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (c) 2002-2004 LWJGL Project - * 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 'LWJGL' 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 org.lwjgl.util.model.renderer; - -import org.lwjgl.opengl.GL11; -import org.lwjgl.util.vector.Vector3f; - -/** - * A 3D sprite! - * @author $Author$ - * @version $Revision$ - * $Id$ - */ -public class Sprite3D extends ModelRenderer { - - /** Current position */ - private final Vector3f position = new Vector3f(); - - /** Current orientation (axis/angle) */ - private final Vector3f axis = new Vector3f(); - private float angle; - - /* - * Recognised animation actions - */ - private static final String ANIM_HIDE = "hide"; - private static final String ANIM_REWIND = "rewind"; - private static final String ANIM_GOTO = "goto "; - - /** - * C'tor - */ - public Sprite3D() { - addAnimationEventListener(new AnimationEventListener() { - public void receiveAnimationEvent(ModelRenderer src, String action) { - if (action.equals(ANIM_HIDE)) { - setVisible(false); - } else if (action.equals(ANIM_REWIND)) { - rewind(); - } else if (action.startsWith(ANIM_GOTO)) { - setAnimation(action.substring(ANIM_GOTO.length())); - } - } - }); - } - - /* (non-Javadoc) - * @see org.lwjgl.util.model.renderer.ModelRenderer#renderFrame() - */ - protected void renderFrame() { - // TODO: rotation - GL11.glPushMatrix(); - GL11.glTranslatef(position.getX(), position.getY(), position.getY()); - super.renderFrame(); - GL11.glPopMatrix(); - } - - /** - * @return Returns the position. - */ - public Vector3f getPosition() { - return position; - } -}