///////////////////////////////////
// engine.cpp                    //
// button.cpp                    //
// button.h                      //
//                               //
// "Engine" vytvoreny v Allegre, //
// sluziaci na rychle napisanie  //
// pekneho herneho menu :-)      //
//                               //
// © 2006 Rasto Tisovcik         //
/////////////////////////////////// 
#include <allegro.h>                                                                      // Include Allegra
#include <alfont.h>
#include <almp3.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>                                                                        // Include klasickeho stdio.h
#include "button.h"                                                                       // Include triedy tlacitka

int i;
volatile bool credits_bool=FALSE;
bool done=FALSE;                                                                          // Premenna signalizujuca ukoncenie hlavneho cyklu
bool fullscreen=FALSE;

typedef struct riadok
{
  bool existence;
  char s[40];
  int vyska;  
}RIADOK;

int width,height;                                                                         // Deklaracia premennych urcujucich sirku a vysku okna

void GetResolution()                                                                      // Funkcia nacitavajuca rozlisenie zo suboru
{
  FILE *cfg;                                                                              // Smernik na strukturu typu FILE
  cfg=fopen("cfg/menu.cfg","r");                                                          // Otvaranie suboru
  fscanf(cfg,"%d\n%d\n%d",&width,&height,&i);                                             // Nacitavanie rozlisenia
  if(i==1) {fullscreen=TRUE;}
  fclose(cfg);                                                                            // Uzatvaranie suboru
}

void credits_timer()
{
  credits_bool=TRUE;
}
END_OF_FUNCTION(credits_timer);

void QuitGame()
{
  done=TRUE;
}

void Credits()
{
  bool done_credits=FALSE;
  int y=height;
  int velkost_textu;
  int col_bg,col_txt;
  int pocet_riadkov;
  int r,g,b;
 
  BITMAP *buffer; 
  ALFONT_FONT *cr_font;
  FILE *credits;
  
  install_int(credits_timer,25);
  LOCK_VARIABLE(credits_bool);
  LOCK_FUNCTION(credits_timer);
  
  buffer=create_bitmap(width,height);
  cr_font=alfont_load_font("data/fonts/credits.ttf");  
  credits=fopen("cfg/credits.cfg","r");
  fscanf(credits,"%d\n",&r);
  fscanf(credits,"%d\n",&g);
  fscanf(credits,"%d\n",&b);
  col_bg=makecol(r,g,b);
  fscanf(credits,"%d\n",&r);
  fscanf(credits,"%d\n",&g);
  fscanf(credits,"%d\n",&b);
  col_txt=makecol(r,g,b);
  fscanf(credits,"%d\n",&pocet_riadkov);
  fscanf(credits,"%d\n",&velkost_textu);
  
  alfont_set_font_size(cr_font,velkost_textu);
  
  RIADOK riadok[pocet_riadkov+1];
  
  for(int loop=0;loop<pocet_riadkov+1;loop++,y+=(velkost_textu+(height/30)))
  {
    riadok[loop].existence=FALSE;
    riadok[loop].vyska=y;
  }
  
  strncpy(riadok[0].s,"ChuckMarine",39); riadok[0].existence=TRUE;
  strncpy(riadok[1].s,"2006 KaReL.BMP",39); riadok[1].existence=TRUE;
  
  show_mouse(NULL);
  clear_to_color(buffer,col_bg);  
  
  while(!done_credits)
  {
    vsync();
    if(credits_bool)
    {
      clear_to_color(buffer,col_bg);
      for(int loop=0;loop<=pocet_riadkov;loop++)
      { 
        riadok[loop].vyska-=(int)((float)height/480);
        if(riadok[loop].vyska>=-velkost_textu && riadok[loop].vyska<=height+velkost_textu);
        {
           alfont_textprintf_centre_aa(buffer,cr_font,width/2,riadok[loop].vyska,col_txt,"%s",riadok[loop].s);
        }
      }
      credits_bool=FALSE;
    }
    blit(buffer,screen,0,0,0,0,width,height);
    if(riadok[pocet_riadkov].vyska<=0-velkost_textu) done_credits=TRUE;
  }

  free((void *)riadok);
  show_mouse(screen);
  destroy_bitmap(buffer);
}

int main()                                                                                // Main :-)
{ 
  void (*p_ng)();                                                                         // Deklaracia smernikov na funkcie ktore sa maju vykonat pri stlaceni tlacitka
  
  p_ng = Credits;                                                                        // Definicia smernikov na funkcie
  
  GetResolution();                                                                        // Nacitanie rozlisenia zo suboru
  
  allegro_init();                                                                         // Inicializacia Allegra
  alfont_init();
  install_keyboard();                                                                     // Inicializacia klavesnice
  install_mouse();                                                                        // Inicializacia mysi
  install_timer();                                                                        // Inicializacia timerov
  install_sound(DIGI_AUTODETECT,MIDI_NONE,NULL);                                          // Inicializacia zvuku
  set_color_depth(16);                                                                    // Nastavovanie farebnej hlbky
  if(!fullscreen) set_gfx_mode(GFX_AUTODETECT_WINDOWED,width,height,0,0);                 // Nastavovanie grafickeho rezimu
  if(fullscreen) set_gfx_mode(GFX_AUTODETECT_FULLSCREEN,width,height,0,0);                // Nastavovanie grafickeho rezimu
  
  BITMAP *pozadie;                                                                        // Smernik na pozadie nacitane zo suboru
  BITMAP *mouse_cursor;                                                                   // Smernik na kurzor mysi nacitany zo suboru
  BITMAP *buffer;                                                                         // Vytvorenie smernika na buffer
  SAMPLE *snd_b1,*snd_b1_c;
  mouse_cursor=load_bitmap("gfx/menu/cursor.bmp",NULL);                                   // Nacitavanie kurzora
  pozadie=load_bitmap("gfx/menu/background.tga",NULL);                                    // Nacitavanie pozadia
  buffer=create_bitmap(width,height);                                                     // Vytvaranie buffera
  snd_b1=load_sample("sfx/menu/b1.wav");
  snd_b1_c=load_sample("sfx/menu/b1_c.wav");
  set_mouse_sprite(mouse_cursor);                                                         // Nastavenie kurzoru mysi 
  
  stretch_blit(pozadie,buffer,0,0,1280,1024,0,0,width,height);                            // Nahravanie pozadia do bufferu
  
  ALFONT_FONT *f1,*f2;
  f1=alfont_load_font("comic.ttf");
  f2=alfont_load_font("formal.ttf");
  BITMAP *ac_b1,*un_b1;                                                                   // Deklaracia smernikov na obrazky jednotlivych gombikov
  ac_b1=load_bitmap("gfx/menu/buttons/ac_b1.tga",NULL);                                   // Nacitavanie obrazkov jednotlivych gombikov
  un_b1=load_bitmap("gfx/menu/buttons/un_b1.tga",NULL);
  
  Gombik nova_hra("NOVA HRA","NOVA HRA",p_ng,ac_b1,un_b1,buffer,snd_b1,snd_b1_c,f2,f2,18,18,makecol(128,128,128),makecol(182,182,182),325,250,200,200,350,300);               

  while(!done)                                                                            // Hlavny cyklus menu
  {
    vsync();                                                                              // Vsync() - aby sa znizilo blikanie
    
    nova_hra.Krok();                                                                      // Vykreslenie tlacitok
        
    show_mouse(buffer);                                                                   // Aktualizacia mysi v bufferi
    blit(buffer,screen,0,0,0,0,width,height);                                             // Vykreslenie bufferu na obrazovku 
    if(key[KEY_ESC]) done=TRUE;
  }
  destroy_bitmap(ac_b1);                                                                  // Koniec hlavneho cyklu
  destroy_bitmap(un_b1);                                                                  // Uvolnovanie obrazkov z pamati
  destroy_bitmap(mouse_cursor);
  destroy_bitmap(pozadie);
  destroy_sample(snd_b1);
  destroy_sample(snd_b1_c);
}
END_OF_MAIN();                                                                            // Koniec programu
