package com.uoc.educationalVG.framework;

import java.util.List;

/**
 * This is related to the window management module, and it keeps track of user
 * input (that is, touch events, keystrokes, periphery, and accelerometer
 * readings). What input devices do we want to handle? On Android, we have three
 * main input methods: touchscreen, keyboard/trackball, and accelerometer. The
 * first two are suitable for both polling and event-based handling. The
 * accelerometer is usually just polled. The touchscreen can generate three
 * events: Touch down: This happens when a finger is touched to the screen.
 * Touch drag: This occurs when a finger is dragged across the screen. Before a
 * drag, there’s always a down event. Touch up: This happens when a finger is
 * lifted from the screen.
 * 
 * @author "Beginning Android 4 Games Development"
 * 
 */
public interface Input {
	public static class KeyEvent {
		public static final int KEY_DOWN = 0;
		public static final int KEY_UP = 1;

		public int type;
		public int keyCode;
		public char keyChar;

		public String toString() {
			StringBuilder builder = new StringBuilder();
			if (type == KEY_DOWN)
				builder.append("key down, ");
			else
				builder.append("key up, ");
			builder.append(keyCode);
			builder.append(",");
			builder.append(keyChar);
			return builder.toString();
		}
	}

	public static class TouchEvent {
		public static final int TOUCH_DOWN = 0;
		public static final int TOUCH_UP = 1;
		public static final int TOUCH_DRAGGED = 2;

		public int type;
		public int x, y;
		public int pointer;

		public String toString() {
			StringBuilder builder = new StringBuilder();
			if (type == TOUCH_DOWN)
				builder.append("touch down, ");
			else if (type == TOUCH_DRAGGED)
				builder.append("touch dragged, ");
			else
				builder.append("touch up, ");
			builder.append(pointer);
			builder.append(",");
			builder.append(x);
			builder.append(",");
			builder.append(y);
			return builder.toString();
		}
	}

	public boolean isKeyPressed(int keyCode);

	public boolean isTouchDown(int pointer);

	public int getTouchX(int pointer);

	public int getTouchY(int pointer);

	public float getAccelX();

	public float getAccelY();

	public float getAccelZ();

	public List<KeyEvent> getKeyEvents();

	public List<TouchEvent> getTouchEvents();
}
