You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(134) |
Sep
(52) |
Oct
(13) |
Nov
(342) |
Dec
(163) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(44) |
Feb
(62) |
Mar
(158) |
Apr
(38) |
May
(70) |
Jun
(58) |
Jul
(104) |
Aug
(207) |
Sep
(83) |
Oct
(122) |
Nov
(23) |
Dec
(49) |
| 2004 |
Jan
(119) |
Feb
(132) |
Mar
(192) |
Apr
(140) |
May
(77) |
Jun
(74) |
Jul
(201) |
Aug
(63) |
Sep
(102) |
Oct
(70) |
Nov
(173) |
Dec
(78) |
| 2005 |
Jan
(174) |
Feb
(197) |
Mar
(105) |
Apr
(59) |
May
(77) |
Jun
(43) |
Jul
(21) |
Aug
(18) |
Sep
(47) |
Oct
(37) |
Nov
(74) |
Dec
(50) |
| 2006 |
Jan
(44) |
Feb
(19) |
Mar
(32) |
Apr
(24) |
May
(31) |
Jun
(55) |
Jul
(138) |
Aug
(28) |
Sep
(12) |
Oct
(41) |
Nov
(58) |
Dec
(24) |
| 2007 |
Jan
(28) |
Feb
(14) |
Mar
(10) |
Apr
(68) |
May
(30) |
Jun
(26) |
Jul
(18) |
Aug
(63) |
Sep
(19) |
Oct
(29) |
Nov
(20) |
Dec
(10) |
| 2008 |
Jan
(38) |
Feb
(7) |
Mar
(37) |
Apr
(120) |
May
(41) |
Jun
(36) |
Jul
(39) |
Aug
(24) |
Sep
(28) |
Oct
(30) |
Nov
(36) |
Dec
(75) |
| 2009 |
Jan
(46) |
Feb
(22) |
Mar
(50) |
Apr
(70) |
May
(134) |
Jun
(105) |
Jul
(75) |
Aug
(34) |
Sep
(38) |
Oct
(34) |
Nov
(19) |
Dec
(20) |
| 2010 |
Jan
(11) |
Feb
(20) |
Mar
(65) |
Apr
(83) |
May
(104) |
Jun
(73) |
Jul
(78) |
Aug
(57) |
Sep
(43) |
Oct
(35) |
Nov
(9) |
Dec
(4) |
| 2011 |
Jan
(21) |
Feb
(11) |
Mar
(18) |
Apr
(10) |
May
(18) |
Jun
(15) |
Jul
(48) |
Aug
(25) |
Sep
(17) |
Oct
(45) |
Nov
(15) |
Dec
(12) |
| 2012 |
Jan
(21) |
Feb
(9) |
Mar
(12) |
Apr
(9) |
May
(9) |
Jun
(5) |
Jul
(1) |
Aug
(10) |
Sep
(12) |
Oct
(1) |
Nov
(28) |
Dec
(5) |
| 2013 |
Jan
(4) |
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2014 |
Jan
|
Feb
(1) |
Mar
(1) |
Apr
|
May
(2) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
|
Dec
|
| 2015 |
Jan
(1) |
Feb
|
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
(2) |
Nov
|
Dec
|
| 2016 |
Jan
(2) |
Feb
(1) |
Mar
(1) |
Apr
(1) |
May
(2) |
Jun
|
Jul
(1) |
Aug
(2) |
Sep
|
Oct
|
Nov
(1) |
Dec
|
| 2017 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
|
|
|
|
1
|
2
|
3
(9) |
|
4
(28) |
5
(1) |
6
(9) |
7
(9) |
8
|
9
(7) |
10
|
|
11
(1) |
12
(18) |
13
(8) |
14
|
15
|
16
(2) |
17
(2) |
|
18
(17) |
19
(5) |
20
(5) |
21
(12) |
22
(1) |
23
|
24
|
|
25
|
26
(1) |
27
|
28
|
29
(3) |
30
(2) |
|
|
From: Caspian Rychlik-P. <ci...@us...> - 2004-04-21 20:47:25
|
Update of /cvsroot/java-game-lib/LWJGL/src/java/org/lwjgl/util/model/renderer In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11671/src/java/org/lwjgl/util/model/renderer Added Files: FrameProcessor.java Sprite3D.java ModelRenderer.java AnimationEventListener.java Removed Files: Renderer.java Log Message: Rendery stuff --- NEW FILE: FrameProcessor.java --- /* * Copyright (c) 2003 Shaven Puppy Ltd * 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 'Shaven Puppy' 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; /** * $Id: FrameProcessor.java,v 1.1 2004/04/21 20:47:06 cix_foo Exp $ * 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: cix_foo $ * @version $Revision: 1.1 $ */ 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); } --- NEW FILE: ModelRenderer.java --- /* * Copyright (c) 2003 Shaven Puppy Ltd * 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 'Shaven Puppy' 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; /** * $Id: ModelRenderer.java,v 1.1 2004/04/21 20:47:08 cix_foo Exp $ * * Pluggable model renderer * <p> * 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. * <p> * 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: cix_foo $ * @version $Revision: 1.1 $ */ 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); } } } --- NEW FILE: AnimationEventListener.java --- /* * Copyright (c) 2003 Shaven Puppy Ltd * 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 'Shaven Puppy' 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; /** * $Id: AnimationEventListener.java,v 1.1 2004/04/21 20:47:08 cix_foo Exp $ * Listens out for events that occur in animations and takes appropriate actions * @author $Author: cix_foo $ * @version $Revision: 1.1 $ */ 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); } --- Renderer.java DELETED --- --- NEW FILE: Sprite3D.java --- /* * Copyright (c) 2003 Shaven Puppy Ltd * 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 'Shaven Puppy' 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; /** * $Id: Sprite3D.java,v 1.1 2004/04/21 20:47:08 cix_foo Exp $ * A 3D sprite! * @author $Author: cix_foo $ * @version $Revision: 1.1 $ */ 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; } } |
|
From: Caspian Rychlik-P. <ci...@us...> - 2004-04-21 19:46:44
|
Update of /cvsroot/java-game-lib/LWJGL/src/java/org/lwjgl/util/model In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31757/src/java/org/lwjgl/util/model Modified Files: MeshedModel.java Frame.java MeshFrame.java BoneFrame.java BonedModel.java Model.java Log Message: more utils Index: Frame.java =================================================================== RCS file: /cvsroot/java-game-lib/LWJGL/src/java/org/lwjgl/util/model/Frame.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- Frame.java 20 Apr 2004 20:39:50 -0000 1.4 +++ Frame.java 21 Apr 2004 19:45:42 -0000 1.5 @@ -39,19 +39,24 @@ * @author $Author$ * @version $Revision$ */ -public abstract class Frame implements Serializable { +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) { + public Frame(float time, String action) { this.time = time; + this.action = action; } /** @@ -60,4 +65,35 @@ 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; + } } Index: MeshedModel.java =================================================================== RCS file: /cvsroot/java-game-lib/LWJGL/src/java/org/lwjgl/util/model/MeshedModel.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- MeshedModel.java 21 Apr 2004 18:11:00 -0000 1.2 +++ MeshedModel.java 21 Apr 2004 19:45:39 -0000 1.3 @@ -61,8 +61,8 @@ * @param color[] * @param animation */ - public MeshedModel(String material, Triangle[] triangle, Vector2f[] skin, Color[] color, Map animation) { - super(material, triangle, skin, color, animation); + public MeshedModel(String name, String material, Triangle[] triangle, Vector2f[] skin, Color[] color, Map animation) { + super(name, material, triangle, skin, color, animation); } } Index: MeshFrame.java =================================================================== RCS file: /cvsroot/java-game-lib/LWJGL/src/java/org/lwjgl/util/model/MeshFrame.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- MeshFrame.java 20 Apr 2004 20:39:49 -0000 1.1 +++ MeshFrame.java 21 Apr 2004 19:45:43 -0000 1.2 @@ -48,10 +48,11 @@ /** * C'tor * @param time + * @param action * @param bone[] */ - public MeshFrame(float time, Vertex[] vertex) { - super(time); + public MeshFrame(float time, String action, Vertex[] vertex) { + super(time, action); this.vertex = vertex; } Index: Model.java =================================================================== RCS file: /cvsroot/java-game-lib/LWJGL/src/java/org/lwjgl/util/model/Model.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- Model.java 21 Apr 2004 18:11:00 -0000 1.5 +++ Model.java 21 Apr 2004 19:45:49 -0000 1.6 @@ -52,6 +52,9 @@ public static final long serialVersionUID = 1L; + /** Model name */ + private final String name; + /** Material */ private final String material; @@ -69,13 +72,15 @@ /** * C'tor + * @param name * @param material * @param triangle * @param skin[] * @param color[] * @param animation */ - public Model(String material, Triangle[] triangle, Vector2f[] skin, Color[] color, Map 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; @@ -88,8 +93,8 @@ * @param name The name of the animation * @return the Frames of an animation (or null, if no such animation exists) */ - public final BoneFrame[] getAnimation(String name) { - return (BoneFrame[]) animation.get(name); + public final Frame[] getAnimation(String name) { + return (Frame[]) animation.get(name); } /** @@ -120,5 +125,17 @@ 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; + } } Index: BonedModel.java =================================================================== RCS file: /cvsroot/java-game-lib/LWJGL/src/java/org/lwjgl/util/model/BonedModel.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- BonedModel.java 21 Apr 2004 18:11:00 -0000 1.2 +++ BonedModel.java 21 Apr 2004 19:45:48 -0000 1.3 @@ -65,8 +65,8 @@ * @param animation * @param vertex */ - public BonedModel(String material, Triangle[] triangle, Vector2f[] skin, Color[] color, Map animation, BonedVertex[] vertex) { - super(material, triangle, skin, color, animation); + 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; } Index: BoneFrame.java =================================================================== RCS file: /cvsroot/java-game-lib/LWJGL/src/java/org/lwjgl/util/model/BoneFrame.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- BoneFrame.java 20 Apr 2004 20:39:50 -0000 1.1 +++ BoneFrame.java 21 Apr 2004 19:45:48 -0000 1.2 @@ -49,10 +49,11 @@ /** * C'tor * @param time + * @param action * @param bone[] */ - public BoneFrame(float time, Matrix4f[] bone) { - super(time); + public BoneFrame(float time, String action, Matrix4f[] bone) { + super(time, action); this.bone = bone; } |
|
From: Caspian Rychlik-P. <ci...@us...> - 2004-04-21 19:46:44
|
Update of /cvsroot/java-game-lib/LWJGL/src/java/org/lwjgl/util/model/renderer In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31757/src/java/org/lwjgl/util/model/renderer Modified Files: Renderer.java Removed Files: Renderable.java Log Message: more utils --- Renderable.java DELETED --- Index: Renderer.java =================================================================== RCS file: /cvsroot/java-game-lib/LWJGL/src/java/org/lwjgl/util/model/renderer/Renderer.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- Renderer.java 20 Apr 2004 20:39:52 -0000 1.4 +++ Renderer.java 21 Apr 2004 19:45:25 -0000 1.5 @@ -31,11 +31,15 @@ */ package org.lwjgl.util.model.renderer; +import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.Map; -import org.lwjgl.util.model.BoneFrame; -import org.lwjgl.util.model.BonedModel; +import org.lwjgl.util.Renderable; +import org.lwjgl.util.Timer; +import org.lwjgl.util.model.Frame; +import org.lwjgl.util.model.Model; /** * $Id$ @@ -46,14 +50,35 @@ * 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. + * <p> + * 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$ */ -public class Renderer { +public class Renderer implements Renderable { /** Material map: String name->Renderable */ - private final Map materials = new HashMap(); + private static final Map materials = new HashMap(); + + /** The model we're rendering */ + private Model model; + + /** 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 lastFrame; + + /** Visibility */ + private boolean visible; /** * C'tor @@ -62,36 +87,135 @@ } /** + * @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(); + lastFrame = null; + } + + /** * Render a Model - * @param model The model to render - * @param animation The name of the animation - * @param time The time for the animation */ - public void render(BonedModel model, String animation, float time) { + public void render() { + + // Don't do anything if there's no model or no animation + if (model == null || frame == null) { + return; + } // 1. Set up GL state from the Model's material - Renderable material = (Renderable) materials.get(model.getMaterial()); if (material != null) { material.render(); } - // 2. Get the animation - BoneFrame[] frame = model.getAnimation(animation); - if (frame == null) { - return; + // 2. Work out what frame to show + Frame frame = findFrame(); + if (frame != lastFrame) { + lastFrame = frame; + processFrame(); } - // 3. Work out what the nearest frame is to the specified time + // 3. Render the processed frame } /** + * 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 a = 0, b = + } + + /** * Add a material * @param name The material's name * @param renderable The renderable object */ - public void putMaterial(String name, Renderable renderable) { + 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(); + } + } |
|
From: Caspian Rychlik-P. <ci...@us...> - 2004-04-21 19:46:14
|
Update of /cvsroot/java-game-lib/LWJGL/src/java/org/lwjgl/util In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31757/src/java/org/lwjgl/util Added Files: Renderable.java Timer.java Log Message: more utils --- NEW FILE: Renderable.java --- /* * Copyright (c) 2003 Shaven Puppy Ltd * 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 'Shaven Puppy' 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; /** * $Id: Renderable.java,v 1.1 2004/04/21 19:46:03 cix_foo Exp $ * * Simple interface to things that can be Rendered. * * @author $Author: cix_foo $ * @version $Revision: 1.1 $ */ public interface Renderable { /** * "Render" this thing. This will involve calls to the GL. */ public void render(); } --- NEW FILE: Timer.java --- /* * Copyright (c) 2002 Shaven Puppy Ltd * 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 'Shaven Puppy' 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; import org.lwjgl.Sys; /** * $Id: Timer.java,v 1.1 2004/04/21 19:46:04 cix_foo Exp $ * * A hires timer. This measures time in seconds as floating point values. * All Timers created are updated simultaneously by calling the static method * tick(). This ensures that within a single iteration of a game loop that * all timers are updated consistently with each other. * * @author cix_foo <ci...@us...> * @version $Revision: 1.1 $ */ public class Timer { // Record the timer resolution on classload private static final long resolution = Sys.getTimerResolution(); // Globally keeps track of time for all instances of Timer private static long currentTime; // When the timer was started private long startTime; // The last time recorded by getTime() private long lastTime; // Whether the timer is paused private boolean paused; /** * Constructs a timer. The timer will be reset to 0.0 and resumed immediately. */ public Timer() { reset(); resume(); } /** * @return the time in seconds, as a float */ public float getTime() { if (!paused) lastTime = currentTime - startTime; return (float) ((double) lastTime / (double) resolution); } /** * @return whether this timer is paused */ public boolean isPaused() { return paused; } /** * Pause the timer. Whilst paused the time will not change for this timer * when tick() is called. * * @see #resume() */ public void pause() { paused = true; } /** * Reset the timer. Equivalent to set(0.0f); * @see #set() */ public void reset() { set(0.0f); } /** * Resume the timer. * @see #pause() */ public void resume() { paused = false; startTime = currentTime - lastTime; } /** * Set the time of this timer * @param newTime the new time, in seconds */ public void set(float newTime) { long newTimeInTicks = (long) ((double) newTime * (double) resolution); startTime = currentTime - newTimeInTicks; lastTime = newTimeInTicks; } /** * Get the next time update from the system's hires timer. This method should * be called once per main loop iteration; all timers are updated simultaneously * from it. */ public static void tick() { currentTime = Sys.getTime(); } /** * Debug output. */ public String toString() { return "Timer[Time=" + getTime() + ", Paused=" + paused + "]"; } } |
|
From: Caspian Rychlik-P. <ci...@us...> - 2004-04-21 19:46:12
|
Update of /cvsroot/java-game-lib/LWJGL/src/java/org/lwjgl/util/model/loaders In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31757/src/java/org/lwjgl/util/model/loaders Added Files: XMLLoader.java XMLUtil.java Log Message: more utils --- NEW FILE: XMLLoader.java --- /* * Copyright (c) 2003 Shaven Puppy Ltd * 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 'Shaven Puppy' 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.*; import org.lwjgl.util.model.BoneFrame; import org.lwjgl.util.model.BonedModel; import org.lwjgl.util.model.BonedVertex; import org.lwjgl.util.model.MeshedModel; 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; /** * $Id: XMLLoader.java,v 1.1 2004/04/21 19:46:02 cix_foo Exp $ * * 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: cix_foo $ * @version $Revision: 1.1 $ */ 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(), "name"); String material = XMLUtil.getString(src.getDocumentElement(), "material"); numVertices = XMLUtil.getInt(src.getDocumentElement(), "vertices"); 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 { List vertexElements = XMLUtil.getChildren(src.getDocumentElement(), "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 { List skinElements = XMLUtil.getChildren(src.getDocumentElement(), "skin"); 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 skinElement = (Element) i.next(); skins[skinCount++] = loadTexCoord(skinElement); } return skins; } /** * Load the colour * @return Color[] * @throws Exception */ private Color[] loadColor() throws Exception { List colorElements = XMLUtil.getChildren(src.getDocumentElement(), "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 { List triangleElements = XMLUtil.getChildren(src.getDocumentElement(), "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 { List animationElements = XMLUtil.getChildren(src.getDocumentElement(), "animation"); Map animations = new HashMap(animationElements.size()); for (Iterator i = animationElements.iterator(); i.hasNext(); ) { Element animationElement = (Element) i.next(); animations.put(XMLUtil.getString(animationElement, "name"), loadBonedAnimation(animationElement)); } return animations; } /** * Load all the mesh keyframe animations * @return Map of animation names to MeshFrame[] animations * @throws Exception */ private Map loadMeshAnimations() throws Exception { List animationElements = XMLUtil.getChildren(src.getDocumentElement(), "animation"); Map animations = new HashMap(animationElements.size()); for (Iterator i = animationElements.iterator(); i.hasNext(); ) { Element animationElement = (Element) i.next(); animations.put(XMLUtil.getString(animationElement, "name"), loadMeshAnimation(animationElement)); } 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, "r"), XMLUtil.getInt(element, "g"), XMLUtil.getInt(element, "b"), XMLUtil.getInt(element, "a", 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; } } --- NEW FILE: XMLUtil.java --- /* * Copyright (c) 2003 Shaven Puppy Ltd * 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 'Shaven Puppy' 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 { /** * @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; } } |
|
From: Caspian Rychlik-P. <ci...@us...> - 2004-04-21 19:45:52
|
Update of /cvsroot/java-game-lib/LWJGL/src/java/org/lwjgl/util/model/loader In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31757/src/java/org/lwjgl/util/model/loader Removed Files: XMLUtil.java Loader.java Log Message: more utils --- Loader.java DELETED --- --- XMLUtil.java DELETED --- |
|
From: Caspian Rychlik-P. <ci...@us...> - 2004-04-21 19:44:44
|
Update of /cvsroot/java-game-lib/LWJGL/src/java/org/lwjgl/util/model/loaders In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31693/src/java/org/lwjgl/util/model/loaders Log Message: Directory /cvsroot/java-game-lib/LWJGL/src/java/org/lwjgl/util/model/loaders added to the repository |
|
From: Caspian Rychlik-P. <ci...@us...> - 2004-04-21 18:11:51
|
Update of /cvsroot/java-game-lib/LWJGL/src/java/org/lwjgl/util/model In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11765/src/java/org/lwjgl/util/model Modified Files: MeshedModel.java BonedModel.java Model.java Log Message: Tons more utils! Index: Model.java =================================================================== RCS file: /cvsroot/java-game-lib/LWJGL/src/java/org/lwjgl/util/model/Model.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- Model.java 20 Apr 2004 20:39:50 -0000 1.4 +++ Model.java 21 Apr 2004 18:11:00 -0000 1.5 @@ -35,6 +35,7 @@ import java.io.Serializable; import java.util.Map; +import org.lwjgl.util.Color; import org.lwjgl.util.vector.Vector2f; @@ -60,6 +61,9 @@ /** Skin */ private final Vector2f[] skin; + /** Colour */ + private final Color[] color; + /** The animations: a Map of string names to Frame[] arrays */ private final Map animation; @@ -68,12 +72,14 @@ * @param material * @param triangle * @param skin[] + * @param color[] * @param animation */ - public Model(String material, Triangle[] triangle, Vector2f[] skin, Map animation) { + public Model(String material, Triangle[] triangle, Vector2f[] skin, Color[] color, Map animation) { this.material = material; this.triangle = triangle; this.skin = skin; + this.color = color; this.animation = animation; } @@ -107,4 +113,12 @@ return skin; } + /** + * @return Returns the color + */ + public final Color[] getColor() { + return color; + } + + } Index: BonedModel.java =================================================================== RCS file: /cvsroot/java-game-lib/LWJGL/src/java/org/lwjgl/util/model/BonedModel.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- BonedModel.java 20 Apr 2004 20:39:50 -0000 1.1 +++ BonedModel.java 21 Apr 2004 18:11:00 -0000 1.2 @@ -34,6 +34,7 @@ import java.util.Map; +import org.lwjgl.util.Color; import org.lwjgl.util.vector.Vector2f; @@ -60,11 +61,12 @@ * @param material * @param triangle * @param skin[] + * @param color[] * @param animation * @param vertex */ - public BonedModel(String material, Triangle[] triangle, Vector2f[] skin, Map animation, BonedVertex[] vertex) { - super(material, triangle, skin, animation); + public BonedModel(String material, Triangle[] triangle, Vector2f[] skin, Color[] color, Map animation, BonedVertex[] vertex) { + super(material, triangle, skin, color, animation); this.vertex = vertex; } Index: MeshedModel.java =================================================================== RCS file: /cvsroot/java-game-lib/LWJGL/src/java/org/lwjgl/util/model/MeshedModel.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- MeshedModel.java 20 Apr 2004 20:39:47 -0000 1.1 +++ MeshedModel.java 21 Apr 2004 18:11:00 -0000 1.2 @@ -34,6 +34,7 @@ import java.util.Map; +import org.lwjgl.util.Color; import org.lwjgl.util.vector.Vector2f; @@ -57,10 +58,11 @@ * @param material * @param triangle * @param skin[] + * @param color[] * @param animation */ - public MeshedModel(String material, Triangle[] triangle, Vector2f[] skin, Map animation) { - super(material, triangle, skin, animation); + public MeshedModel(String material, Triangle[] triangle, Vector2f[] skin, Color[] color, Map animation) { + super(material, triangle, skin, color, animation); } } |
|
From: Caspian Rychlik-P. <ci...@us...> - 2004-04-21 18:11:16
|
Update of /cvsroot/java-game-lib/LWJGL/src/java/org/lwjgl/util In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11765/src/java/org/lwjgl/util Added Files: Point.java ReadableRectangle.java WritablePoint.java Display.java ReadableColor.java ReadablePoint.java WritableDimension.java Color.java ReadableDimension.java Rectangle.java Dimension.java WritableColor.java WritableRectangle.java Log Message: Tons more utils! --- NEW FILE: ReadableRectangle.java --- /* * Copyright (c) 2003 Shaven Puppy Ltd * 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 'Shaven Puppy' 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; /** * $Id: ReadableRectangle.java,v 1.1 2004/04/21 18:10:56 cix_foo Exp $ * Readonly interface for Rectangles * @author $Author: cix_foo $ * @version $Revision: 1.1 $ */ public interface ReadableRectangle extends ReadableDimension, ReadablePoint { /** * Copy this readable rectangle's bounds into a destination Rectangle * @param dest The destination Rectangle, or null, to create a new Rectangle */ public void getBounds(WritableRectangle dest); } --- NEW FILE: WritableDimension.java --- /* * Copyright (c) 2003 Shaven Puppy Ltd * 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 'Shaven Puppy' 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; /** * $Id: WritableDimension.java,v 1.1 2004/04/21 18:10:59 cix_foo Exp $ * Write interface for Dimensions * @author $Author: cix_foo $ * @version $Revision: 1.1 $ */ public interface WritableDimension { public void setSize(int w, int h); public void setSize(ReadableDimension d); /** * Sets the height. * @param height The height to set */ public void setHeight(int height); /** * Sets the width. * @param width The width to set */ public void setWidth(int width); } --- NEW FILE: ReadablePoint.java --- /* * Copyright (c) 2003 Shaven Puppy Ltd * 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 'Shaven Puppy' 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; /** * $Id: ReadablePoint.java,v 1.1 2004/04/21 18:10:59 cix_foo Exp $ * Readonly interface for Points * @author $Author: cix_foo $ * @version $Revision: 1.1 $ */ public interface ReadablePoint { /** * @return int */ public int getX(); /** * @return int */ public int getY(); /** * Copy this ReadablePoint into a destination Point * @param dest The destination Point, or null, to create a new Point */ public void getLocation(WritablePoint dest); } --- NEW FILE: Color.java --- /* * Copyright (c) 2002 Shaven Puppy Ltd * 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 'Shaven Puppy' 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; import java.io.Serializable; import java.nio.ByteBuffer; /** * $Id: Color.java,v 1.1 2004/04/21 18:10:59 cix_foo Exp $ * A mutable Color class * @author $Author: cix_foo $ * @version $Revision: 1.1 $ */ public final class Color implements ReadableColor, Serializable, WritableColor { static final long serialVersionUID = 1L; /** Color components, publicly accessible */ private byte red, green, blue, alpha; /** * Constructor for Color. */ public Color() { this(0, 0, 0, 255); } /** * Constructor for Color. Alpha defaults to 255. */ public Color(int r, int g, int b) { this(r, g, b, 255); } /** * Constructor for Color. Alpha defaults to 255. */ public Color(byte r, byte g, byte b) { this(r, g, b, (byte) 255); } /** * Constructor for Color. */ public Color(int r, int g, int b, int a) { set(r, g, b, a); } /** * Constructor for Color. */ public Color(byte r, byte g, byte b, byte a) { set(r, g, b, a); } /** * Constructor for Color */ public Color(ReadableColor c) { setColor(c); } /** * Set a color */ public void set(int r, int g, int b, int a) { red = (byte) r; green = (byte) g; blue = (byte) b; alpha = (byte) a; } /** * Set a color */ public void set(byte r, byte g, byte b, byte a) { this.red = r; this.green = g; this.blue = b; this.alpha = a; } /** * Set a color */ public void set(int r, int g, int b) { set(r, g, b, 255); } /** * Set a color */ public void set(byte r, byte g, byte b) { set(r, g, b, (byte) 255); } /** * Accessor */ public int getRed() { return red & 0xFF; } /** * Accessor */ public int getGreen() { return green & 0xFF; } /** * Accessor */ public int getBlue() { return blue & 0xFF; } /** * Accessor */ public int getAlpha() { return alpha & 0xFF; } /** * Set the Red component */ public void setRed(int red) { this.red = (byte) red; } /** * Set the Green component */ public void setGreen(int green) { this.green = (byte) green; } /** * Set the Blue component */ public void setBlue(int blue) { this.blue = (byte) blue; } /** * Set the Alpha component */ public void setAlpha(int alpha) { this.alpha = (byte) alpha; } /** * Set the Red component */ public void setRed(byte red) { this.red = red; } /** * Set the Green component */ public void setGreen(byte green) { this.green = green; } /** * Set the Blue component */ public void setBlue(byte blue) { this.blue = blue; } /** * Set the Alpha component */ public void setAlpha(byte alpha) { this.alpha = alpha; } /** * Stringify */ public String toString() { return "Color [" + getRed() + ", " + getGreen() + ", " + getBlue() + ", " + getAlpha() + "]"; } /** * Equals */ public boolean equals(Object o) { return (o != null) && (o instanceof ReadableColor) && (((ReadableColor) o).getRed() == this.getRed()) && (((ReadableColor) o).getGreen() == this.getGreen()) && (((ReadableColor) o).getBlue() == this.getBlue()) && (((ReadableColor) o).getAlpha() == this.getAlpha()); } /** * Hashcode */ public int hashCode() { return (red << 24) | (green << 16) | (blue << 8) | alpha; } /* (Overrides) * @see com.shavenpuppy.jglib.ReadableColor#getAlphaByte() */ public byte getAlphaByte() { return alpha; } /* (Overrides) * @see com.shavenpuppy.jglib.ReadableColor#getBlueByte() */ public byte getBlueByte() { return blue; } /* (Overrides) * @see com.shavenpuppy.jglib.ReadableColor#getGreenByte() */ public byte getGreenByte() { return green; } /* (Overrides) * @see com.shavenpuppy.jglib.ReadableColor#getRedByte() */ public byte getRedByte() { return red; } /* (Overrides) * @see com.shavenpuppy.jglib.ReadableColor#writeRGBA(java.nio.ByteBuffer) */ public void writeRGBA(ByteBuffer dest) { dest.put(red); dest.put(green); dest.put(blue); dest.put(alpha); } /* (Overrides) * @see com.shavenpuppy.jglib.ReadableColor#writeRGB(java.nio.ByteBuffer) */ public void writeRGB(ByteBuffer dest) { dest.put(red); dest.put(green); dest.put(blue); } /* (Overrides) * @see com.shavenpuppy.jglib.ReadableColor#writeABGR(java.nio.ByteBuffer) */ public void writeABGR(ByteBuffer dest) { dest.put(alpha); dest.put(blue); dest.put(green); dest.put(red); } /* (Overrides) * @see com.shavenpuppy.jglib.ReadableColor#writeARGB(java.nio.ByteBuffer) */ public void writeARGB(ByteBuffer dest) { dest.put(alpha); dest.put(red); dest.put(green); dest.put(blue); } /* (Overrides) * @see com.shavenpuppy.jglib.ReadableColor#writeBGR(java.nio.ByteBuffer) */ public void writeBGR(ByteBuffer dest) { dest.put(blue); dest.put(green); dest.put(red); } /* (Overrides) * @see com.shavenpuppy.jglib.ReadableColor#writeBGRA(java.nio.ByteBuffer) */ public void writeBGRA(ByteBuffer dest) { dest.put(blue); dest.put(green); dest.put(red); dest.put(alpha); } /** * Read a color from a byte buffer * @param src The source buffer */ public void readRGBA(ByteBuffer src) { red = src.get(); green = src.get(); blue = src.get(); alpha = src.get(); } /** * Read a color from a byte buffer * @param src The source buffer */ public void readRGB(ByteBuffer src) { red = src.get(); green = src.get(); blue = src.get(); } /** * Read a color from a byte buffer * @param src The source buffer */ public void readARGB(ByteBuffer src) { alpha = src.get(); red = src.get(); green = src.get(); blue = src.get(); } /** * Read a color from a byte buffer * @param src The source buffer */ public void readBGRA(ByteBuffer src) { blue = src.get(); green = src.get(); red = src.get(); alpha = src.get(); } /** * Read a color from a byte buffer * @param src The source buffer */ public void readBGR(ByteBuffer src) { blue = src.get(); green = src.get(); red = src.get(); } /** * Read a color from a byte buffer * @param src The source buffer */ public void readABGR(ByteBuffer src) { alpha = src.get(); blue = src.get(); green = src.get(); red = src.get(); } /** * Set this color's color by copying another color * @param src The source color */ public void setColor(ReadableColor src) { red = src.getRedByte(); green = src.getGreenByte(); blue = src.getBlueByte(); alpha = src.getAlphaByte(); } } --- NEW FILE: Display.java --- /* * Copyright (c) 2002 Shaven Puppy Ltd * 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 'Shaven Puppy' 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; import java.lang.reflect.Field; import java.util.*; import java.util.ArrayList; import java.util.Comparator; import org.lwjgl.DisplayMode; import org.lwjgl.Sys; /** * $Id: Display.java,v 1.1 2004/04/21 18:10:56 cix_foo Exp $ * Display initialization utility, that can be used to find display modes and pick * one for you based on your criteria. * @author $Author: cix_foo $ * @version $Revision: 1.1 $ */ public final class Display { private static final boolean DEBUG = false; /** * Determine the available display modes that match the specified minimum and maximum criteria. * If any given criterium is specified as -1 then it is ignored. * * @param minWidth the minimum display resolution in pixels * @param minHeight the minimum display resolution in pixels * @param maxWidth the maximum display resolution in pixels * @param maxHeight the maximum display resolution in pixels * @param minBPP the minimum bit depth per pixel * @param maxBPP the maximum bit depth per pixel * @param minFreq the minimum display frequency in Hz * @param maxFreq the maximum display frequency in Hz * @return an array of matching display modes */ public static DisplayMode[] getAvailableDisplayModes(int minWidth, int minHeight, int maxWidth, int maxHeight, int minBPP, int maxBPP, int minFreq, int maxFreq) { // First get the available display modes DisplayMode[] modes = org.lwjgl.Display.getAvailableDisplayModes(); if (Sys.DEBUG || DEBUG) { System.out.println("Available screen modes:"); for (int i = 0; i < modes.length; i ++) { System.out.println(modes[i]); } } ArrayList matches = new ArrayList(modes.length); for (int i = 0; i < modes.length; i ++) { assert modes[i] != null : ""+i+" "+modes.length; if (minWidth != -1 && modes[i].width < minWidth) continue; if (maxWidth != -1 && modes[i].width > maxWidth) continue; if (minHeight != -1 && modes[i].height < minHeight) continue; if (maxHeight != -1 && modes[i].height > maxHeight) continue; if (minBPP != -1 && modes[i].bpp < minBPP) continue; if (maxBPP != -1 && modes[i].bpp > maxBPP) continue; //if (modes[i].bpp == 24) // continue; if (modes[i].freq != 0) { if (minFreq != -1 && modes[i].freq < minFreq) continue; if (maxFreq != -1 && modes[i].freq > maxFreq) continue; } matches.add(modes[i]); } DisplayMode[] ret = new DisplayMode[matches.size()]; matches.toArray(ret); if (Sys.DEBUG && DEBUG) { System.out.println("Filtered screen modes:"); for (int i = 0; i < ret.length; i ++) { System.out.println(ret[i]); } } return ret; } /** * Create the display by choosing from a list of display modes based on an order of preference. * You must supply a list of allowable display modes, probably by calling getAvailableDisplayModes(), * and an array with the order in which you would like them sorted in descending order. * This method attempts to create the topmost display mode; if that fails, it will try the next one, * and so on, until there are no modes left. If no mode is set at the end, an exception is thrown. * @param dm[] a list of display modes to choose from * @param param[] the names of the DisplayMode fields in the order in which you would like them sorted. * @param fullscreen whether to go fullscreen * @param title The app title * @return the chosen display mode * @throws NoSuchFieldException if one of the params is not a field in DisplayMode * @throws Exception if no display mode could be set * @see org.lwjgj.DisplayMode */ public static DisplayMode setDisplayMode(DisplayMode[] dm, final String[] param) throws Exception { class Sorter implements Comparator { final Field[] field; final int[] order; final boolean[] usePreferred; final int[] preferred; Sorter() throws NoSuchFieldException { field = new Field[param.length]; order = new int[param.length]; preferred = new int[param.length]; usePreferred = new boolean[param.length]; for (int i = 0; i < field.length; i ++) { int idx = param[i].indexOf('='); if (idx > 0) { preferred[i] = Integer.parseInt(param[i].substring(idx + 1, param[i].length())); usePreferred[i] = true; param[i] = param[i].substring(0, idx); field[i] = DisplayMode.class.getField(param[i]); } else if (param[i].charAt(0) == '-') { field[i] = DisplayMode.class.getField(param[i].substring(1)); order[i] = -1; } else { field[i] = DisplayMode.class.getField(param[i]); order[i] = 1; } } } /** * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) */ public int compare(Object o1, Object o2) { DisplayMode dm1 = (DisplayMode) o1; DisplayMode dm2 = (DisplayMode) o2; for (int i = 0; i < field.length; i ++) { try { int f1 = field[i].getInt(dm1); int f2 = field[i].getInt(dm2); if (usePreferred[i] && f1 != f2) { if (f1 == preferred[i]) return -1; else if (f2 == preferred[i]) return 1; else { // Score according to the difference between the values int absf1 = Math.abs(f1 - preferred[i]); int absf2 = Math.abs(f2 - preferred[i]); if (absf1 < absf2) return -1; else if (absf1 > absf2) return 1; else continue; } } else if (f1 < f2) return order[i]; else if (f1 == f2) continue; else return -order[i]; } catch (Exception e) { assert false : e.getMessage(); } } return 0; } } // Sort the display modes Arrays.sort(dm, new Sorter()); // Try them out in the appropriate order if (Sys.DEBUG || DEBUG) { System.out.println("Sorted display modes:"); for (int i = 0; i < dm.length; i ++) { System.out.println(dm[i]); } } for (int i = 0; i < dm.length; i ++) { try { if (Sys.DEBUG || DEBUG) System.out.println("Attempting to set displaymode: "+dm[i]); org.lwjgl.Display.setDisplayMode(dm[i]); return dm[i]; } catch (Exception e) { if (Sys.DEBUG || DEBUG) { System.out.println("Failed to set display mode to "+dm[i]); e.printStackTrace(); } } } throw new Exception("Failed to set display mode."); } } --- NEW FILE: Point.java --- /* * Copyright (c) 2002 Shaven Puppy Ltd * 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 'Shaven Puppy' 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; import java.io.Serializable; /** * $Id: Point.java,v 1.1 2004/04/21 18:10:55 cix_foo Exp $ * A 2D integer point class, which looks remarkably like an AWT one. * @author $Author: cix_foo $ * @version $Revision: 1.1 $ */ public final class Point implements ReadablePoint, WritablePoint, Serializable { static final long serialVersionUID = 1L; /** The location */ private int x, y; /** * Constructor for Point. */ public Point() { super(); } /** * Constructor for Point. */ public Point(int x, int y) { setLocation(x, y); } /** * Constructor for Point. */ public Point(ReadablePoint p) { setLocation(p); } public void setLocation(int x, int y) { this.x = x; this.y = y; } public void setLocation(ReadablePoint p) { this.x = p.getX(); this.y = p.getY(); } public void setX(int x) { this.x = x; } public void setY(int y) { this.y = y; } /** * Translate a point. * @param x, y The translation to apply */ public void translate(int dx, int dy) { this.x += dx; this.y += dy; } /** * Translate a point. * @param p The translation to apply */ public void translate(ReadablePoint p) { this.x += p.getX(); this.y += p.getY(); } /** * Un-translate a point. * @param p The translation to apply */ public void untranslate(ReadablePoint p) { this.x -= p.getX(); this.y -= p.getY(); } /** * Determines whether an instance of <code>Point2D</code> is equal * to this point. Two instances of <code>Point2D</code> are equal if * the values of their <code>x</code> and <code>y</code> member * fields, representing their position in the coordinate space, are * the same. * @param obj an object to be compared with this point * @return <code>true</code> if the object to be compared is * an instance of <code>Point</code> and has * the same values; <code>false</code> otherwise */ public boolean equals(Object obj) { if (obj instanceof Point) { Point pt = (Point) obj; return (x == pt.x) && (y == pt.y); } return super.equals(obj); } /** * Returns a string representation of this point and its location * in the (<i>x</i>, <i>y</i>) coordinate space. This method is * intended to be used only for debugging purposes, and the content * and format of the returned string may vary between implementations. * The returned string may be empty but may not be <code>null</code>. * * @return a string representation of this point */ public String toString() { return getClass().getName() + "[x=" + x + ",y=" + y + "]"; } /** * Returns the hash code for this <code>Point</code>. * * @return a hash code for this <code>Point</code> */ public int hashCode() { int sum = x + y; return sum * (sum + 1) / 2 + x; } public int getX() { return x; } public int getY() { return y; } public void getLocation(WritablePoint dest) { dest.setLocation(x, y); } } --- NEW FILE: WritableRectangle.java --- /* * Copyright (c) 2003 Shaven Puppy Ltd * 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 'Shaven Puppy' 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; /** * $Id: WritableRectangle.java,v 1.1 2004/04/21 18:11:00 cix_foo Exp $ * Write interface for Rectangles * @author $Author: cix_foo $ * @version $Revision: 1.1 $ */ public interface WritableRectangle extends WritablePoint, WritableDimension { /** * Sets the bounds of the rectangle * @param x, y, width, height */ public void setBounds(int x, int y, int width, int height); /** * Sets the bounds of the rectangle * @param location * @param size */ public void setBounds(ReadablePoint location, ReadableDimension size); /** * Sets the bounds of the rectangle * @param src */ public void setBounds(ReadableRectangle src); } --- NEW FILE: Rectangle.java --- /* * Copyright (c) 2002 Shaven Puppy Ltd * 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 'Shaven Puppy' 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; import java.io.Serializable; /** * $Id: Rectangle.java,v 1.1 2004/04/21 18:11:00 cix_foo Exp $ * A 2D integer Rectangle class which looks remarkably like an AWT one. * @author $Author: cix_foo $ * @version $Revision: 1.1 $ */ public final class Rectangle implements ReadableRectangle, WritableRectangle, Serializable { static final long serialVersionUID = 1L; /** Rectangle's bounds */ private int x, y, width, height; /** * Constructor for Rectangle. */ public Rectangle() { super(); } /** * Constructor for Rectangle. */ public Rectangle(int x, int y, int w, int h) { this.x = x; this.y = y; this.width = w; this.height = h; } /** * Constructor for Rectangle. */ public Rectangle(ReadablePoint p, ReadableDimension d) { x = p.getX(); y = p.getY(); width = d.getWidth(); height = d.getHeight(); } /** * Constructor for Rectangle. */ public Rectangle(ReadableRectangle r) { x = r.getX(); y = r.getY(); width = r.getWidth(); height = r.getHeight(); } public void setLocation(int x, int y) { this.x = x; this.y = y; } public void setLocation(ReadablePoint p) { this.x = p.getX(); this.y = p.getY(); } public void setSize(int w, int h) { this.width = w; this.height = h; } public void setSize(ReadableDimension d) { this.width = d.getWidth(); this.height = d.getHeight(); } public void setBounds(int x, int y, int w, int h) { this.x = x; this.y = y; this.width = w; this.height = h; } public void setBounds(ReadablePoint p, ReadableDimension d) { x = p.getX(); y = p.getY(); width = d.getWidth(); height = d.getHeight(); } public void setBounds(ReadableRectangle r) { x = r.getX(); y = r.getY(); width = r.getWidth(); height = r.getHeight(); } /* (Overrides) * @see com.shavenpuppy.jglib.ReadableRectangle#getBounds(com.shavenpuppy.jglib.Rectangle) */ public void getBounds(WritableRectangle dest) { dest.setBounds(x, y, width, height); } /* (Overrides) * @see com.shavenpuppy.jglib.ReadablePoint#getLocation(com.shavenpuppy.jglib.Point) */ public void getLocation(WritablePoint dest) { dest.setLocation(x, y); } /* (Overrides) * @see com.shavenpuppy.jglib.ReadableDimension#getSize(com.shavenpuppy.jglib.Dimension) */ public void getSize(WritableDimension dest) { dest.setSize(width, height); } /** * Translate the rectangle by an amount. * @param x, y The translation amount */ public void translate(int x, int y) { this.x += x; this.y += y; } /** * Translate the rectangle by an amount. * @param point The translation amount */ public void translate(ReadablePoint point) { this.x += point.getX(); this.y += point.getY(); } /** * Un-translate the rectangle by an amount. * @param point The translation amount */ public void untranslate(ReadablePoint point) { this.x -= point.getX(); this.y -= point.getY(); } /** * Checks whether or not this <code>Rectangle</code> contains the * specified <code>Point</code>. * @param p the <code>Point</code> to test * @return <code>true</code> if the <code>Point</code> * (<i>x</i>, <i>y</i>) is inside this * <code>Rectangle</code>; * <code>false</code> otherwise. */ public boolean contains(ReadablePoint p) { return contains(p.getX(), p.getY()); } /** * Checks whether or not this <code>Rectangle</code> contains the * point at the specified location * (<i>x</i>, <i>y</i>). * @param X, Y the specified coordinates * @return <code>true</code> if the point * (<i>x</i>, <i>y</i>) is inside this * <code>Rectangle</code>; * <code>false</code> otherwise. */ public boolean contains(int X, int Y) { int w = this.width; int h = this.height; if ((w | h) < 0) { // At least one of the dimensions is negative... return false; } // Note: if either dimension is zero, tests below must return false... int x = this.x; int y = this.y; if (X < x || Y < y) { return false; } w += x; h += y; // overflow || intersect return ((w < x || w > X) && (h < y || h > Y)); } /** * Checks whether or not this <code>Rectangle</code> entirely contains * the specified <code>Rectangle</code>. * @param r the specified <code>Rectangle</code> * @return <code>true</code> if the <code>Rectangle</code> * is contained entirely inside this <code>Rectangle</code>; * <code>false</code> otherwise. */ public boolean contains(ReadableRectangle r) { return contains(r.getX(), r.getY(), r.getWidth(), r.getHeight()); } /** * Checks whether this <code>Rectangle</code> entirely contains * the <code>Rectangle</code> * at the specified location (<i>X</i>, <i>Y</i>) with the * specified dimensions (<i>W</i>, <i>H</i>). * @param X, Y the specified coordinates * @param W the width of the <code>Rectangle</code> * @param H the height of the <code>Rectangle</code> * @return <code>true</code> if the <code>Rectangle</code> specified by * (<i>X</i>, <i>Y</i>, <i>W</i>, <i>H</i>) * is entirely enclosed inside this <code>Rectangle</code>; * <code>false</code> otherwise. */ public boolean contains(int X, int Y, int W, int H) { int w = this.width; int h = this.height; if ((w | h | W | H) < 0) { // At least one of the dimensions is negative... return false; } // Note: if any dimension is zero, tests below must return false... int x = this.x; int y = this.y; if (X < x || Y < y) { return false; } w += x; W += X; if (W <= X) { // X+W overflowed or W was zero, return false if... // either original w or W was zero or // x+w did not overflow or // the overflowed x+w is smaller than the overflowed X+W if (w >= x || W > w) return false; } else { // X+W did not overflow and W was not zero, return false if... // original w was zero or // x+w did not overflow and x+w is smaller than X+W if (w >= x && W > w) return false; } h += y; H += Y; if (H <= Y) { if (h >= y || H > h) return false; } else { if (h >= y && H > h) return false; } return true; } /** * Determines whether or not this <code>Rectangle</code> and the specified * <code>Rectangle</code> intersect. Two rectangles intersect if * their intersection is nonempty. * * @param r the specified <code>Rectangle</code> * @return <code>true</code> if the specified <code>Rectangle</code> * and this <code>Rectangle</code> intersect; * <code>false</code> otherwise. */ public boolean intersects(ReadableRectangle r) { int tw = this.width; int th = this.height; int rw = r.getWidth(); int rh = r.getHeight(); if (rw <= 0 || rh <= 0 || tw <= 0 || th <= 0) { return false; } int tx = this.x; int ty = this.y; int rx = r.getX(); int ry = r.getY(); rw += rx; rh += ry; tw += tx; th += ty; // overflow || intersect return ((rw < rx || rw > tx) && (rh < ry || rh > ty) && (tw < tx || tw > rx) && (th < ty || th > ry)); } /** * Computes the intersection of this <code>Rectangle</code> with the * specified <code>Rectangle</code>. Returns a new <code>Rectangle</code> * that represents the intersection of the two rectangles. * If the two rectangles do not intersect, the result will be * an empty rectangle. * * @param r the specified <code>Rectangle</code> * @return the largest <code>Rectangle</code> contained in both the * specified <code>Rectangle</code> and in * this <code>Rectangle</code>; or if the rectangles * do not intersect, an empty rectangle. */ public Rectangle intersection(ReadableRectangle r, Rectangle dest) { int tx1 = this.x; int ty1 = this.y; int rx1 = r.getX(); int ry1 = r.getY(); long tx2 = tx1; tx2 += this.width; long ty2 = ty1; ty2 += this.height; long rx2 = rx1; rx2 += r.getWidth(); long ry2 = ry1; ry2 += r.getHeight(); if (tx1 < rx1) tx1 = rx1; if (ty1 < ry1) ty1 = ry1; if (tx2 > rx2) tx2 = rx2; if (ty2 > ry2) ty2 = ry2; tx2 -= tx1; ty2 -= ty1; // tx2,ty2 will never overflow (they will never be // larger than the smallest of the two source w,h) // they might underflow, though... if (tx2 < Integer.MIN_VALUE) tx2 = Integer.MIN_VALUE; if (ty2 < Integer.MIN_VALUE) ty2 = Integer.MIN_VALUE; if (dest == null) dest = new Rectangle(tx1, ty1, (int) tx2, (int) ty2); else dest.setBounds(tx1, ty1, (int) tx2, (int) ty2); return dest; } /** * Computes the union of this <code>Rectangle</code> with the * specified <code>Rectangle</code>. Returns a new * <code>Rectangle</code> that * represents the union of the two rectangles * @param r the specified <code>Rectangle</code> * @return the smallest <code>Rectangle</code> containing both * the specified <code>Rectangle</code> and this * <code>Rectangle</code>. */ public WritableRectangle union(ReadableRectangle r, WritableRectangle dest) { int x1 = Math.min(x, r.getX()); int x2 = Math.max(x + width, r.getX() + r.getWidth()); int y1 = Math.min(y, r.getY()); int y2 = Math.max(y + height, r.getY() + r.getHeight()); dest.setBounds(x1, y1, x2 - x1, y2 - y1); return dest; } /** * Adds a point, specified by the integer arguments <code>newx</code> * and <code>newy</code>, to this <code>Rectangle</code>. The * resulting <code>Rectangle</code> is * the smallest <code>Rectangle</code> that contains both the * original <code>Rectangle</code> and the specified point. * <p> * After adding a point, a call to <code>contains</code> with the * added point as an argument does not necessarily return * <code>true</code>. The <code>contains</code> method does not * return <code>true</code> for points on the right or bottom * edges of a <code>Rectangle</code>. Therefore, if the added point * falls on the right or bottom edge of the enlarged * <code>Rectangle</code>, <code>contains</code> returns * <code>false</code> for that point. * @param newx, newy the coordinates of the new point */ public void add(int newx, int newy) { int x1 = Math.min(x, newx); int x2 = Math.max(x + width, newx); int y1 = Math.min(y, newy); int y2 = Math.max(y + height, newy); x = x1; y = y1; width = x2 - x1; height = y2 - y1; } /** * Adds the specified <code>Point</code> to this * <code>Rectangle</code>. The resulting <code>Rectangle</code> * is the smallest <code>Rectangle</code> that contains both the * original <code>Rectangle</code> and the specified * <code>Point</code>. * <p> * After adding a <code>Point</code>, a call to <code>contains</code> * with the added <code>Point</code> as an argument does not * necessarily return <code>true</code>. The <code>contains</code> * method does not return <code>true</code> for points on the right * or bottom edges of a <code>Rectangle</code>. Therefore if the added * <code>Point</code> falls on the right or bottom edge of the * enlarged <code>Rectangle</code>, <code>contains</code> returns * <code>false</code> for that <code>Point</code>. * @param pt the new <code>Point</code> to add to this * <code>Rectangle</code> */ public void add(ReadablePoint pt) { add(pt.getX(), pt.getY()); } /** * Adds a <code>Rectangle</code> to this <code>Rectangle</code>. * The resulting <code>Rectangle</code> is the union of the two * rectangles. * @param r the specified <code>Rectangle</code> */ public void add(ReadableRectangle r) { int x1 = Math.min(x, r.getX()); int x2 = Math.max(x + width, r.getX() + r.getWidth()); int y1 = Math.min(y, r.getY()); int y2 = Math.max(y + height, r.getY() + r.getHeight()); x = x1; y = y1; width = x2 - x1; height = y2 - y1; } /** * Resizes the <code>Rectangle</code> both horizontally and vertically. * <p> * This method modifies the <code>Rectangle</code> so that it is * <code>h</code> units larger on both the left and right side, * and <code>v</code> units larger at both the top and bottom. * <p> * The new <code>Rectangle</code> has (<code>x - h</code>, * <code>y - v</code>) as its top-left corner, a * width of * <code>width</code> <code>+</code> <code>2h</code>, * and a height of * <code>height</code> <code>+</code> <code>2v</code>. * <p> * If negative values are supplied for <code>h</code> and * <code>v</code>, the size of the <code>Rectangle</code> * decreases accordingly. * The <code>grow</code> method does not check whether the resulting * values of <code>width</code> and <code>height</code> are * non-negative. * @param h the horizontal expansion * @param v the vertical expansion */ public void grow(int h, int v) { x -= h; y -= v; width += h * 2; height += v * 2; } /** * Determines whether or not this <code>Rectangle</code> is empty. A * <code>Rectangle</code> is empty if its width or its height is less * than or equal to zero. * @return <code>true</code> if this <code>Rectangle</code> is empty; * <code>false</code> otherwise. */ public boolean isEmpty() { return (width <= 0) || (height <= 0); } /** * Checks whether two rectangles are equal. * <p> * The result is <code>true</code> if and only if the argument is not * <code>null</code> and is a <code>Rectangle</code> object that has the * same top-left corner, width, and height as this <code>Rectangle</code>. * @param obj the <code>Object</code> to compare with * this <code>Rectangle</code> * @return <code>true</code> if the objects are equal; * <code>false</code> otherwise. */ public boolean equals(Object obj) { if (obj instanceof Rectangle) { Rectangle r = (Rectangle) obj; return ((x == r.x) && (y == r.y) && (width == r.width) && (height == r.height)); } return super.equals(obj); } /** * Debugging * @return a String */ public String toString() { return getClass().getName() + "[x=" + x + ",y=" + y + ",width=" + width + ",height=" + height + "]"; } /** * Gets the height. * @return Returns a int */ public int getHeight() { return height; } /** * Sets the height. * @param height The height to set */ public void setHeight(int height) { this.height = height; } /** * Gets the width. * @return Returns a int */ public int getWidth() { return width; } /** * Sets the width. * @param width The width to set */ public void setWidth(int width) { this.width = width; } /** * Gets the x. * @return Returns a int */ public int getX() { return x; } /** * Sets the x. * @param x The x to set */ public void setX(int x) { this.x = x; } /** * Gets the y. * @return Returns a int */ public int getY() { return y; } /** * Sets the y. * @param y The y to set */ public void setY(int y) { this.y = y; } } --- NEW FILE: WritablePoint.java --- /* * Copyright (c) 2003 Shaven Puppy Ltd * 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 'Shaven Puppy' 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; /** * $Id: WritablePoint.java,v 1.1 2004/04/21 18:10:56 cix_foo Exp $ * Write interface for Points * @author $Author: cix_foo $ * @version $Revision: 1.1 $ */ public interface WritablePoint { public void setLocation(int x, int y); public void setLocation(ReadablePoint p); public void setX(int x); public void setY(int y); } --- NEW FILE: Dimension.java --- /* * Copyright (c) 2002 Shaven Puppy Ltd * 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 'Shaven Puppy' 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; import java.io.Serializable; /** * $Id: Dimension.java,v 1.1 2004/04/21 18:11:00 cix_foo Exp $ * A 2D integer Dimension class, which looks remarkably like an AWT one. * @author $Author: cix_foo $ * @version $Revision: 1.1 $ */ public final class Dimension implements Serializable, ReadableDimension, WritableDimension { static final long serialVersionUID = 1L; /** The dimensions! */ private int width, height; /** * Constructor for Dimension. */ public Dimension() { super(); } /** * Constructor for Dimension. */ public Dimension(int w, int h) { this.width = w; this.height = h; } /** * Constructor for Dimension. */ public Dimension(ReadableDimension d) { setSize(d); } public void setSize(int w, int h) { this.width = w; this.height = h; } public void setSize(ReadableDimension d) { this.width = d.getWidth(); this.height = d.getHeight(); } /* (Overrides) * @see com.shavenpuppy.jglib.ReadableDimension#getSize(com.shavenpuppy.jglib.Dimension) */ public void getSize(WritableDimension dest) { dest.setSize(this); } /** * Checks whether two dimension objects have equal values. */ public boolean equals(Object obj) { if (obj instanceof ReadableDimension) { ReadableDimension d = (ReadableDimension) obj; return (width == d.getWidth()) && (height == d.getHeight()); } return false; } /** * Returns the hash code for this <code>Dimension</code>. * * @return a hash code for this <code>Dimension</code> */ public int hashCode() { int sum = width + height; return sum * (sum + 1) / 2 + width; } /** * Returns a string representation of the values of this * <code>Dimension</code> object's <code>height</code> and * <code>width</code> fields. This method is intended to be used only * for debugging purposes, and the content and format of the returned * string may vary between implementations. The returned string may be * empty but may not be <code>null</code>. * * @return a string representation of this <code>Dimension</code> * object */ public String toString() { return getClass().getName() + "[width=" + width + ",height=" + height + "]"; } /** * Gets the height. * @return Returns a int */ public int getHeight() { return height; } /** * Sets the height. * @param height The height to set */ public void setHeight(int height) { this.height = height; } /** * Gets the width. * @return Returns a int */ public int getWidth() { return width; } /** * Sets the width. * @param width The width to set */ public void setWidth(int width) { this.width = width; } } --- NEW FILE: ReadableDimension.java --- /* * Copyright (c) 2003 Shaven Puppy Ltd * 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 'Shaven Puppy' 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; /** * $Id: ReadableDimension.java,v 1.1 2004/04/21 18:11:00 cix_foo Exp $ * Readonly interface for Dimensions * @author $Author: cix_foo $ * @version $Revision: 1.1 $ */ public interface ReadableDimension { /** * Get the width * @return int */ public int getWidth(); /** * Get the height * @return int */ public int getHeight(); /** * Copy this ReadableDimension into a destination Dimension * @param dest The destination */ public void getSize(WritableDimension dest); } --- NEW FILE: WritableColor.java --- /* * Copyright (c) 2003 Shaven Puppy Ltd * 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 'Shaven Puppy' 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; import java.nio.ByteBuffer; /** * $Id: WritableColor.java,v 1.1 2004/04/21 18:11:00 cix_foo Exp $ * Write interface for Colors * @author $Author: cix_foo $ * @version $Revision: 1.1 $ */ public interface WritableColor { /** * Set a color */ public void set(int r, int g, int b, int a); /** * Set a color */ public void set(byte r, byte g, byte b, byte a); /** * Set a color */ public void set(int r, int g, int b); /** * Set a color */ public void set(byte r, byte g, byte b); /** * Set the Red component */ public void setRed(int red); /** * Set the Green component */ public void setGreen(int green); /** * Set the Blue component */ public void setBlue(int blue); /** * Set the Alpha component */ public void setAlpha(int alpha); /** * Set the Red component */ public void setRed(byte red); /** * Set the Green component */ public void setGreen(byte green); /** * Set the Blue component */ public void setBlue(byte blue); /** * Set the Alpha component */ public void setAlpha(byte alpha); /** * Read a color from a byte buffer * @param src The source buffer */ public void readRGBA(ByteBuffer src); /** * Read a color from a byte buffer * @param src The source buffer */ public void readRGB(ByteBuffer src); /** * Read a color from a byte buffer * @param src The source buffer */ public void readARGB(ByteBuffer src); /** * Read a color from a byte buffer * @param src The source buffer */ public void readBGRA(ByteBuffer src); /** * Read a color from a byte buffer * @param src The source buffer */ public void readBGR(ByteBuffer src); /** * Read a color from a byte buffer * @param src The source buffer */ public void readABGR(ByteBuffer src); /** * Set this color's color by copying another color * @param src The source color */ public void setColor(ReadableColor src); } --- NEW FILE: ReadableColor.java --- /* * Copyright (c) 2003 Shaven Puppy Ltd * 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 'Shaven Puppy' 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; import java.nio.ByteBuffer; /** * $Id: ReadableColor.java,v 1.1 2004/04/21 18:10:59 cix_foo Exp $ * Readonly interface for Colors * @author $Author: cix_foo $ * @version $Revision: 1.1 $ */ public interface ReadableColor { /** * Return the red component (0..255) * @return int */ public int getRed(); ... [truncated message content] |
|
From: Caspian Rychlik-P. <ci...@us...> - 2004-04-21 18:11:16
|
Update of /cvsroot/java-game-lib/LWJGL/src/java/org/lwjgl/util/model/loader In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11765/src/java/org/lwjgl/util/model/loader Modified Files: Loader.java Log Message: Tons more utils! Index: Loader.java =================================================================== RCS file: /cvsroot/java-game-lib/LWJGL/src/java/org/lwjgl/util/model/loader/Loader.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- Loader.java 20 Apr 2004 21:02:40 -0000 1.4 +++ Loader.java 21 Apr 2004 18:11:00 -0000 1.5 @@ -36,6 +36,7 @@ import java.util.List; import java.util.Map; +import org.lwjgl.util.Color; import org.lwjgl.util.model.*; import org.lwjgl.util.model.BoneFrame; import org.lwjgl.util.model.BonedModel; @@ -92,6 +93,7 @@ material, loadTriangles(), loadSkin(), + loadColor(), loadBoneAnimations(), loadBonedVertices() ); @@ -101,6 +103,7 @@ material, loadTriangles(), loadSkin(), + loadColor(), loadMeshAnimations() ); } else { @@ -150,6 +153,28 @@ } /** + * Load the colour + * @return Color[] + * @throws Exception + */ + private Color[] loadColor() throws Exception { + List colorElements = XMLUtil.getChildren(src.getDocumentElement(), "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 @@ -318,6 +343,21 @@ } /** + * 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, "r"), + XMLUtil.getInt(element, "g"), + XMLUtil.getInt(element, "b"), + XMLUtil.getInt(element, "a", 255) + ); + } + + /** * Load a boned Animation from XML * @param element * @return BoneFrame[] |
|
From: Elias N. <eli...@us...> - 2004-04-21 08:32:45
|
Update of /cvsroot/java-game-lib/LWJGL In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9458 Modified Files: build.xml Log Message: Removed lwjgl_util.jar again, it is included in lwjgl.jar Index: build.xml =================================================================== RCS file: /cvsroot/java-game-lib/LWJGL/build.xml,v retrieving revision 1.19 retrieving revision 1.20 diff -u -d -r1.19 -r1.20 --- build.xml 21 Apr 2004 08:02:41 -0000 1.19 +++ build.xml 21 Apr 2004 08:32:19 -0000 1.20 @@ -31,12 +31,6 @@ <include name="org/lwjgl/test/**"/> </fileset> - <!-- Files to include in the lwjgl_util.jar file --> - <fileset id="lwjgl_util.fileset" dir="${lwjgl.bin}"> - <exclude name="**.*"/> - <include name="org/lwjgl/util/**"/> - </fileset> - <!-- Files to make Javadoc from --> <fileset id="lwjgl.javadoc.fileset" dir="${lwjgl.src}/java"> <include name="**/*.java" /> @@ -216,11 +210,6 @@ <jar destfile="${lwjgl.lib}/lwjgl_test.jar" taskname="lwjgl_test.jar"> <fileset refid="lwjgl_test.fileset"/> </jar> - - <!-- Create lwjgl_util.jar --> - <jar destfile="${lwjgl.lib}/lwjgl_util.jar" taskname="lwjgl_util.jar"> - <fileset refid="lwjgl_util.fileset"/> - </jar> </target> <!-- Creates the Javadoc --> |
|
From: Elias N. <eli...@us...> - 2004-04-21 08:03:08
|
Update of /cvsroot/java-game-lib/LWJGL In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4983 Modified Files: build.xml Log Message: Added lwjgl_util.jar to build.xml Index: build.xml =================================================================== RCS file: /cvsroot/java-game-lib/LWJGL/build.xml,v retrieving revision 1.18 retrieving revision 1.19 diff -u -d -r1.18 -r1.19 --- build.xml 13 Apr 2004 20:08:05 -0000 1.18 +++ build.xml 21 Apr 2004 08:02:41 -0000 1.19 @@ -31,6 +31,12 @@ <include name="org/lwjgl/test/**"/> </fileset> + <!-- Files to include in the lwjgl_util.jar file --> + <fileset id="lwjgl_util.fileset" dir="${lwjgl.bin}"> + <exclude name="**.*"/> + <include name="org/lwjgl/util/**"/> + </fileset> + <!-- Files to make Javadoc from --> <fileset id="lwjgl.javadoc.fileset" dir="${lwjgl.src}/java"> <include name="**/*.java" /> @@ -149,6 +155,7 @@ <javac srcdir="${lwjgl.src}/java/" destdir="${lwjgl.bin}" includes="org/lwjgl/opengl/**" source="1.4" taskname="opengl"/> <javac srcdir="${lwjgl.src}/java/" destdir="${lwjgl.bin}" includes="org/lwjgl/vector/**" source="1.4" taskname="vector"/> <javac srcdir="${lwjgl.src}/java/" destdir="${lwjgl.bin}" includes="org/lwjgl/test/**" source="1.4" taskname="test"/> + <javac srcdir="${lwjgl.src}/java/" destdir="${lwjgl.bin}" includes="org/lwjgl/util/**" source="1.4" taskname="util"/> </target> <!-- Compiles the native files --> @@ -209,6 +216,11 @@ <jar destfile="${lwjgl.lib}/lwjgl_test.jar" taskname="lwjgl_test.jar"> <fileset refid="lwjgl_test.fileset"/> </jar> + + <!-- Create lwjgl_util.jar --> + <jar destfile="${lwjgl.lib}/lwjgl_util.jar" taskname="lwjgl_util.jar"> + <fileset refid="lwjgl_util.fileset"/> + </jar> </target> <!-- Creates the Javadoc --> |