//class_global_inputs.hpp for global input 

//*******************************
//*** class_global_inputs.hpp ***
//*******************************

//Version 1.0

//Developed with Dev C++ 5.2.0.3 & Allegro 5.0.6

//By Alain Galiani
//Dedalusman
//nageondu@gmail.com

//Start          20 08 2012
//Finished       00 00 2013
//Last updat     20 08 2012

//History:

/*

*/

class class_global_inputs
{public:

  //*** DATAS ***

  lm4o fps;
  ALLEGRO_EVENT ob_event;
  ALLEGRO_EVENT_QUEUE *ptr_event_queue;
  ALLEGRO_TIMER *ptr_timer;

  //*** FONCTIONS ***

  lm4o init(lm4o p_fps);
  void run(); 
};

lm4o class_global_inputs::init(lm4o p_fps)
{
  fps=p_fps;

  if(!al_install_keyboard())
  {
    return -1;
  }

  if(!al_install_mouse())
  {
    return -1;
  }

  if(!al_install_joystick())
  {
    return -1;
  }

  ptr_event_queue=al_create_event_queue();
  ptr_timer=al_create_timer(1.0/fps);

  al_register_event_source(ptr_event_queue,al_get_keyboard_event_source());
  al_register_event_source(ptr_event_queue,al_get_mouse_event_source());
  al_register_event_source(ptr_event_queue,al_get_timer_event_source(ptr_timer));
  al_register_event_source(ptr_event_queue,al_get_joystick_event_source());

  al_start_timer(ptr_timer);

  return 0;
}

void class_global_inputs::run()
{
  al_wait_for_event(ptr_event_queue,&ob_event);
  switch(ob_event.type)
  {
  case ALLEGRO_EVENT_KEY_DOWN:
       switch(ob_event.keyboard.keycode)
       {
       case ALLEGRO_KEY_UP:
            g_key_up=true;
            break;

       case ALLEGRO_KEY_DOWN:
            g_key_down=true;
            break;

       case ALLEGRO_KEY_LEFT:
            g_key_left=true;
            break;

       case ALLEGRO_KEY_RIGHT:
            g_key_right=true;
            break;
       }
       break;

  case ALLEGRO_EVENT_KEY_UP:
       switch(ob_event.keyboard.keycode)
       {
       case ALLEGRO_KEY_UP:
            g_key_up=false;
            break;

       case ALLEGRO_KEY_DOWN:
            g_key_down=false;
            break;

       case ALLEGRO_KEY_LEFT:
            g_key_left=false;
            break;

       case ALLEGRO_KEY_RIGHT:
            g_key_right=false;
            break;

       case ALLEGRO_KEY_ESCAPE:
            g_game_loop=false;
            break;
       }         
       break;

  case ALLEGRO_EVENT_DISPLAY_CLOSE:
       g_game_loop=false;
       break;

  case ALLEGRO_EVENT_MOUSE_AXES:
       g_mouse_pos_x=ob_event.mouse.x;
       g_mouse_pos_y=ob_event.mouse.y;
       break;

  case ALLEGRO_EVENT_MOUSE_BUTTON_DOWN:
       if(ob_event.mouse.button & 2)
       {
         g_but_mouse_right=true;
       }
       if(ob_event.mouse.button & 1)
       {
         g_but_mouse_left=true;
       }
       break;

  case ALLEGRO_EVENT_MOUSE_BUTTON_UP:
       if(ob_event.mouse.button & 2)
       {
         g_but_mouse_right=false;
       }
       if(ob_event.mouse.button & 1)
       {
         g_but_mouse_left=false;
       }
       break;

  case ALLEGRO_EVENT_JOYSTICK_AXIS:
       switch(ob_event.joystick.stick)
       {
       case 0: 
            switch(ob_event.joystick.axis)
            {
            case 0:
                 g_x1_axis_joy1=ob_event.joystick.pos;
                 break;

            case 1:
                 g_y1_axis_joy1=ob_event.joystick.pos;
                 break;
            }
            break;

       case 1: 
            switch(ob_event.joystick.axis)
            {
            case 0:
                 g_x2_axis_joy1=ob_event.joystick.pos;
                 break;

            case 1:
                 g_y2_axis_joy1=ob_event.joystick.pos;
                 break;
            }
            break;

       case 2: 
            switch(ob_event.joystick.axis)
            {
            case 0:
                 g_x3_axis_joy1=ob_event.joystick.pos;
                 break;

            case 1:
                 g_y3_axis_joy1=ob_event.joystick.pos;
                 break;
            }
            break;

       case 3: 
            switch(ob_event.joystick.axis)
            {
            case 0:
                 g_x4_axis_joy1=ob_event.joystick.pos;
                 break;

            case 1:
                 g_y4_axis_joy1=ob_event.joystick.pos;
                 break;
            }
            break;

       case 4: 
            switch(ob_event.joystick.axis)
            {
            case 0:
                 g_x5_axis_joy1=ob_event.joystick.pos;
                 break;

            case 1:
                 g_y5_axis_joy1=ob_event.joystick.pos;
                 break;
            }
            break;
       }
       break;

  case ALLEGRO_EVENT_JOYSTICK_BUTTON_DOWN:
       switch(ob_event.joystick.button)
       {
       case 0:
            g_but_00_joy1=true;
            break;

       case 1:
            g_but_01_joy1=true;
            break;

       case 2:
            g_but_02_joy1=true;
            break;

       case 3:
            g_but_03_joy1=true;
            break;

       case 4:
            g_but_04_joy1=true;
            break;

       case 5:
            g_but_05_joy1=true;
            break;

       case 6:
            g_but_06_joy1=true;
            break;

       case 7:
            g_but_07_joy1=true;
            break;

       case 8:
            g_but_08_joy1=true;
            break;

       case 9:
            g_but_09_joy1=true;
            break;

       case 10:
            g_but_10_joy1=true;
            break;

       case 11:
            g_but_11_joy1=true;
            break;

       case 12:
            g_but_12_joy1=true;
            break;
       }
       break;

  case ALLEGRO_EVENT_JOYSTICK_BUTTON_UP:
       switch(ob_event.joystick.button)
       {
       case 0:
            g_but_00_joy1=false;
            break;

       case 1:
            g_but_01_joy1=false;
            break;

       case 2:
            g_but_02_joy1=false;
            break;

       case 3:
            g_but_03_joy1=false;
            break;
 
       case 4:
            g_but_04_joy1=false;
            break;

       case 5:
            g_but_05_joy1=false;
            break;

       case 6:
            g_but_06_joy1=false;
            break;

       case 7:
            g_but_07_joy1=false;
            break;

       case 8:
            g_but_08_joy1=false;
            break;

       case 9:
            g_but_09_joy1=false;
            break;

       case 10:
            g_but_10_joy1=false;
            break;

       case 11:
            g_but_11_joy1=false;
            break;

       case 12:
            g_but_12_joy1=false;
            break;
      }
      break;

  case ALLEGRO_EVENT_TIMER:
       if(al_is_event_queue_empty(ptr_event_queue))
       { 
         g_redraw=true;
       }   
       break;
  }
}






