package fight3D;
import framework.gameMain.Mode;
import framework.physics.Velocity3D;
public abstract class State {
protected long counter = 0; // この状態に切り替わってから何ループ目か?
public void init() {
counter = 0;
}
public void countUp() {
counter++;
}
public long getCounter() {
return counter;
}
/**
* 速度を返す
* @param curVelocity 現在の速度
* @param mode 現在のモード
* @return 次の瞬間の速度
*/
public Velocity3D getVelocity(Velocity3D curVelocity, Mode mode) {
if (counter == 0) {
// 最初の瞬間だけ初速度を返す
return getInitialVelocity();
}
return null;
}
/**
* 自分から次の状態に遷移可能か否かを返す
* @param nextState 次の状態
* @param mode 現在のモード(空中に滞在しているか地上にいるか)
* @return true --- 遷移可能, false --- 遷移不可能
*/
public abstract boolean canChange(State nextState, Mode mode);
/**
* 反復(継続)可能な状態か1回限りで元に戻る状態か
* @return true --- 反復(継続)可能な状態, false --- 1回限りで元に戻る状態
*/
public abstract boolean isRepeatable();
/**
* 初速度を返す
* @return 初速度
*/
public abstract Velocity3D getInitialVelocity();
}