package framework.animation;
import java.util.ArrayList;
import javax.media.j3d.Texture;
import framework.model3D.Position3D;
import framework.model3D.Quaternion3D;
/**
* 部品単位のアニメーション情報を保持する
* @author 新田直也
*
*/
public class PartAnimation {
private String name;
private int textureUnit;
private ArrayList<KeyFrame> keyList = new ArrayList<KeyFrame>();
public static final int SINGLE_TEXTURE = -1;
public PartAnimation(String name) {
this.name = name;
textureUnit = SINGLE_TEXTURE;
}
public PartAnimation(String name, int textureUnit) {
this.name = name;
this.textureUnit = textureUnit;
}
String getName() {
return name;
}
int getTextureUnit() {
return textureUnit;
}
//アニメーションの経過時間の前後のkeyをKeyFrame型の配列で取得するメソッド
KeyFrame[] getKey(long t){
int i;
KeyFrame[] aroundKey = new KeyFrame[2];
for(i=1;i<keyList.size();i++){
//tがkeyそのものだった場合(tの前後のKeyFrameが必要ない時)、要素0にそのものを代入し、要素1をnullに設定しておく
if(t == keyList.get(i).key){
aroundKey[0] = keyList.get(i);
aroundKey[1] = null;
return aroundKey;
}
//tの前後のKeyFrameを代入
if(t < keyList.get(i).key){
aroundKey[0] = keyList.get(i-1);
aroundKey[1] = keyList.get(i);
return aroundKey;
}
}
return null;
}
//keyListの最後の要素(keyの最大値)を取得して返すメソッド
long getLastKey() {
return keyList.get(keyList.size()-1).key;
}
public void add(long k, Position3D p) {
KeyFrame e = new KeyFrame();
e.key = k;
e.keyValuePosition = p;
e.keyValueQuaternion = null;
e.keyValueTexture = null;
e.keyValueTexturePosition = null;
e.keyValueTextureQuaternion = null;
keyList.add(e);
}
public void add(long k, Quaternion3D q) {
KeyFrame e = new KeyFrame();
e.key = k;
e.keyValuePosition = null;
e.keyValueQuaternion = q;
e.keyValueTexture = null;
e.keyValueTexturePosition = null;
e.keyValueTextureQuaternion = null;
keyList.add(e);
}
public void add(long k, Position3D p, Quaternion3D q) {
KeyFrame e = new KeyFrame();
e.key = k;
e.keyValuePosition = p;
e.keyValueQuaternion = q;
e.keyValueTexture = null;
e.keyValueTexturePosition = null;
e.keyValueTextureQuaternion = null;
keyList.add(e);
}
public void addTexture(long k, Texture texture) {
KeyFrame e = new KeyFrame();
e.key = k;
e.keyValuePosition = null;
e.keyValueQuaternion = null;
e.keyValueTexture = texture;
e.keyValueTexturePosition = null;
e.keyValueTextureQuaternion = null;
keyList.add(e);
}
public void addTexture(long k, Texture texture, Position3D tp) {
KeyFrame e = new KeyFrame();
e.key = k;
e.keyValuePosition = null;
e.keyValueQuaternion = null;
e.keyValueTexture = texture;
e.keyValueTexturePosition = tp;
e.keyValueTextureQuaternion = null;
keyList.add(e);
}
public void addTexture(long k, Texture texture, Quaternion3D tq) {
KeyFrame e = new KeyFrame();
e.key = k;
e.keyValuePosition = null;
e.keyValueQuaternion = null;
e.keyValueTexture = texture;
e.keyValueTexturePosition = null;
e.keyValueTextureQuaternion = tq;
keyList.add(e);
}
public void addTexture(long k, Texture texture, Position3D tp, Quaternion3D tq) {
KeyFrame e = new KeyFrame();
e.key = k;
e.keyValuePosition = null;
e.keyValueQuaternion = null;
e.keyValueTexture = texture;
e.keyValueTexturePosition = tp;
e.keyValueTextureQuaternion = tq;
keyList.add(e);
}
public void addTexture(long k, Position3D tp) {
KeyFrame e = new KeyFrame();
e.key = k;
e.keyValuePosition = null;
e.keyValueQuaternion = null;
e.keyValueTexture = null;
e.keyValueTexturePosition = tp;
e.keyValueTextureQuaternion = null;
keyList.add(e);
}
public void addTexture(long k, Quaternion3D tq) {
KeyFrame e = new KeyFrame();
e.key = k;
e.keyValuePosition = null;
e.keyValueQuaternion = null;
e.keyValueTexture = null;
e.keyValueTexturePosition = null;
e.keyValueTextureQuaternion = tq;
keyList.add(e);
}
public void addTexture(long k, Position3D tp, Quaternion3D tq) {
KeyFrame e = new KeyFrame();
e.key = k;
e.keyValuePosition = null;
e.keyValueQuaternion = null;
e.keyValueTexture = null;
e.keyValueTexturePosition = tp;
e.keyValueTextureQuaternion = tq;
keyList.add(e);
}
}