/*
------------------------------------------------------------
   Kobo Deluxe - An enhanced SDL port of XKobo
------------------------------------------------------------
 * Copyright (C) 1995, 1996, Akira Higuchi
 * Copyright (C) 2001, 2002, 2006, David Olofson
 * 
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by the
 * Free Software Foundation; either version 2 of the License, or (at your
 * option) any later version.
 * 
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, write to the Free Software Foundation, Inc.,
 * 675 Mass Ave, Cambridge, MA 02139, USA.
 */

#ifndef _KOBO_GAMECTL_H_
#define _KOBO_GAMECTL_H_

#include "glSDL.h"
#include "config.h"

#define KEY_KP_DOWN		SDLK_KP2
#define KEY_KP_LEFT		SDLK_KP4
#define KEY_KP_UP		SDLK_KP8
#define KEY_KP_RIGHT		SDLK_KP6
#define KEY_KP_DL		SDLK_KP1
#define KEY_KP_DR		SDLK_KP3
#define KEY_KP_UL		SDLK_KP7
#define KEY_KP_UR		SDLK_KP9


enum buttons_t
{
	BTN_UP,		//Joystick, arrows, numpad etc
	BTN_DOWN,
	BTN_LEFT,
	BTN_RIGHT,
	BTN_UL,
	BTN_UR,
	BTN_DL,
	BTN_DR,

	BTN_INC,	// +
	BTN_DEC,	// -

	BTN_NEXT,	// PageUp
	BTN_PREV,	// PageDn

	BTN_YES,	// 'Y'
	BTN_NO,		// 'N'

	BTN_FIRE,	//ctrl, fire button, mouse button,...
	BTN_START,	//Space
	BTN_SELECT,	//Return, enter,...
	BTN_EXIT,	//ESC
	BTN_PAUSE,	//Pause or P; also used as an internal event.
	BTN_CLOSE,	//Window close button, ALT-F4,...
	BTN_BACK,	//Backspace

	BTN_F1,		//Function keys
	BTN_F2,
	BTN_F3,
	BTN_F4,

	BTN_F5,
	BTN_F6,
	BTN_F7,
	BTN_F8,

	BTN_F9,
	BTN_F10,
	BTN_F11,
	BTN_F12
};


enum mousemodes_t
{
	MMD_OFF = 0,
	MMD_CROSSHAIR,
	MMD_RELATIVE
};


class gamecontrol_t
{
	static int r_delay, r_interval;
	static int afire;
	static int space;
	static int left, up, down, right, ul, ur, dl, dr;
	static int shot;
	static int direction, new_direction;
	static int latch_timer;
	static int movekey_pressed;
	static void change();
  public:
	gamecontrol_t();
	static void init(int always_fire);
	static void repeat(int delay, int interval);
	static void clear();
	static int map(SDLKey sym);
	static void process();	// Call every frame!
	static void press(int k);
	static void release(int k);
	static void mouse_press(int n);
	static void mouse_release(int n);
	static void mouse_position(int h, int v);
	static inline int dir()		{ return direction; }
	static inline int get_shot()	{ return shot || afire; }
	static inline int dir_push()	{ return movekey_pressed; }
};

extern gamecontrol_t gamecontrol;

#endif //_KOBO_KEY_H_
