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();

}
