/**************************************************************************
COLLISIONS: Détecter collision entre 2 rectangles
            Un des 2 rectangles est positionné sous la souris,
            l'autre est fixe au centre de l'écran

            La collision est signalée par un changement de couleur
**************************************************************************/

#include <allegro.h>
#include <time.h>


/******************************************/
/* PROGRAMME PRINCIPAL                    */
/* initialisation puis boucle de jeu      */
/******************************************/

int main()
{
    // Coordonnées des rectangles

    int x1g=250, x1d=550;   // rectangle 1 fixe
    int y1h=220, y1b=370;

    int x2g, x2d, y2h, y2b; // rectangle 2 sous la souris
    int t2x=80, t2y=120;    // largeur hauteur

    int couleur;    // couleur pour signaler collision ou pas

    BITMAP *page;   // BITMAP buffer d'affichage



    // Lancer allegro et le mode graphique
    allegro_init();
    install_keyboard();
    install_mouse();

    set_color_depth(desktop_color_depth());
    if (set_gfx_mode(GFX_AUTODETECT_WINDOWED,800,600,0,0)!=0)
    {
        allegro_message("prb gfx mode");
        allegro_exit();
        exit(EXIT_FAILURE);
    }

    // Montrer la souris à l'écran
    show_mouse(screen);

    // CREATION DU BUFFER D'AFFICHAGE à la taille de l'écran
    page=create_bitmap(SCREEN_W,SCREEN_H);
    clear_bitmap(page);



    // Boucle de jeu
    while (!key[KEY_ESC])
    {
        // EFFACER POSITIONs ACTUELLEs SUR LE BUFFER
        clear_bitmap(page);

        // GESTION DEPLACEMENT RECTANGLE 2
        x2g=mouse_x-t2x/2;
        x2d=x2g+t2x;
        y2h=mouse_y-t2y/2;
        y2b=y2h+t2y;

        // TEST COLLISION (enregistrer du rouge si collision, sinon du vert)
        if ( x1g<=x2d && x2g<=x1d && y1h<=y2b && y2h<=y1b )
            couleur=makecol(255,0,0);
        else
            couleur=makecol(0,255,0);

        // AFFICHAGE sur buffer

        rectfill(page,x1g,y1h,x1d,y1b,makecol(0,255,255));
        rectfill(page,x2g,y2h,x2d,y2b,couleur);

        // AFFICHAGE DU BUFFER MIS A JOUR A L'ECRAN
        blit(page,screen,0,0,0,0,SCREEN_W,SCREEN_H);

        // ON FAIT UNE PETITE PAUSE
        rest(10);
    }

    return 0;
}
END_OF_MAIN();