* AnimControl now supports abstract animation (doesn't have to be BoneAnimation)
* Misc javadocs * Fix for SoundHandleJme.stop() git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@7988 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
This commit is contained in:
parent
6432543395
commit
984721cc75
engine/src
blender/com/jme3/scene/plugins/blender/modifiers
core/com/jme3
animation
app
export
font
scene
niftygui/com/jme3/niftygui
ogre/com/jme3/scene/plugins/ogre
test/jme3test
@ -7,6 +7,7 @@ import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
|
||||
import com.jme3.animation.AnimControl;
|
||||
import com.jme3.animation.Animation;
|
||||
import com.jme3.animation.Bone;
|
||||
import com.jme3.animation.BoneAnimation;
|
||||
import com.jme3.animation.BoneTrack;
|
||||
@ -86,7 +87,7 @@ import com.jme3.scene.plugins.ogre.AnimData;
|
||||
String objectName = objectStructure.getName();
|
||||
Set<String> animationNames = dataRepository.getBlenderKey().getAnimationNames(objectName);
|
||||
if (animationNames != null && animationNames.size() > 0) {
|
||||
ArrayList<BoneAnimation> animations = new ArrayList<BoneAnimation>();
|
||||
ArrayList<Animation> animations = new ArrayList<Animation>();
|
||||
List<FileBlockHeader> actionHeaders = dataRepository.getFileBlocks(Integer.valueOf(FileBlockHeader.BLOCK_AC00));
|
||||
for (FileBlockHeader header : actionHeaders) {
|
||||
Structure actionStructure = header.getStructure(dataRepository);
|
||||
@ -112,13 +113,13 @@ import com.jme3.scene.plugins.ogre.AnimData;
|
||||
return node;
|
||||
}
|
||||
AnimData ad = (AnimData) jmeModifierRepresentation;
|
||||
ArrayList<BoneAnimation> animList = ad.anims;
|
||||
ArrayList<Animation> animList = ad.anims;
|
||||
Long modifierArmatureObject = (Long) additionalData;
|
||||
if (animList != null && animList.size() > 0) {
|
||||
List<Constraint> constraints = dataRepository.getConstraints(modifierArmatureObject);
|
||||
HashMap<String, BoneAnimation> anims = new HashMap<String, BoneAnimation>();
|
||||
HashMap<String, Animation> anims = new HashMap<String, Animation>();
|
||||
for (int i = 0; i < animList.size(); ++i) {
|
||||
BoneAnimation boneAnimation = animList.get(i).clone();
|
||||
BoneAnimation boneAnimation = (BoneAnimation) animList.get(i).clone();
|
||||
|
||||
// baking constraints into animations
|
||||
if (constraints != null && constraints.size() > 0) {
|
||||
@ -156,13 +157,13 @@ import com.jme3.scene.plugins.ogre.AnimData;
|
||||
Skeleton skeleton = this.merge(controlSkeleton, ad.skeleton);
|
||||
|
||||
// merging animations
|
||||
HashMap<String, BoneAnimation> animations = new HashMap<String, BoneAnimation>();
|
||||
HashMap<String, Animation> animations = new HashMap<String, Animation>();
|
||||
for (String animationName : control.getAnimationNames()) {
|
||||
animations.put(animationName,
|
||||
control.getAnim(animationName));
|
||||
}
|
||||
for (Entry<String, BoneAnimation> animEntry : anims.entrySet()) {
|
||||
BoneAnimation ba = animEntry.getValue();
|
||||
for (Entry<String, Animation> animEntry : anims.entrySet()) {
|
||||
BoneAnimation ba = (BoneAnimation) animEntry.getValue();
|
||||
for (int i = 0; i < ba.getTracks().length; ++i) {
|
||||
BoneTrack bt = ba.getTracks()[i];
|
||||
int newBoneIndex = bt.getTargetBoneIndex()
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.jme3.scene.plugins.blender.modifiers;
|
||||
|
||||
import com.jme3.animation.Animation;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@ -96,7 +97,7 @@ import com.jme3.scene.plugins.ogre.AnimData;
|
||||
BoneAnimation boneAnimation = new BoneAnimation(
|
||||
objectAnimationName, stop - start);
|
||||
boneAnimation.setTracks(tracks);
|
||||
ArrayList<BoneAnimation> animations = new ArrayList<BoneAnimation>(
|
||||
ArrayList<Animation> animations = new ArrayList<Animation>(
|
||||
1);
|
||||
animations.add(boneAnimation);
|
||||
|
||||
|
@ -55,8 +55,8 @@ public final class AnimChannel {
|
||||
// private ArrayList<Integer> affectedBones;
|
||||
private BitSet affectedBones;
|
||||
|
||||
private BoneAnimation animation;
|
||||
private BoneAnimation blendFrom;
|
||||
private Animation animation;
|
||||
private Animation blendFrom;
|
||||
private float time;
|
||||
private float speed;
|
||||
private float timeBlendFrom;
|
||||
@ -64,11 +64,13 @@ public final class AnimChannel {
|
||||
|
||||
private LoopMode loopMode, loopModeBlendFrom;
|
||||
|
||||
|
||||
private float blendAmount = 1f;
|
||||
private float blendRate = 0;
|
||||
|
||||
private static float clampWrapTime(float t, float max, LoopMode loopMode){
|
||||
if (max == Float.POSITIVE_INFINITY)
|
||||
return t;
|
||||
|
||||
if (t < 0f){
|
||||
//float tMod = -(-t % max);
|
||||
switch (loopMode){
|
||||
@ -208,7 +210,7 @@ public final class AnimChannel {
|
||||
if (blendTime < 0f)
|
||||
throw new IllegalArgumentException("blendTime cannot be less than zero");
|
||||
|
||||
BoneAnimation anim = control.animationMap.get(name);
|
||||
Animation anim = control.animationMap.get(name);
|
||||
if (anim == null)
|
||||
throw new IllegalArgumentException("Cannot find animation named: '"+name+"'");
|
||||
|
||||
@ -310,9 +312,8 @@ public final class AnimChannel {
|
||||
}
|
||||
}
|
||||
|
||||
void reset(){
|
||||
animation = null;
|
||||
blendFrom = null;
|
||||
BitSet getAffectedBones(){
|
||||
return affectedBones;
|
||||
}
|
||||
|
||||
void update(float tpf) {
|
||||
@ -320,7 +321,8 @@ public final class AnimChannel {
|
||||
return;
|
||||
|
||||
if (blendFrom != null){
|
||||
blendFrom.setTime(timeBlendFrom, control.skeleton, 1f - blendAmount, affectedBones);
|
||||
blendFrom.setTime(timeBlendFrom, 1f - blendAmount, control, this);
|
||||
//blendFrom.setTime(timeBlendFrom, control.skeleton, 1f - blendAmount, affectedBones);
|
||||
timeBlendFrom += tpf * speedBlendFrom;
|
||||
timeBlendFrom = clampWrapTime(timeBlendFrom,
|
||||
blendFrom.getLength(),
|
||||
@ -337,7 +339,8 @@ public final class AnimChannel {
|
||||
}
|
||||
}
|
||||
|
||||
animation.setTime(time, control.skeleton, blendAmount, affectedBones);
|
||||
animation.setTime(time, blendAmount, control, this);
|
||||
//animation.setTime(time, control.skeleton, blendAmount, affectedBones);
|
||||
time += tpf * speed;
|
||||
|
||||
if (animation.getLength() > 0){
|
||||
|
@ -81,7 +81,7 @@ public final class AnimControl extends AbstractControl implements Cloneable {
|
||||
/**
|
||||
* List of animations
|
||||
*/
|
||||
HashMap<String, BoneAnimation> animationMap;
|
||||
HashMap<String, Animation> animationMap;
|
||||
|
||||
/**
|
||||
* Animation channels
|
||||
@ -101,8 +101,8 @@ public final class AnimControl extends AbstractControl implements Cloneable {
|
||||
* @param skeleton The skeleton to animate
|
||||
*/
|
||||
public AnimControl(Skeleton skeleton) {
|
||||
if (skeleton == null)
|
||||
throw new IllegalArgumentException("skeleton cannot be null");
|
||||
//if (skeleton == null)
|
||||
// throw new IllegalArgumentException("skeleton cannot be null");
|
||||
|
||||
this.skeleton = skeleton;
|
||||
reset();
|
||||
@ -121,10 +121,14 @@ public final class AnimControl extends AbstractControl implements Cloneable {
|
||||
try {
|
||||
AnimControl clone = (AnimControl) super.clone();
|
||||
clone.spatial = spatial;
|
||||
clone.skeleton = new Skeleton(skeleton);
|
||||
if (skeleton != null){
|
||||
clone.skeleton = new Skeleton(skeleton);
|
||||
}
|
||||
clone.channels = new ArrayList<AnimChannel>();
|
||||
|
||||
// animationMap is reference-copied, animation data should be shared
|
||||
// to reduce memory usage.
|
||||
|
||||
return clone;
|
||||
} catch (CloneNotSupportedException ex) {
|
||||
throw new AssertionError();
|
||||
@ -136,7 +140,7 @@ public final class AnimControl extends AbstractControl implements Cloneable {
|
||||
* will be capable of playing. The animations should be compatible
|
||||
* with the skeleton given in the constructor.
|
||||
*/
|
||||
public void setAnimations(HashMap<String, BoneAnimation> animations) {
|
||||
public void setAnimations(HashMap<String, Animation> animations) {
|
||||
animationMap = animations;
|
||||
}
|
||||
|
||||
@ -146,7 +150,7 @@ public final class AnimControl extends AbstractControl implements Cloneable {
|
||||
* @return The animation corresponding to the given name, or null, if no
|
||||
* such named animation exists.
|
||||
*/
|
||||
public BoneAnimation getAnim(String name) {
|
||||
public Animation getAnim(String name) {
|
||||
return animationMap.get(name);
|
||||
}
|
||||
|
||||
@ -155,7 +159,7 @@ public final class AnimControl extends AbstractControl implements Cloneable {
|
||||
* <code>AnimControl</code>.
|
||||
* @param anim The animation to add.
|
||||
*/
|
||||
public void addAnim(BoneAnimation anim) {
|
||||
public void addAnim(Animation anim) {
|
||||
animationMap.put(anim.getName(), anim);
|
||||
}
|
||||
|
||||
@ -163,7 +167,7 @@ public final class AnimControl extends AbstractControl implements Cloneable {
|
||||
* Remove an animation so that it is no longer available for playing.
|
||||
* @param anim The animation to remove.
|
||||
*/
|
||||
public void removeAnim(BoneAnimation anim) {
|
||||
public void removeAnim(Animation anim) {
|
||||
if (!animationMap.containsKey(anim.getName())) {
|
||||
throw new IllegalArgumentException("Given animation does not exist "
|
||||
+ "in this AnimControl");
|
||||
@ -305,7 +309,7 @@ public final class AnimControl extends AbstractControl implements Cloneable {
|
||||
* @return The length of time, in seconds, of the named animation.
|
||||
*/
|
||||
public float getAnimationLength(String name) {
|
||||
BoneAnimation a = animationMap.get(name);
|
||||
Animation a = animationMap.get(name);
|
||||
if (a == null) {
|
||||
throw new IllegalArgumentException("The animation " + name
|
||||
+ " does not exist in this AnimControl");
|
||||
@ -319,13 +323,17 @@ public final class AnimControl extends AbstractControl implements Cloneable {
|
||||
*/
|
||||
@Override
|
||||
protected void controlUpdate(float tpf) {
|
||||
skeleton.reset(); // reset skeleton to bind pose
|
||||
if (skeleton != null){
|
||||
skeleton.reset(); // reset skeleton to bind pose
|
||||
}
|
||||
|
||||
for (int i = 0; i < channels.size(); i++) {
|
||||
channels.get(i).update(tpf);
|
||||
}
|
||||
|
||||
skeleton.updateWorldVectors();
|
||||
if (skeleton != null){
|
||||
skeleton.updateWorldVectors();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -348,7 +356,7 @@ public final class AnimControl extends AbstractControl implements Cloneable {
|
||||
super.read(im);
|
||||
InputCapsule in = im.getCapsule(this);
|
||||
skeleton = (Skeleton) in.readSavable("skeleton", null);
|
||||
animationMap = (HashMap<String, BoneAnimation>) in.readStringSavableMap("animations", null);
|
||||
animationMap = (HashMap<String, Animation>) in.readStringSavableMap("animations", null);
|
||||
|
||||
if (im.getFormatVersion() == 0){
|
||||
//changed for backward compatibility with j3o files generated before the AnimControl/SkeletonControl split
|
||||
|
14
engine/src/core/com/jme3/animation/Animation.java
Normal file
14
engine/src/core/com/jme3/animation/Animation.java
Normal file
@ -0,0 +1,14 @@
|
||||
package com.jme3.animation;
|
||||
|
||||
import com.jme3.export.Savable;
|
||||
|
||||
public interface Animation extends Savable, Cloneable {
|
||||
|
||||
public String getName();
|
||||
|
||||
public float getLength();
|
||||
|
||||
public void setTime(float time, float blendAmount, AnimControl control, AnimChannel channel);
|
||||
|
||||
public Animation clone();
|
||||
}
|
@ -48,7 +48,7 @@ import java.util.BitSet;
|
||||
*
|
||||
* @author Kirill Vainer
|
||||
*/
|
||||
public final class BoneAnimation implements Savable, Cloneable {
|
||||
public final class BoneAnimation implements Animation, Savable, Cloneable {
|
||||
|
||||
private String name;
|
||||
private float length;
|
||||
@ -109,11 +109,14 @@ public final class BoneAnimation implements Savable, Cloneable {
|
||||
return tracks;
|
||||
}
|
||||
|
||||
void setTime(float time, Skeleton skeleton, float weight, BitSet affectedBones) {
|
||||
public void setTime(float time, float blendAmount, AnimControl control, AnimChannel channel){
|
||||
BitSet affectedBones = channel.getAffectedBones();
|
||||
Skeleton skeleton = control.getSkeleton();
|
||||
|
||||
for (int i = 0; i < tracks.length; i++) {
|
||||
if (affectedBones == null
|
||||
|| affectedBones.get(tracks[i].getTargetBoneIndex())) {
|
||||
tracks[i].setTime(time, skeleton, weight);
|
||||
tracks[i].setTime(time, skeleton, blendAmount);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -129,7 +132,7 @@ public final class BoneAnimation implements Savable, Cloneable {
|
||||
try {
|
||||
result = (BoneAnimation) super.clone();
|
||||
} catch (CloneNotSupportedException e) {
|
||||
result = new BoneAnimation(name, length);
|
||||
throw new AssertionError();
|
||||
}
|
||||
if (result.tracks == null) {
|
||||
result.tracks = new BoneTrack[tracks.length];
|
||||
|
@ -39,8 +39,10 @@ import com.jme3.export.OutputCapsule;
|
||||
import com.jme3.export.Savable;
|
||||
import com.jme3.scene.Mesh;
|
||||
import java.io.IOException;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class MeshAnimation implements Savable {
|
||||
public class MeshAnimation implements Animation, Savable {
|
||||
|
||||
private String name;
|
||||
private float length;
|
||||
@ -73,6 +75,10 @@ public class MeshAnimation implements Savable {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTime(float time, float blendAmount, AnimControl control, AnimChannel channel) {
|
||||
// TODO: ...
|
||||
}
|
||||
|
||||
public void write(JmeExporter e) throws IOException {
|
||||
OutputCapsule out = e.getCapsule(this);
|
||||
@ -89,4 +95,15 @@ public class MeshAnimation implements Savable {
|
||||
tracks = (Track[]) in.readSavableArray("tracks", null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Animation clone() {
|
||||
try {
|
||||
return (Animation) super.clone();
|
||||
} catch (CloneNotSupportedException ex) {
|
||||
throw new AssertionError();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
@ -71,7 +71,6 @@ public class AppTask<V> implements Future<V> {
|
||||
}
|
||||
|
||||
public boolean cancel(boolean mayInterruptIfRunning) {
|
||||
// TODO mayInterruptIfRunning was ignored in previous code, should this param be removed?
|
||||
stateLock.lock();
|
||||
try {
|
||||
if (result != null) {
|
||||
|
@ -1,8 +1,20 @@
|
||||
package com.jme3.export;
|
||||
|
||||
/**
|
||||
* Specifies the version of the format for jME3 object (j3o) files.
|
||||
*
|
||||
* @author Kirill Vainer
|
||||
*/
|
||||
public final class FormatVersion {
|
||||
|
||||
/**
|
||||
* Version number of the format
|
||||
*/
|
||||
public static final int VERSION = 1;
|
||||
|
||||
/**
|
||||
* Signature of the format. Currently "JME3" as ASCII
|
||||
*/
|
||||
public static final int SIGNATURE = 0x4A4D4533;
|
||||
|
||||
private FormatVersion(){
|
||||
|
@ -36,10 +36,39 @@ import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
|
||||
/**
|
||||
* <code>JmeExporter</code> specifies an export implementation for jME3
|
||||
* data.
|
||||
*/
|
||||
public interface JmeExporter {
|
||||
|
||||
/**
|
||||
* Export the {@link Savable} to an OutputStream.
|
||||
*
|
||||
* @param object The savable to export
|
||||
* @param f The output stream
|
||||
* @return Always returns true. If an error occurs during export,
|
||||
* an exception is thrown
|
||||
* @throws IOException If an io exception occurs during export
|
||||
*/
|
||||
public boolean save(Savable object, OutputStream f) throws IOException;
|
||||
|
||||
/**
|
||||
* Export the {@link Savable} to a file.
|
||||
*
|
||||
* @param object The savable to export
|
||||
* @param f The file to export to
|
||||
* @return Always returns true. If an error occurs during export,
|
||||
* an exception is thrown
|
||||
* @throws IOException If an io exception occurs during export
|
||||
*/
|
||||
public boolean save(Savable object, File f) throws IOException;
|
||||
|
||||
/**
|
||||
* Returns the {@link OutputCapsule} for the given savable object.
|
||||
*
|
||||
* @param object The object to retrieve an output capsule for.
|
||||
* @return
|
||||
*/
|
||||
public OutputCapsule getCapsule(Savable object);
|
||||
}
|
||||
|
@ -33,7 +33,6 @@
|
||||
package com.jme3.font;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
|
||||
import com.jme3.export.InputCapsule;
|
||||
import com.jme3.export.JmeExporter;
|
||||
@ -48,11 +47,49 @@ import com.jme3.material.Material;
|
||||
*/
|
||||
public class BitmapFont implements Savable {
|
||||
|
||||
/**
|
||||
* Specifies horizontal alignment for text.
|
||||
*
|
||||
* @see BitmapText#setAlignment(com.jme3.font.BitmapFont.Align)
|
||||
*/
|
||||
public enum Align {
|
||||
Left, Center, Right
|
||||
|
||||
/**
|
||||
* Align text on the left of the text block
|
||||
*/
|
||||
Left,
|
||||
|
||||
/**
|
||||
* Align text in the center of the text block
|
||||
*/
|
||||
Center,
|
||||
|
||||
/**
|
||||
* Align text on the right of the text block
|
||||
*/
|
||||
Right
|
||||
}
|
||||
|
||||
/**
|
||||
* Specifies vertical alignment for text.
|
||||
*
|
||||
* @see BitmapText#setVerticalAlignment(com.jme3.font.BitmapFont.VAlign)
|
||||
*/
|
||||
public enum VAlign {
|
||||
Top, Center, Bottom
|
||||
/**
|
||||
* Align text on the top of the text block
|
||||
*/
|
||||
Top,
|
||||
|
||||
/**
|
||||
* Align text in the center of the text block
|
||||
*/
|
||||
Center,
|
||||
|
||||
/**
|
||||
* Align text at the bottom of the text block
|
||||
*/
|
||||
Bottom
|
||||
}
|
||||
|
||||
private BitmapCharacterSet charSet;
|
||||
|
@ -1,77 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2009-2010 jMonkeyEngine
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
package com.jme3.scene.control;
|
||||
|
||||
/**
|
||||
* The type of control.
|
||||
*
|
||||
* @author Kirill Vainer.
|
||||
*/
|
||||
public enum ControlType {
|
||||
|
||||
/**
|
||||
* Manages the level of detail for the model.
|
||||
*/
|
||||
LevelOfDetail,
|
||||
|
||||
/**
|
||||
* Provides methods to manipulate the skeleton and bones.
|
||||
*/
|
||||
BoneControl,
|
||||
|
||||
/**
|
||||
* Handles the bone animation and skeleton updates.
|
||||
*/
|
||||
BoneAnimation,
|
||||
|
||||
/**
|
||||
* Handles attachments to bones
|
||||
*/
|
||||
Attachment,
|
||||
|
||||
/**
|
||||
* Handles vertex/morph animation.
|
||||
*/
|
||||
VertexAnimation,
|
||||
|
||||
/**
|
||||
* Handles poses or morph keys.
|
||||
*/
|
||||
Pose,
|
||||
|
||||
/**
|
||||
* Handles particle updates
|
||||
*/
|
||||
Particle
|
||||
|
||||
}
|
@ -3,7 +3,6 @@ package com.jme3.scene.mesh;
|
||||
import com.jme3.scene.Mesh;
|
||||
import com.jme3.scene.Mesh.Mode;
|
||||
import com.jme3.scene.VertexBuffer.Type;
|
||||
import com.jme3.util.BufferUtils;
|
||||
import java.nio.Buffer;
|
||||
import java.nio.IntBuffer;
|
||||
import java.nio.ShortBuffer;
|
||||
|
@ -50,7 +50,7 @@ public class SoundDeviceJme implements SoundDevice {
|
||||
}
|
||||
|
||||
public SoundHandle loadSound(SoundSystem soundSystem, String filename) {
|
||||
AudioNode an = new AudioNode(ar, assetManager, filename, false);
|
||||
AudioNode an = new AudioNode(assetManager, filename, false);
|
||||
an.setPositional(false);
|
||||
return new SoundHandleJme(ar, an);
|
||||
}
|
||||
|
@ -41,7 +41,6 @@ import de.lessvoid.nifty.spi.sound.SoundHandle;
|
||||
public class SoundHandleJme implements SoundHandle {
|
||||
|
||||
private AudioNode node;
|
||||
private AudioRenderer ar;
|
||||
private AssetManager am;
|
||||
private String fileName;
|
||||
private float volume = 1;
|
||||
@ -50,7 +49,6 @@ public class SoundHandleJme implements SoundHandle {
|
||||
if (ar == null || node == null)
|
||||
throw new NullPointerException();
|
||||
|
||||
this.ar = ar;
|
||||
this.node = node;
|
||||
}
|
||||
|
||||
@ -64,7 +62,6 @@ public class SoundHandleJme implements SoundHandle {
|
||||
if (ar == null || am == null)
|
||||
throw new NullPointerException();
|
||||
|
||||
this.ar = ar;
|
||||
this.am = am;
|
||||
if (fileName == null)
|
||||
throw new NullPointerException();
|
||||
@ -75,21 +72,21 @@ public class SoundHandleJme implements SoundHandle {
|
||||
public void play() {
|
||||
if (fileName != null){
|
||||
if (node != null){
|
||||
ar.stopSource(node);
|
||||
node.stop();
|
||||
}
|
||||
|
||||
node = new AudioNode(ar, am, fileName, true);
|
||||
node = new AudioNode(am, fileName, true);
|
||||
node.setPositional(false);
|
||||
node.setVolume(volume);
|
||||
ar.playSource(node);
|
||||
node.play();
|
||||
}else{
|
||||
ar.playSourceInstance(node);
|
||||
node.playInstance();
|
||||
}
|
||||
}
|
||||
|
||||
public void stop() {
|
||||
if (fileName != null){
|
||||
ar.stopSource(node);
|
||||
if (node != null){
|
||||
node.stop();
|
||||
node = null;
|
||||
}
|
||||
}
|
||||
|
@ -32,16 +32,16 @@
|
||||
|
||||
package com.jme3.scene.plugins.ogre;
|
||||
|
||||
import com.jme3.animation.BoneAnimation;
|
||||
import com.jme3.animation.Animation;
|
||||
import com.jme3.animation.Skeleton;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class AnimData {
|
||||
|
||||
public final Skeleton skeleton;
|
||||
public final ArrayList<BoneAnimation> anims;
|
||||
public final ArrayList<Animation> anims;
|
||||
|
||||
public AnimData(Skeleton skeleton, ArrayList<BoneAnimation> anims) {
|
||||
public AnimData(Skeleton skeleton, ArrayList<Animation> anims) {
|
||||
this.skeleton = skeleton;
|
||||
this.anims = anims;
|
||||
}
|
||||
|
@ -31,6 +31,7 @@
|
||||
*/
|
||||
package com.jme3.scene.plugins.ogre;
|
||||
|
||||
import com.jme3.animation.Animation;
|
||||
import com.jme3.scene.plugins.ogre.matext.OgreMaterialKey;
|
||||
import com.jme3.animation.AnimControl;
|
||||
import com.jme3.animation.BoneAnimation;
|
||||
@ -750,10 +751,10 @@ public class MeshLoader extends DefaultHandler implements AssetLoader {
|
||||
}
|
||||
|
||||
// Put the animations in the AnimControl
|
||||
HashMap<String, BoneAnimation> anims = new HashMap<String, BoneAnimation>();
|
||||
ArrayList<BoneAnimation> animList = animData.anims;
|
||||
HashMap<String, Animation> anims = new HashMap<String, Animation>();
|
||||
ArrayList<Animation> animList = animData.anims;
|
||||
for (int i = 0; i < animList.size(); i++) {
|
||||
BoneAnimation anim = animList.get(i);
|
||||
Animation anim = animList.get(i);
|
||||
anims.put(anim.getName(), anim);
|
||||
}
|
||||
|
||||
|
@ -31,6 +31,7 @@
|
||||
*/
|
||||
package com.jme3.scene.plugins.ogre;
|
||||
|
||||
import com.jme3.animation.Animation;
|
||||
import com.jme3.animation.Bone;
|
||||
import com.jme3.animation.BoneAnimation;
|
||||
import com.jme3.animation.BoneTrack;
|
||||
@ -73,7 +74,7 @@ public class SkeletonLoader extends DefaultHandler implements AssetLoader {
|
||||
private BoneTrack track;
|
||||
private ArrayList<BoneTrack> tracks = new ArrayList<BoneTrack>();
|
||||
private BoneAnimation animation;
|
||||
private ArrayList<BoneAnimation> animations;
|
||||
private ArrayList<Animation> animations;
|
||||
private Bone bone;
|
||||
private Skeleton skeleton;
|
||||
private ArrayList<Float> times = new ArrayList<Float>();
|
||||
@ -136,7 +137,7 @@ public class SkeletonLoader extends DefaultHandler implements AssetLoader {
|
||||
assert elementStack.peek().equals("skeleton");
|
||||
} else if (qName.equals("animations")) {
|
||||
assert elementStack.peek().equals("skeleton");
|
||||
animations = new ArrayList<BoneAnimation>();
|
||||
animations = new ArrayList<Animation>();
|
||||
} else if (qName.equals("bones")) {
|
||||
assert elementStack.peek().equals("skeleton");
|
||||
} else if (qName.equals("skeleton")) {
|
||||
@ -273,7 +274,7 @@ public class SkeletonLoader extends DefaultHandler implements AssetLoader {
|
||||
InputStreamReader r = new InputStreamReader(in);
|
||||
xr.parse(new InputSource(r));
|
||||
if (animations == null) {
|
||||
animations = new ArrayList<BoneAnimation>();
|
||||
animations = new ArrayList<Animation>();
|
||||
}
|
||||
AnimData data = new AnimData(skeleton, animations);
|
||||
skeleton = null;
|
||||
|
@ -196,6 +196,9 @@ public class TestChooser extends JDialog {
|
||||
} catch (NoSuchMethodException e) {
|
||||
// class does not have a main method
|
||||
return null;
|
||||
} catch (UnsupportedClassVersionError e){
|
||||
// unsupported version
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
@ -42,14 +42,12 @@ import com.jme3.math.Vector2f;
|
||||
import com.jme3.math.Vector3f;
|
||||
import com.jme3.post.HDRRenderer;
|
||||
import com.jme3.renderer.Caps;
|
||||
import com.jme3.renderer.queue.RenderQueue.Bucket;
|
||||
import com.jme3.renderer.queue.RenderQueue.ShadowMode;
|
||||
import com.jme3.scene.Geometry;
|
||||
import com.jme3.scene.Node;
|
||||
import com.jme3.scene.Spatial;
|
||||
import com.jme3.scene.Spatial.CullHint;
|
||||
import com.jme3.scene.shape.Box;
|
||||
import com.jme3.scene.shape.Sphere;
|
||||
import com.jme3.shadow.BasicShadowRenderer;
|
||||
import com.jme3.texture.Texture;
|
||||
import com.jme3.texture.Texture.WrapMode;
|
||||
|
Loading…
x
Reference in New Issue
Block a user