/*


    Evolute version 0.7
    Copyright (C) 2010 Antti Vainio

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.


*/

//          tekijat.cpp

#include <math.h>
#include "global.hpp"

short int aika;

//tekijät-ruutu
void tekijat() {
     bool pois1 = false; //aloita poistuminen
     bool pois2 = false; //ulos loopista!
     float kasautuminen = 0;
     short int valinta = 0;
     short int prewvalinta = 0;
     aika = 0;
     
     while(!pois2) {
                 alkuaika = SDL_GetTicks();
                 
                 //hiiri ja nappulat
                 SDL_GetMouseState(&hiirix,&hiiriy);
                 pelaajaninputit = SDL_GetKeyState(NULL);
                 if(SDL_GetMouseState(NULL, NULL)&SDL_BUTTON(1)) hiiriekanappi = true;
                 else hiiriekanappi = false;
                 
                 //lasketaan kasautuminen
                 if(!pois1) kasautuminen++;
                 else kasautuminen--;
                 if(pois1 && kasautuminen < 1) pois2 = true;
                 if(kasautuminen > 20) aika++;
                 
                 //testataan onko hiiri nappien päällä
                 if(kasautuminen > 20 && hiirix < 150 && hiiriy > 550) valinta = -1; //back-nappi
                 else valinta = 0;
                 
                 //testataan irroitettiinko hiiri napin päällä
                 if(kasautuminen > 20 && valinta != 0 && hiiriprewekanappi && !hiiriekanappi) {
                           pois1 = true;
                           menuvalinta = 0;
                           if(kasautuminen > 20) kasautuminen = 20;
                           soitaaani(nappi2); //ääni
                 }
                 
                 //nappiäänet
                 if(hiiriekanappi && !hiiriprewekanappi && valinta != 0) soitaaani(nappi1);
                 else if(valinta != prewvalinta && valinta != 0) {
                            if(hiiriekanappi) soitaaani(nappi1);
                            else soitaaani(nappion);
                 }
                 
                 //ESC- ja ENTER-nappi
                 if(pelaajaninputit[SDLK_ESCAPE] || pelaajaninputit[SDLK_RETURN]) {
                           if(menuvalinta != 0) soitaaani(nappi2); //ääni
                           pois1 = true;
                           menuvalinta = 0;
                           if(kasautuminen > 20) kasautuminen = 20;
                 }
                 
                 //poistutaan lopuksi
                 if(aika > 1860) {
                           pois1 = true;
                           menuvalinta = 0;
                           if(kasautuminen > 20) kasautuminen = 20;
                 }
                 
                      //Piirretään kaikki
                 piirrakuva2(menutausta, 0, 0);
                 piirrakuva(otsikko, 400, 50);
                 //vanhat napit
                 if(kasautuminen < 20) {
                                 piirrakuva(menunappinew1, 400 - 30 * kasautuminen, 175);
                                 //piirrakuva(menunappiscores1, 400 - 30 * kasautuminen, 250);
                                 piirrakuva(menunappisettings1, 400 - 30 * kasautuminen, 275);
                                 piirrakuva(menunappicredits2[0], 400 - 30 * kasautuminen, 375);
                                 piirrakuva(menunappiexit1, 400 - 30 * kasautuminen, 475);
                 }
                 //napit
                 if(kasautuminen < 20) piirrakuva(nappitakaisin[0], 75, 775 - 10 * kasautuminen);
                 else if(valinta == -1 && hiiriprewekanappi) piirrakuva(nappitakaisin[2], 75, 575);
                 else if(valinta == -1) piirrakuva(nappitakaisin[1], 75, 575);
                 else piirrakuva(nappitakaisin[0], 75, 575);
                      //ITSE TEKIJÄT
                 piirratekija("Evolute", int(kasautuminen), 20, 4, -1, 2, 0);
                 piirratekija("Design", int(kasautuminen), 110, 1, -1, 0, 1);
                 piirratekija("Coding", int(kasautuminen), 120, 1, 1, 1, 1);
                 piirratekija("Graphics", int(kasautuminen), 130, 1, -1, 2, 1);
                 piirratekija("Music", int(kasautuminen), 140, 1, 1, 3, 1);
                 piirratekija("by Antti Vainio", int(kasautuminen), 150, 1, -1, 4, 0);
                 piirratekija("Sounds", int(kasautuminen), 540, 2, -1, 2, 1);
                 piirratekija("from various free places", int(kasautuminen), 550, 2, 1, 3, 1);
                 piirratekija("and by...", int(kasautuminen), 660, 4, -1, 4, 1);
                 piirratekija("acclivity", int(kasautuminen), 750, 1, -1, 0, 1);
                 piirratekija("sstokes", int(kasautuminen), 760, 1, 1, 1, 1);
                 piirratekija("zippi1", int(kasautuminen), 770, 1, -1, 2, 1);
                 piirratekija("Stephan Matson", int(kasautuminen), 780, 1, 1, 3, 1);
                 piirratekija("Halleck", int(kasautuminen), 790, 1, -1, 4, 1);
                 piirratekija("fonogeno", int(kasautuminen), 800, 1, 1, 5, 1);
                 piirratekija("futureprobe", int(kasautuminen), 810, 1, -1, 6, 1);
                 piirratekija("Heigh hoo", int(kasautuminen), 820, 1, 1, 7, 1);
                 piirratekija("Additional libraries:", int(kasautuminen), 1210, 1, -1, 0, 1);
                 piirratekija("SDL", int(kasautuminen), 1220, 1, 1, 1, 1);
                 piirratekija("SDL Image", int(kasautuminen), 1230, 1, -1, 2, 1);
                 piirratekija("SDL gfx", int(kasautuminen), 1240, 1, 1, 3, 1);
                 piirratekija("SDL Mixer", int(kasautuminen), 1250, 1, -1, 4, 1);
                 piirratekija("Thank you for playing!", int(kasautuminen), 1640, 2, -1, 2, 0);
                 //loput
                 if(showfpseverywhere == 2) piirraexpluku(fps, 7);
                 piirrakuva2(menutahtain, hiirix - 1, hiiriy - 1);
                 
                 SDL_Flip(ruutu);
                 
                 //Lopussa tehtävät asiat
                 if(hiiriekanappi) hiiriprewekanappi = true;
                 else hiiriprewekanappi = false;
                 prewvalinta = valinta;
                 
                      if(hoidatapahtumat()) pois2 = true;
                      laskefps();
                      
    //tähän loppuu menun looppi
    }
}

//piirtää tietyn tekijä-tekstin tietyllä hetkellä
//oletusnopeus on noin 10 sekuntia (400 framea)
void piirratekija(const char *teksti, short int kasautuminen, const short int hetki, const short int nopeus, const short int suunta, const short int kohta, const short int fontti) {
     if(kasautuminen > 20) kasautuminen = 20;
     //alkuperäinen yhtälö tekstin sijainnille: +-(0.0000000015 * aika^5 + 0.1 * aika) + 400; tähän on lisätty loppukasautuminen
     //tässä aika on (aika - hetki) * nopeus - 200
     if(hetki - 20 / nopeus < aika && hetki + 420 / nopeus > aika) piirrateksti(teksti, suunta * (0.0000000015 * pow((aika - hetki) * nopeus - 200, 5) + 0.1 * ((aika - hetki) * nopeus - 200)) + 2000 - kasautuminen * 80, kohta * 50 + 151 + fontti * 8, fontti, 1);
}
