159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta/*
259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Copyright (c) 2009-2012 jMonkeyEngine
359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * All rights reserved.
459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta *
559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Redistribution and use in source and binary forms, with or without
659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * modification, are permitted provided that the following conditions are
759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * met:
859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta *
959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * * Redistributions of source code must retain the above copyright
1059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta *   notice, this list of conditions and the following disclaimer.
1159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta *
1259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * * Redistributions in binary form must reproduce the above copyright
1359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta *   notice, this list of conditions and the following disclaimer in the
1459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta *   documentation and/or other materials provided with the distribution.
1559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta *
1659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * * Neither the name of 'jMonkeyEngine' nor the names of its contributors
1759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta *   may be used to endorse or promote products derived from this software
1859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta *   without specific prior written permission.
1959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta *
2059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
2159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
2259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
2359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
2459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
2559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
2659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
2759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
2859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
2959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
3059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */
3259b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartapackage com.jme3.asset;
3359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
3459b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.bounding.BoundingVolume;
3559b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.collision.Collidable;
3659b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.collision.CollisionResults;
3759b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.collision.UnsupportedCollisionException;
3859b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.export.InputCapsule;
3959b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.export.JmeExporter;
4059b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.export.JmeImporter;
4159b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.export.OutputCapsule;
4259b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.light.AmbientLight;
4359b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.light.Light;
4459b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.material.Material;
4559b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.material.RenderState.FaceCullMode;
4659b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.renderer.Camera;
4759b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.scene.Node;
4859b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.scene.SceneGraphVisitor;
4959b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.scene.Spatial;
5059b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.scene.plugins.ogre.AnimData;
5159b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.texture.Texture;
5259b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.io.IOException;
5359b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.util.ArrayList;
5459b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.util.List;
5559b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.util.Queue;
5659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
5759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta/**
5859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Blender key. Contains path of the blender file and its loading properties.
5959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @author Marcin Roguski (Kaelthas)
6059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */
6159b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartapublic class BlenderKey extends ModelKey {
6259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
6359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	protected static final int					DEFAULT_FPS				= 25;
6459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/**
6559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * FramesPerSecond parameter describe how many frames there are in each second. It allows to calculate the time
6659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * between the frames.
6759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 */
6859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	protected int								fps						= DEFAULT_FPS;
6959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/** Width of generated textures (in pixels). */
7059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	protected int								generatedTextureWidth	= 60;
7159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/** Height of generated textures (in pixels). */
7259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	protected int								generatedTextureHeight	= 60;
7359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/** Depth of generated textures (in pixels). */
7459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	protected int								generatedTextureDepth	= 60;
7559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/**
7659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * This variable is a bitwise flag of FeatureToLoad interface values; By default everything is being loaded.
7759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 */
7859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	protected int								featuresToLoad			= FeaturesToLoad.ALL;
7959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/** This variable determines if assets that are not linked to the objects should be loaded. */
8059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	protected boolean							loadUnlinkedAssets;
8159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/** The root path for all the assets. */
8259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	protected String							assetRootPath;
8359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/** This variable indicate if Y axis is UP axis. If not then Z is up. By default set to true. */
8459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	protected boolean							fixUpAxis				= true;
8559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/**
8659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * The name of world settings that the importer will use. If not set or specified name does not occur in the file
8759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * then the first world settings in the file will be used.
8859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 */
8959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	protected String							usedWorld;
9059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/**
9159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * User's default material that is set fo objects that have no material definition in blender. The default value is
9259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * null. If the value is null the importer will use its own default material (gray color - like in blender).
9359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 */
9459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	protected Material							defaultMaterial;
9559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/** Face cull mode. By default it is disabled. */
9659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	protected FaceCullMode						faceCullMode			= FaceCullMode.Off;
9759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/**
9859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * Variable describes which layers will be loaded. N-th bit set means N-th layer will be loaded.
9959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * If set to -1 then the current layer will be loaded.
10059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 */
10159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	protected int								layersToLoad			= -1;
10259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
10359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/**
10459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * Constructor used by serialization mechanisms.
10559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 */
10659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	public BlenderKey() {}
10759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
10859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/**
10959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * Constructor. Creates a key for the given file name.
11059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * @param name
11159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 *        the name (path) of a file
11259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 */
11359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	public BlenderKey(String name) {
11459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		super(name);
11559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	}
11659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
11759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/**
11859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * This method returns frames per second amount. The default value is BlenderKey.DEFAULT_FPS = 25.
11959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * @return the frames per second amount
12059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 */
12159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	public int getFps() {
12259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		return fps;
12359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	}
12459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
12559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/**
12659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * This method sets frames per second amount.
12759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * @param fps
12859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 *        the frames per second amount
12959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 */
13059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	public void setFps(int fps) {
13159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		this.fps = fps;
13259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	}
13359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
13459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/**
13559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * This method sets the width of generated texture (in pixels). By default the value is 140 px.
13659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * @param generatedTextureWidth
13759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 *        the width of generated texture
13859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 */
13959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	public void setGeneratedTextureWidth(int generatedTextureWidth) {
14059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		this.generatedTextureWidth = generatedTextureWidth;
14159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	}
14259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
14359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/**
14459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * This method returns the width of generated texture (in pixels). By default the value is 140 px.
14559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * @return the width of generated texture
14659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 */
14759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	public int getGeneratedTextureWidth() {
14859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		return generatedTextureWidth;
14959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	}
15059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
15159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/**
15259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * This method sets the height of generated texture (in pixels). By default the value is 20 px.
15359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * @param generatedTextureHeight
15459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 *        the height of generated texture
15559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 */
15659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	public void setGeneratedTextureHeight(int generatedTextureHeight) {
15759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		this.generatedTextureHeight = generatedTextureHeight;
15859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	}
15959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
16059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/**
16159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * This method returns the height of generated texture (in pixels). By default the value is 20 px.
16259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * @return the height of generated texture
16359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 */
16459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	public int getGeneratedTextureHeight() {
16559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		return generatedTextureHeight;
16659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	}
16759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
16859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/**
16959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * This method sets the depth of generated texture (in pixels). By default the value is 20 px.
17059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * @param generatedTextureDepth
17159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 *        the depth of generated texture
17259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 */
17359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	public void setGeneratedTextureDepth(int generatedTextureDepth) {
17459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		this.generatedTextureDepth = generatedTextureDepth;
17559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	}
17659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
17759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/**
17859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * This method returns the depth of generated texture (in pixels). By default the value is 20 px.
17959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * @return the depth of generated texture
18059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 */
18159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	public int getGeneratedTextureDepth() {
18259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		return generatedTextureDepth;
18359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	}
18459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
18559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/**
18659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * This method returns the face cull mode.
18759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * @return the face cull mode
18859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 */
18959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	public FaceCullMode getFaceCullMode() {
19059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		return faceCullMode;
19159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	}
19259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
19359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/**
19459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * This method sets the face cull mode.
19559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * @param faceCullMode
19659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 *        the face cull mode
19759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 */
19859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	public void setFaceCullMode(FaceCullMode faceCullMode) {
19959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		this.faceCullMode = faceCullMode;
20059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	}
20159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
20259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/**
20359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * This method sets layers to be loaded.
20459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * @param layersToLoad
20559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 *        layers to be loaded
20659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 */
20759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	public void setLayersToLoad(int layersToLoad) {
20859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		this.layersToLoad = layersToLoad;
20959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	}
21059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
21159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/**
21259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * This method returns layers to be loaded.
21359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * @return layers to be loaded
21459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 */
21559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	public int getLayersToLoad() {
21659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		return layersToLoad;
21759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	}
21859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
21959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/**
22059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * This method sets the asset root path.
22159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * @param assetRootPath
22259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 *        the assets root path
22359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 */
22459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	public void setAssetRootPath(String assetRootPath) {
22559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		this.assetRootPath = assetRootPath;
22659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	}
22759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
22859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/**
22959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * This method returns the asset root path.
23059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * @return the asset root path
23159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 */
23259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	public String getAssetRootPath() {
23359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		return assetRootPath;
23459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	}
23559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
23659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/**
23759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * This method adds features to be loaded.
23859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * @param featuresToLoad
23959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 *        bitwise flag of FeaturesToLoad interface values
24059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 */
24159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	public void includeInLoading(int featuresToLoad) {
24259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		this.featuresToLoad |= featuresToLoad;
24359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	}
24459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
24559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/**
24659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * This method removes features from being loaded.
24759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * @param featuresNotToLoad
24859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 *        bitwise flag of FeaturesToLoad interface values
24959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 */
25059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	public void excludeFromLoading(int featuresNotToLoad) {
25159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		this.featuresToLoad &= ~featuresNotToLoad;
25259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	}
25359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
25459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/**
25559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * This method returns bitwise value of FeaturesToLoad interface value. It describes features that will be loaded by
25659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * the blender file loader.
25759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * @return features that will be loaded by the blender file loader
25859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 */
25959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	public int getFeaturesToLoad() {
26059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		return featuresToLoad;
26159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	}
26259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
26359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/**
26459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * This method determines if unlinked assets should be loaded.
26559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * If not then only objects on selected layers will be loaded and their assets if required.
26659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * If yes then all assets will be loaded even if they are on inactive layers or are not linked
26759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * to anything.
26859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * @return <b>true</b> if unlinked assets should be loaded and <b>false</b> otherwise
26959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 */
27059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	public boolean isLoadUnlinkedAssets() {
27159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		return loadUnlinkedAssets;
27259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	}
27359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
27459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/**
27559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * This method sets if unlinked assets should be loaded.
27659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * If not then only objects on selected layers will be loaded and their assets if required.
27759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * If yes then all assets will be loaded even if they are on inactive layers or are not linked
27859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * to anything.
27959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * @param loadUnlinkedAssets
28059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 *        <b>true</b> if unlinked assets should be loaded and <b>false</b> otherwise
28159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 */
28259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	public void setLoadUnlinkedAssets(boolean loadUnlinkedAssets) {
28359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		this.loadUnlinkedAssets = loadUnlinkedAssets;
28459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	}
28559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
28659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/**
28759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * This method creates an object where loading results will be stores. Only those features will be allowed to store
28859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * that were specified by features-to-load flag.
28959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * @return an object to store loading results
29059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 */
29159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	public LoadingResults prepareLoadingResults() {
29259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		return new LoadingResults(featuresToLoad);
29359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	}
29459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
29559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/**
29659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * This method sets the fix up axis state. If set to true then Y is up axis. Otherwise the up i Z axis. By default Y
29759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * is up axis.
29859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * @param fixUpAxis
29959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 *        the up axis state variable
30059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 */
30159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	public void setFixUpAxis(boolean fixUpAxis) {
30259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		this.fixUpAxis = fixUpAxis;
30359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	}
30459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
30559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/**
30659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * This method returns the fix up axis state. If set to true then Y is up axis. Otherwise the up i Z axis. By
30759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * default Y is up axis.
30859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * @return the up axis state variable
30959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 */
31059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	public boolean isFixUpAxis() {
31159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		return fixUpAxis;
31259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	}
31359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
31459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/**
31559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * This mehtod sets the name of the WORLD data block taht should be used during file loading. By default the name is
31659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * not set. If no name is set or the given name does not occur in the file - the first WORLD data block will be used
31759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * during loading (assumin any exists in the file).
31859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * @param usedWorld
31959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 *        the name of the WORLD block used during loading
32059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 */
32159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	public void setUsedWorld(String usedWorld) {
32259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		this.usedWorld = usedWorld;
32359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	}
32459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
32559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/**
32659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * This mehtod returns the name of the WORLD data block taht should be used during file loading.
32759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * @return the name of the WORLD block used during loading
32859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 */
32959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	public String getUsedWorld() {
33059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		return usedWorld;
33159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	}
33259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
33359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/**
33459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * This method sets the default material for objects.
33559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * @param defaultMaterial
33659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 *        the default material
33759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 */
33859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	public void setDefaultMaterial(Material defaultMaterial) {
33959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		this.defaultMaterial = defaultMaterial;
34059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	}
34159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
34259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/**
34359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * This method returns the default material.
34459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * @return the default material
34559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 */
34659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	public Material getDefaultMaterial() {
34759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		return defaultMaterial;
34859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	}
34959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
35059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	@Override
35159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	public void write(JmeExporter e) throws IOException {
35259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		super.write(e);
35359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		OutputCapsule oc = e.getCapsule(this);
35459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		oc.write(fps, "fps", DEFAULT_FPS);
35559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		oc.write(generatedTextureWidth, "generated-texture-width", 20);
35659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		oc.write(generatedTextureHeight, "generated-texture-height", 20);
35759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		oc.write(generatedTextureDepth, "generated-texture-depth", 20);
35859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		oc.write(featuresToLoad, "features-to-load", FeaturesToLoad.ALL);
35959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		oc.write(loadUnlinkedAssets, "load-unlinked-assets", false);
36059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		oc.write(assetRootPath, "asset-root-path", null);
36159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		oc.write(fixUpAxis, "fix-up-axis", true);
36259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		oc.write(usedWorld, "used-world", null);
36359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		oc.write(defaultMaterial, "default-material", null);
36459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		oc.write(faceCullMode, "face-cull-mode", FaceCullMode.Off);
36559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		oc.write(layersToLoad, "layers-to-load", -1);
36659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	}
36759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
36859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	@Override
36959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	public void read(JmeImporter e) throws IOException {
37059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		super.read(e);
37159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		InputCapsule ic = e.getCapsule(this);
37259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		fps = ic.readInt("fps", DEFAULT_FPS);
37359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		generatedTextureWidth = ic.readInt("generated-texture-width", 20);
37459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		generatedTextureHeight = ic.readInt("generated-texture-height", 20);
37559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		generatedTextureDepth = ic.readInt("generated-texture-depth", 20);
37659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		featuresToLoad = ic.readInt("features-to-load", FeaturesToLoad.ALL);
37759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		loadUnlinkedAssets = ic.readBoolean("load-unlinked-assets", false);
37859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		assetRootPath = ic.readString("asset-root-path", null);
37959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		fixUpAxis = ic.readBoolean("fix-up-axis", true);
38059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		usedWorld = ic.readString("used-world", null);
38159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		defaultMaterial = (Material) ic.readSavable("default-material", null);
38259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		faceCullMode = ic.readEnum("face-cull-mode", FaceCullMode.class, FaceCullMode.Off);
38359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		layersToLoad = ic.readInt("layers-to=load", -1);
38459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	}
38559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
38659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	@Override
38759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	public int hashCode() {
38859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		final int prime = 31;
38959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		int result = super.hashCode();
39059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		result = prime * result + (assetRootPath == null ? 0 : assetRootPath.hashCode());
39159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		result = prime * result + (defaultMaterial == null ? 0 : defaultMaterial.hashCode());
39259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		result = prime * result + (faceCullMode == null ? 0 : faceCullMode.hashCode());
39359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		result = prime * result + featuresToLoad;
39459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		result = prime * result + (fixUpAxis ? 1231 : 1237);
39559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		result = prime * result + fps;
39659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		result = prime * result + generatedTextureDepth;
39759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		result = prime * result + generatedTextureHeight;
39859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		result = prime * result + generatedTextureWidth;
39959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		result = prime * result + layersToLoad;
40059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		result = prime * result + (loadUnlinkedAssets ? 1231 : 1237);
40159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		result = prime * result + (usedWorld == null ? 0 : usedWorld.hashCode());
40259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		return result;
40359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	}
40459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
40559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	@Override
40659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	public boolean equals(Object obj) {
40759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		if (this == obj) {
40859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			return true;
40959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		}
41059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		if (!super.equals(obj)) {
41159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			return false;
41259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		}
41359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		if (this.getClass() != obj.getClass()) {
41459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			return false;
41559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		}
41659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		BlenderKey other = (BlenderKey) obj;
41759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		if (assetRootPath == null) {
41859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			if (other.assetRootPath != null) {
41959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta				return false;
42059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			}
42159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		} else if (!assetRootPath.equals(other.assetRootPath)) {
42259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			return false;
42359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		}
42459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		if (defaultMaterial == null) {
42559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			if (other.defaultMaterial != null) {
42659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta				return false;
42759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			}
42859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		} else if (!defaultMaterial.equals(other.defaultMaterial)) {
42959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			return false;
43059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		}
43159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		if (faceCullMode != other.faceCullMode) {
43259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			return false;
43359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		}
43459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		if (featuresToLoad != other.featuresToLoad) {
43559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			return false;
43659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		}
43759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		if (fixUpAxis != other.fixUpAxis) {
43859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			return false;
43959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		}
44059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		if (fps != other.fps) {
44159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			return false;
44259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		}
44359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		if (generatedTextureDepth != other.generatedTextureDepth) {
44459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			return false;
44559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		}
44659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		if (generatedTextureHeight != other.generatedTextureHeight) {
44759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			return false;
44859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		}
44959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		if (generatedTextureWidth != other.generatedTextureWidth) {
45059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			return false;
45159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		}
45259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		if (layersToLoad != other.layersToLoad) {
45359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			return false;
45459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		}
45559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		if (loadUnlinkedAssets != other.loadUnlinkedAssets) {
45659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			return false;
45759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		}
45859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		if (usedWorld == null) {
45959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			if (other.usedWorld != null) {
46059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta				return false;
46159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			}
46259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		} else if (!usedWorld.equals(other.usedWorld)) {
46359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			return false;
46459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		}
46559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		return true;
46659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	}
46759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
46859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/**
46959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * This interface describes the features of the scene that are to be loaded.
47059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * @author Marcin Roguski (Kaelthas)
47159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 */
47259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	public static interface FeaturesToLoad {
47359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
47459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		int	SCENES		= 0x0000FFFF;
47559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		int	OBJECTS		= 0x0000000B;
47659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		int	ANIMATIONS	= 0x00000004;
47759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		int	MATERIALS	= 0x00000003;
47859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		int	TEXTURES	= 0x00000001;
47959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		int	CAMERAS		= 0x00000020;
48059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		int	LIGHTS		= 0x00000010;
48159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		int	ALL			= 0xFFFFFFFF;
48259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	}
48359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
48459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/**
48559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * This class holds the loading results according to the given loading flag.
48659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * @author Marcin Roguski (Kaelthas)
48759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 */
48859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	public static class LoadingResults extends Spatial {
48959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
49059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		/** Bitwise mask of features that are to be loaded. */
49159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		private final int		featuresToLoad;
49259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		/** The scenes from the file. */
49359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		private List<Node>		scenes;
49459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		/** Objects from all scenes. */
49559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		private List<Node>		objects;
49659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		/** Materials from all objects. */
49759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		private List<Material>	materials;
49859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		/** Textures from all objects. */
49959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		private List<Texture>	textures;
50059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		/** Animations of all objects. */
50159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		private List<AnimData>	animations;
50259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		/** All cameras from the file. */
50359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		private List<Camera>	cameras;
50459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		/** All lights from the file. */
50559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		private List<Light>		lights;
50659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
50759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		/**
50859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 * Private constructor prevents users to create an instance of this class from outside the
50959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 * @param featuresToLoad
51059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 *        bitwise mask of features that are to be loaded
51159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 * @see FeaturesToLoad FeaturesToLoad
51259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 */
51359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		private LoadingResults(int featuresToLoad) {
51459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			this.featuresToLoad = featuresToLoad;
51559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			if ((featuresToLoad & FeaturesToLoad.SCENES) != 0) {
51659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta				scenes = new ArrayList<Node>();
51759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			}
51859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			if ((featuresToLoad & FeaturesToLoad.OBJECTS) != 0) {
51959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta				objects = new ArrayList<Node>();
52059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta				if ((featuresToLoad & FeaturesToLoad.MATERIALS) != 0) {
52159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta					materials = new ArrayList<Material>();
52259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta					if ((featuresToLoad & FeaturesToLoad.TEXTURES) != 0) {
52359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta						textures = new ArrayList<Texture>();
52459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta					}
52559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta				}
52659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta				if ((featuresToLoad & FeaturesToLoad.ANIMATIONS) != 0) {
52759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta					animations = new ArrayList<AnimData>();
52859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta				}
52959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			}
53059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			if ((featuresToLoad & FeaturesToLoad.CAMERAS) != 0) {
53159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta				cameras = new ArrayList<Camera>();
53259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			}
53359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			if ((featuresToLoad & FeaturesToLoad.LIGHTS) != 0) {
53459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta				lights = new ArrayList<Light>();
53559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			}
53659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		}
53759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
53859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		/**
53959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 * This method returns a bitwise flag describing what features of the blend file will be included in the result.
54059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 * @return bitwise mask of features that are to be loaded
54159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 * @see FeaturesToLoad FeaturesToLoad
54259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 */
54359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		public int getLoadedFeatures() {
54459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			return featuresToLoad;
54559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		}
54659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
54759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		/**
54859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 * This method adds a scene to the result set.
54959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 * @param scene
55059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 *        scene to be added to the result set
55159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 */
55259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		public void addScene(Node scene) {
55359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			if (scenes != null) {
55459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta				scenes.add(scene);
55559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			}
55659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		}
55759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
55859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		/**
55959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 * This method adds an object to the result set.
56059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 * @param object
56159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 *        object to be added to the result set
56259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 */
56359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		public void addObject(Node object) {
56459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			if (objects != null) {
56559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta				objects.add(object);
56659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			}
56759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		}
56859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
56959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		/**
57059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 * This method adds a material to the result set.
57159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 * @param material
57259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 *        material to be added to the result set
57359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 */
57459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		public void addMaterial(Material material) {
57559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			if (materials != null) {
57659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta				materials.add(material);
57759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			}
57859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		}
57959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
58059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		/**
58159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 * This method adds a texture to the result set.
58259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 * @param texture
58359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 *        texture to be added to the result set
58459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 */
58559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		public void addTexture(Texture texture) {
58659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			if (textures != null) {
58759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta				textures.add(texture);
58859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			}
58959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		}
59059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
59159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		/**
59259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 * This method adds a camera to the result set.
59359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 * @param camera
59459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 *        camera to be added to the result set
59559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 */
59659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		public void addCamera(Camera camera) {
59759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			if (cameras != null) {
59859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta				cameras.add(camera);
59959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			}
60059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		}
60159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
60259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		/**
60359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 * This method adds a light to the result set.
60459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 * @param light
60559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 *        light to be added to the result set
60659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 */
60759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		@Override
60859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		public void addLight(Light light) {
60959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			if (lights != null) {
61059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta				lights.add(light);
61159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			}
61259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		}
61359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
61459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		/**
61559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 * This method returns all loaded scenes.
61659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 * @return all loaded scenes
61759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 */
61859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		public List<Node> getScenes() {
61959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			return scenes;
62059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		}
62159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
62259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		/**
62359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 * This method returns all loaded objects.
62459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 * @return all loaded objects
62559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 */
62659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		public List<Node> getObjects() {
62759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			return objects;
62859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		}
62959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
63059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		/**
63159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 * This method returns all loaded materials.
63259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 * @return all loaded materials
63359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 */
63459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		public List<Material> getMaterials() {
63559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			return materials;
63659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		}
63759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
63859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		/**
63959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 * This method returns all loaded textures.
64059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 * @return all loaded textures
64159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 */
64259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		public List<Texture> getTextures() {
64359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			return textures;
64459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		}
64559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
64659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		/**
64759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 * This method returns all loaded animations.
64859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 * @return all loaded animations
64959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 */
65059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		public List<AnimData> getAnimations() {
65159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			return animations;
65259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		}
65359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
65459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		/**
65559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 * This method returns all loaded cameras.
65659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 * @return all loaded cameras
65759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 */
65859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		public List<Camera> getCameras() {
65959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			return cameras;
66059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		}
66159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
66259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		/**
66359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 * This method returns all loaded lights.
66459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 * @return all loaded lights
66559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 */
66659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		public List<Light> getLights() {
66759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			return lights;
66859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		}
66959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
67059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		@Override
67159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		public int collideWith(Collidable other, CollisionResults results) throws UnsupportedCollisionException {
67259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			return 0;
67359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		}
67459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
67559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		@Override
67659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		public void updateModelBound() {}
67759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
67859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		@Override
67959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		public void setModelBound(BoundingVolume modelBound) {}
68059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
68159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		@Override
68259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		public int getVertexCount() {
68359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			return 0;
68459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		}
68559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
68659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		@Override
68759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		public int getTriangleCount() {
68859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			return 0;
68959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		}
69059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
69159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		@Override
69259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		public Spatial deepClone() {
69359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			return null;
69459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		}
69559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
69659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		@Override
69759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		public void depthFirstTraversal(SceneGraphVisitor visitor) {}
69859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
69959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		@Override
70059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		protected void breadthFirstTraversal(SceneGraphVisitor visitor, Queue<Spatial> queue) {}
70159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	}
70259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
70359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	/**
70459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * The WORLD file block contains various data that could be added to the scene. The contained data includes: ambient
70559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * light.
70659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 * @author Marcin Roguski (Kaelthas)
70759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	 */
70859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	public static class WorldData {
70959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
71059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		/** The ambient light. */
71159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		private AmbientLight	ambientLight;
71259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
71359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		/**
71459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 * This method returns the world's ambient light.
71559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 * @return the world's ambient light
71659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 */
71759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		public AmbientLight getAmbientLight() {
71859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			return ambientLight;
71959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		}
72059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
72159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		/**
72259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 * This method sets the world's ambient light.
72359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 * @param ambientLight
72459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 *        the world's ambient light
72559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		 */
72659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		public void setAmbientLight(AmbientLight ambientLight) {
72759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta			this.ambientLight = ambientLight;
72859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta		}
72959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta	}
73059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta}
731