package framework.gameMain;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public abstract class RealTimeActivity extends Activity implements Runnable {
	//インターバル確認用変数
	private long interval = 15L;
	private long prevTime = 0L;
	
	private ScheduledThreadPoolExecutor schedule = new ScheduledThreadPoolExecutor(1);
	private boolean fixedInterval;
	

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
	}	
	
	protected void start(long interval){
		this.interval = interval;
		this.fixedInterval = false;
		schedule.scheduleWithFixedDelay(this, interval, interval, TimeUnit.MILLISECONDS);
	}
	
	protected void start(long delay, long interval){
		this.interval = interval;
		this.fixedInterval = false;
		schedule.scheduleWithFixedDelay(this, delay, interval, TimeUnit.MILLISECONDS);
	}
	
	protected void start(long delay, long interval, boolean fixedInterval){
		this.interval = interval;
		this.fixedInterval = fixedInterval;
		schedule.scheduleWithFixedDelay(this, delay, interval, TimeUnit.MILLISECONDS);
	}
	
	protected void stop() {
		schedule.shutdown();
	}
	
	//繰り返し実行される部分
	public void run(){
		long interval;
		if (prevTime == 0L || fixedInterval) {
			interval = this.interval;
			prevTime = System.currentTimeMillis(); 
		} else {
			long curTime = System.currentTimeMillis();
			interval = curTime - prevTime;
			prevTime = curTime;
		}
		update(interval);
	}
	
	//intervalミリ秒のインターバルをおいて定期実行
	protected abstract void update(long interval);
}
