//Main fonction for testing game loop with Allegro 5 

//****************
//*** main.cpp ***
//****************

//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:

/*

*/

typedef signed long lm4o;
typedef float flo4;

//****************
//*** INCLUDES ***
//****************

#include<allegro5/allegro.h>
#include<allegro5/allegro_primitives.h>
#include<allegro5/allegro_font.h>
#include<allegro5/allegro_ttf.h>
#include<allegro5/allegro_native_dialog.h>

#include<stdlib.h>
#include<math.h>

#include<windows.h>

#include<class_cycles_seconde.hpp>
#include<class_cercle.hpp>

#include<global_registers.hpp>
#include<class_global_inputs.hpp>


int main(int argc, char **argv)
{

  class_cercle tab_ob_cercle[1000];
  class_cercle*ptr_ob_cercle=NULL;
  class_cercle*ptr_tab_ob_cercle=NULL;
  ptr_tab_ob_cercle=&tab_ob_cercle[0];

  lm4o ray_max,ray_min;
  lm4o lxi,lxs,lyi,lys;

  lm4o nb1;

  lm4o resol_x=1024,
       resol_y=600;

  lm4o count1=0,count2=0,count3=0;
  
  lm4o fps=60;

  flo4 cps1,cps2;
  class_cycles_seconde ob_cycles1,ob_cycles2;

  lm4o pos_x,pos_y,pos_x1,pos_y1;
  lm4o vv_x,vv_y;

  ALLEGRO_DISPLAY *ptr_display=NULL;

  if(!al_init())
  {
    return -1;
  }

  al_set_new_display_flags(ALLEGRO_FULLSCREEN); 

  ptr_display = al_create_display(resol_x,resol_y);

  if(!ptr_display)
  {
    al_uninstall_system();
    return -1;
  }

  class_global_inputs global_inputs;

  if(global_inputs.init(fps)!=0)
  {
    al_destroy_display(ptr_display);
    al_uninstall_system();
    return -1;
  }

  al_init_font_addon();

  if(!al_init_ttf_addon())
  {
    al_destroy_display(ptr_display);
    al_uninstall_system();
    return -1;
  }

  if(!al_init_primitives_addon())
  {
    al_destroy_display(ptr_display);
    al_uninstall_system();
    return -1;
  }

  al_hide_mouse_cursor(ptr_display);//cache la souris dans le display

  ALLEGRO_FONT *ptr_font24;
  ptr_font24=al_load_font("Starjhol.ttf",24,0);

  ALLEGRO_FONT *ptr_font18;
  ptr_font18=al_load_font("Starjhol.ttf",18,0);

  al_clear_to_color(al_map_rgb(0,0,0));

  lxi=0;
  lxs=resol_x;
  lyi=0;
  lys=resol_y;

  ray_min=10;
  ray_max=100;

  for(nb1=0;nb1<1000;nb1++)
  {
    ptr_ob_cercle=ptr_tab_ob_cercle+nb1;
    ptr_ob_cercle->espace(lxi,lxs,lyi,lys);
    ptr_ob_cercle->hasard(ray_min,ray_max);
  }

  //****************************************************************************
  //*** TEST GAME LOOP *********************************************************
  //****************************************************************************

  count1=0;
  count2=0;

  pos_x=resol_x/2;
  pos_y=resol_y/2;
  pos_x1=resol_x/3;
  pos_y1=resol_y/3;

  vv_x=0;
  vv_y=0;

  g_game_loop=true;

  ob_cycles1.start(100);
  ob_cycles2.start(100);

  while(g_game_loop)
  {

    count1++;
    cps1=ob_cycles1.run();

    global_inputs.run();

    //***********************
    //*** CALCULATE FRAME ***
    //***********************

    if(g_redraw)
    {
      count2++;
      cps2=ob_cycles2.run();

      g_redraw=false;

      vv_x=(10*g_key_right)-(10*g_key_left);
      vv_y=(10*g_key_down)-(10*g_key_up);

      pos_x+=vv_x;
      pos_y+=vv_y;

      pos_x1=g_mouse_pos_x;
      pos_y1=g_mouse_pos_y;
       
      for(nb1=0;nb1<7;nb1++)
      {
        ptr_ob_cercle=ptr_tab_ob_cercle+nb1;
        ptr_ob_cercle->animation();
        ptr_ob_cercle->dessine_plein();
      }

      //*** TEXT CONTROL ***

      al_draw_text(ptr_font18,al_map_rgb(255,0,255),20,20,0,"game loop");
      al_draw_textf(ptr_font18,al_map_rgb(255,100,255),400,resol_y-40,0,"compteur 2 = %i",count2);
      al_draw_textf(ptr_font18,al_map_rgb(255,255,100),400,resol_y-70,0,"compteur 1 = %i",count1);

      al_draw_textf(ptr_font18,al_map_rgb(255,255,255),20,resol_y-40,0,"position x = %i     y = %i ",pos_x,pos_y);

      al_draw_textf(ptr_font18,al_map_rgb(125,125,255),20,resol_y-70,0,"CPS 2 = %f",cps2);//compteur cycles 2
      al_draw_textf(ptr_font18,al_map_rgb(255,125,255),20,resol_y-100,0,"CPS 1 = %f",cps1);//compteur cycles 1

      //*** KEY CIRCLE ***

      al_draw_filled_circle(pos_x,pos_y,20,al_map_rgb(0,255,255));

      //*** MOUSE CIRCLE ***

      al_draw_filled_circle(pos_x1,pos_y1,20,al_map_rgb(255,255,125));

      if(g_but_mouse_right)
      {
        al_draw_filled_circle(pos_x1+40,pos_y1,10,al_map_rgb(255,0,255));
      }
      if(g_but_mouse_left)
      {
        al_draw_filled_circle(pos_x1-40,pos_y1,10,al_map_rgb(255,255,255));
      }

      //*** JOYSTICK CONTROL ***

      al_draw_textf(ptr_font18,al_map_rgb(255,0,255),400,resol_y-160,0,"joy1 axe x1 = %f",g_x1_axis_joy1);
      al_draw_textf(ptr_font18,al_map_rgb(255,255,0),400,resol_y-130,0,"joy1 axe y1 = %f",g_y1_axis_joy1);

      al_draw_textf(ptr_font18,al_map_rgb(0,125,255),400,resol_y-220,0,"joy1 axe x2 = %f",g_x2_axis_joy1);
      al_draw_textf(ptr_font18,al_map_rgb(0,255,0),400,resol_y-190,0,"joy1 axe y2 = %f",g_y2_axis_joy1);

      al_draw_textf(ptr_font18,al_map_rgb(0,255,125),400,resol_y-280,0,"joy1 axe x3 = %f",g_x3_axis_joy1);
      al_draw_textf(ptr_font18,al_map_rgb(0,0,255),400,resol_y-250,0,"joy1 axe y3 = %f",g_y3_axis_joy1);

      al_draw_textf(ptr_font18,al_map_rgb(255,0,0),400,resol_y-340,0,"joy1 axe x4 = %f",g_x4_axis_joy1);
      al_draw_textf(ptr_font18,al_map_rgb(0,255,0),400,resol_y-310,0,"joy1 axe y4 = %f",g_y4_axis_joy1);

      al_draw_textf(ptr_font18,al_map_rgb(0,0,255),400,resol_y-400,0,"joy1 axe x5 = %f",g_x5_axis_joy1);
      al_draw_textf(ptr_font18,al_map_rgb(125,125,0),400,resol_y-370,0,"joy1 axe y5 = %f",g_y5_axis_joy1);

      if(g_but_00_joy1)
      {
        al_draw_filled_circle(10,10,3,al_map_rgb(255,0,0));
      }

      if(g_but_01_joy1)
      {
        al_draw_filled_circle(10,20,3,al_map_rgb(255,0,0));
      }

      if(g_but_02_joy1)
      {
        al_draw_filled_circle(10,30,3,al_map_rgb(255,0,0));
      }

      if(g_but_03_joy1)
      {
        al_draw_filled_circle(10,40,3,al_map_rgb(255,0,0));
      }

      if(g_but_04_joy1)
      {
        al_draw_filled_circle(10,50,3,al_map_rgb(255,0,0));
      }

      if(g_but_05_joy1)
      {
        al_draw_filled_circle(10,60,3,al_map_rgb(255,0,0));
      }

      if(g_but_06_joy1)
      {
        al_draw_filled_circle(10,70,3,al_map_rgb(255,0,0));
      }

      if(g_but_07_joy1)
      {
        al_draw_filled_circle(10,80,3,al_map_rgb(255,0,0));
      }

      if(g_but_08_joy1)
      {
        al_draw_filled_circle(10,90,3,al_map_rgb(255,0,0));
      }

      if(g_but_09_joy1)
      {
        al_draw_filled_circle(10,100,3,al_map_rgb(255,0,0));
      }

      if(g_but_10_joy1)
      {
        al_draw_filled_circle(10,110,3,al_map_rgb(255,0,0));
      }

      if(g_but_11_joy1)
      {
        al_draw_filled_circle(10,120,3,al_map_rgb(255,0,0));
      }

      if(g_but_12_joy1)
      {
        al_draw_filled_circle(10,130,3,al_map_rgb(255,0,0));
      }

      //*** DISPLAY ***

      al_wait_for_vsync();
      al_flip_display();
      al_clear_to_color(al_map_rgb(0,0,0));
    }
  }

  al_rest(3.0);

  al_destroy_font(ptr_font18);
  al_destroy_font(ptr_font24);
  al_destroy_display(ptr_display);
  al_uninstall_system();

  return 0;
}
