#include "lib/input.h"
#include "lib/sdl.h"

// thin abstraction layer on top of SDL.
// game code should use it instead of SDL_GetMouseState etc. because
// Atlas does not completely emulate SDL (it can only send events).

extern bool g_app_minimized;
extern bool g_app_has_focus;

extern int g_mouse_x, g_mouse_y;

/**
 * g_keys: Key states, indexed by SDLK* constants. If an entry is true,
 * it represents a pressed key.
 * Updated by GlobalsInputHandler in response to key press/release events.
 */
extern bool g_keys[SDLK_LAST];

/**
 * g_mouse_buttons: Mouse buttons states, indexed by SDL_BUTTON_* constants.
 * If an entry is true, it represents a pressed button.
 * Updated by GlobalsInputHandler in response to mouse button up/down events.
 * 
 * Be aware that SDL_BUTTON_* constants start at 1. Therefore,
 * g_mouse_buttons[0] is unused. The order of entries is:
 * { unused, left, right, middle, wheel up, wheel down }
 */
extern bool g_mouse_buttons[6];

extern InReaction GlobalsInputHandler(const SDL_Event* ev);
