package com.haru.tetoru.sample.frame;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import com.haru.tetoru.template.Player;

public class MyPlayer extends Player implements KeyListener {

	/* 入力された操作情報 */
	private int inputType = OP_NO;

	/**
	 *  画面に入力リスナーを登録
	 */
	public void registInputListener(MyGameFrame display) {
		/* TODO:ここにKeyListernが出てくるのはおかしい気がする */
		/* 子クラスで実体をもたせ、ここでは、displayクラスのInputを登録するという抽象な処理にすべき */
		/* ConsolePlayerでどうやっていたかを思い出す */
		/* Myはフレーム用の意味 */
		/* 入力方法の登録は、実現方法に結構依存しているかも。それだと、親クラスに持たせないのは正解 */
		display.addKeyListener(this);
	}


	/**
	 *  操作の種類を読み取る
	 */
	@Override
	public int readOperate() {
		int type = OP_NO;

		/* 入力を読み取り */
		/* 入力がなかった場合は、OP_NOが取得できる */
		type = inputType;

		/* 入力初期化 */
		inputType = OP_NO;

		return type;
	}


	@Override
	public void keyPressed(KeyEvent e) {
		int code = e.getKeyCode(); /* キーコード */

		switch (code) {
		case KeyEvent.VK_DOWN:
			inputType = OP_DOWN;
			break;
		case KeyEvent.VK_RIGHT:
			inputType = OP_RIGHT;
			break;
		case KeyEvent.VK_LEFT:
			inputType = OP_LEFT;
			break;
		case KeyEvent.VK_SPACE:
		case KeyEvent.VK_Z:
			inputType = OP_ROTATE_RIGHT;
			break;
		case KeyEvent.VK_X:
			inputType = OP_ROTATE_LEFT;
			break;
		case KeyEvent.VK_ENTER:
			inputType = OP_START;
			break;
		default:
			inputType = OP_NO;
			break;
		}
	}
	@Override
	public void keyReleased(KeyEvent arg0) {
	}
	@Override
	public void keyTyped(KeyEvent arg0) {
	}


	/**
	 * ゲーム開始合図待ち
	 */
	@Override
	public boolean waitStartSign() {
		int retOperate = OP_NO;

		/* 開始操作入力待ち */
		while (OP_START != retOperate) {
			/* 入力を少し待つ */
			try {
				Thread.sleep(20);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}

			retOperate = readOperate();
		}

		return true;
	}
}
