package framework.gameMain;
import javax.media.j3d.TransformGroup;
import framework.animation.Animation3D;
import framework.model3D.BaseObject3D;
import framework.model3D.Object3D;
import framework.model3D.Position3D;
import framework.model3D.Placeable;
public abstract class Animatable implements Placeable {
public Object3D body;
public Animation3D animation;
public Animatable(Object3D body, Animation3D animation) {
this.body = body;
this.animation = animation;
}
/**
* 単位時間ごとの動作(アニメーション処理)
* @param interval --- 前回呼び出されたときからの経過時間(ミリ秒単位)
*/
public void motion(long interval) {
if (animation != null) {
// 1. アニメーションを実行
if (animation.progress(interval) == false) {
onEndAnimation();
}
// 2. 姿勢を変える
body.apply(animation.getPose(), false);
}
}
public TransformGroup getTransformGroupToPlace() {
return getBody().getTransformGroupToPlace();
}
public BaseObject3D getBody() {
return body;
}
/**
* アニメーションが終了するたびに呼ばれる
*/
public abstract void onEndAnimation();
public Position3D getPosition() {
return body.getPosition3D();
}
public void setPosition(Position3D p) {
body.apply(p, false);
}
}