/*


    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/>.


*/

//          kauppa.cpp

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

//expakauppa
int kauppa() {
    bool on1, on2, on3, on4; //mitkä napit on päällä
    //aluksi piirretään kauppakuva ja tempkuva2 valmiiksi
    piirtokohta = kauppakuva;
    piirrakuva2(kauppatausta, 0, 0);
    //piirretään levelit
    if(levurajoitus != 0 && vahinkolevu == 3) piirrakuva2(levelikuva3, 165, 7);
    else piirrakuva2(levelikuva[vahinkolevu], 165, 7);
    if(levurajoitus != 0 && tarkkuuslevu == 3) piirrakuva2(levelikuva3, 165, 107);
    else piirrakuva2(levelikuva[tarkkuuslevu], 165, 107);
    if(levurajoitus != 0 && nopeuslevu == 3) piirrakuva2(levelikuva3, 165, 207);
    else piirrakuva2(levelikuva[nopeuslevu], 165, 207);
    if(levurajoitus != 0 && hakeutuvuuslevu == 3) piirrakuva2(levelikuva3, 165, 307);
    else piirrakuva2(levelikuva[hakeutuvuuslevu], 165, 307);
    //laitetaan napit päälle
    if(vahinkolevu == 5) on1 = false;
    else if(levurajoitus != 0 && vahinkolevu == 3) on1 = false;
    else on1 = true;
    if(tarkkuuslevu == 5) on2 = false;
    else if(levurajoitus != 0 && tarkkuuslevu == 3) on2 = false;
    else on2 = true;
    if(nopeuslevu == 5) on3 = false;
    else if(levurajoitus != 0 && nopeuslevu == 3) on3 = false;
    else on3 = true;
    if(hakeutuvuuslevu == 5) on4 = false;
    else if(levurajoitus != 0 && hakeutuvuuslevu == 3) on4 = false;
    else on4 = true;
    //piirretään exppalkit
    if(!on1 || showexpgoals == 0) piirrakuva2(exppalkkityhja, 75, 62);
    else piirrakuva2(exppalkki[vahinkolevu], 75, 62);
    if(!on2 || showexpgoals == 0) piirrakuva2(exppalkkityhja, 75, 162);
    else piirrakuva2(exppalkki[tarkkuuslevu], 75, 162);
    if(!on3 || showexpgoals == 0) piirrakuva2(exppalkkityhja, 75, 262);
    else piirrakuva2(exppalkki[nopeuslevu], 75, 262);
    if(!on4 || showexpgoals == 0) piirrakuva2(exppalkkityhja, 75, 362);
    else piirrakuva2(exppalkki[hakeutuvuuslevu], 75, 362);
    //piirretään expat
    piirraexpluku(vahinkoexpa, 1);
    piirraexpluku(tarkkuusexpa, 2);
    piirraexpluku(nopeusexpa, 3);
    piirraexpluku(hakeutuvuusexpa, 4);
    //piirretään levelipalkit
    if(on1) {
            if(vahinkolevu == 0) piirrakuva2(levelipalkki[int(floor(vahinkoexpa / float(levuraja[0]) * 130))], 75, 62);
            else piirrakuva2(levelipalkki[int(floor((vahinkoexpa - float(levuraja[vahinkolevu - 1])) / (float(levuraja[vahinkolevu]) - float(levuraja[vahinkolevu - 1])) * 130))], 75, 62);
    }
    if(on2) {
            if(tarkkuuslevu == 0) piirrakuva2(levelipalkki[int(floor(tarkkuusexpa / float(levuraja[0]) * 130))], 75, 162);
            else piirrakuva2(levelipalkki[int(floor((tarkkuusexpa - float(levuraja[tarkkuuslevu - 1])) / (float(levuraja[tarkkuuslevu]) - float(levuraja[tarkkuuslevu - 1])) * 130))], 75, 162);
    }
    if(on3) {
            if(nopeuslevu == 0) piirrakuva2(levelipalkki[int(floor(nopeusexpa / float(levuraja[0]) * 130))], 75, 262);
            else piirrakuva2(levelipalkki[int(floor((nopeusexpa - float(levuraja[nopeuslevu - 1])) / (float(levuraja[nopeuslevu]) - float(levuraja[nopeuslevu - 1])) * 130))], 75, 262);
    }
    if(on4) {
            if(hakeutuvuuslevu == 0) piirrakuva2(levelipalkki[int(floor(hakeutuvuusexpa / float(levuraja[0]) * 130))], 75, 362);
            else piirrakuva2(levelipalkki[int(floor((hakeutuvuusexpa - float(levuraja[hakeutuvuuslevu - 1])) / (float(levuraja[hakeutuvuuslevu]) - float(levuraja[hakeutuvuuslevu - 1])) * 130))], 75, 362);
    }
    
    //luodaan toinen (tumma) tempruutu, johon on piirretty kauppatausta ja -teksti valmiiksi - vähentää lagia, kun ei kasauduta
    piirtokohta = tempruutu2;
    piirrakuva2(tempruutu, 0, 0);
    SDL_SetAlpha(mustafade, SDL_SRCALPHA, 200);
    piirrakuva2(mustafade, 0, 0);
    piirrakuva2(kauppakuva, 200, 100);
    piirrakuva(kauppateksti, 400, 50);
    
    //piirretään taas ruudulle
    piirtokohta = ruutu;
    
    bool pois1 = false; //aloita poistuminen
    bool pois2 = false; //ulos loopista!
    bool meneescmenuun = false;
    bool vapautaesc = true;
    float kasautuminen = 0;
    short int kauppakuvakohtay;
    short int valinta = 0;
    short int prewvalinta = 0;
    
    soitaaani(kauppaaani); //ääni
    
    //tästä alkaa kaupan looppi
    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-= 1.75;
                 if(pois1 && kasautuminen < 1.75) pois2 = true;
                 if(kasautuminen < 40) SDL_SetAlpha(mustafade, SDL_SRCALPHA, int(round(kasautuminen * 5)));
                 else SDL_SetAlpha(mustafade, SDL_SRCALPHA, 200);
                 if(kasautuminen < 60) kauppakuvakohtay = 600 + int(round(0.5 * 0.65 * pow(kasautuminen - 20, 2) - 25.5 * (kasautuminen - 20)));
                 else kauppakuvakohtay = 100;
                 
                 //testataan onko hiiri nappien päällä - valintaa ei enää muuteta poistuttaessa
                 if(kasautuminen > 60 && hiirix > 455 && hiirix < 535) {
                           if(on1 && hiiriy > 127 && hiiriy < 170) valinta = 1;
                           else if(on2 && hiiriy > 227 && hiiriy < 270) valinta = 2;
                           else if(on3 && hiiriy > 327 && hiiriy < 370) valinta = 3;
                           else if(on4 && hiiriy > 427 && hiiriy < 470) valinta = 4;
                           else valinta = 0;
                 }
                 else if(kasautuminen > 60) valinta = 0;
                 
                 //testataan irroitettiinko hiiri napin päällä - sitten voidaan poistua
                 if(kasautuminen > 60 && valinta != 0 && hiiriprewekanappi && !hiiriekanappi) {
                                 pois1 = true;
                                 kasautuminen = 60;
                                 soitaaani(nappi2); //ääni
                 }
                 
                 //nappiäänet
                 if(hiiriekanappi && !hiiriprewekanappi && valinta != 0 && kasautuminen > 60) soitaaani(nappi1);
                 else if(valinta != prewvalinta && valinta != 0) {
                            if(hiiriekanappi) soitaaani(nappi1);
                            else soitaaani(nappion);
                 }
                 
                 //ESC-nappi
                 if(!vapautaesc && !pelaajaninputit[SDLK_ESCAPE]) vapautaesc = true; //vapautetaan esc-nappi
                 if(pelaajaninputit[SDLK_ESCAPE] && vapautaesc) {
                           soitaaani(nappi2); //ääni
                           meneescmenuun = true;
                           piirtokohta = tempruutuesc; //piirretäänkin kaikki tempruudulle, kun mennään escmenuun
                 }
                 
                      //Piirretään kaikki
                 if(kasautuminen < 60) {
                                 piirrakuva2(tempruutu, 0 ,0);
                                 piirrakuva2(mustafade, 0, 0);
                 }
                 else piirrakuva2(tempruutu2, 0, 0);
                 if(kasautuminen < 60 && kasautuminen > 20) {
                                 piirrakuva2(kauppakuva, 200, kauppakuvakohtay);
                                 piirrakuva(kauppateksti, 400, 150 - kauppakuvakohtay);
                 }
                 //napit
                 if(!on1) piirrakuva2(kauppanappi2, 438, kauppakuvakohtay + 10);
                 else if(valinta == 1) piirrakuva2(kauppanappi3, 438, kauppakuvakohtay + 10);
                 else piirrakuva2(kauppanappi1, 438, kauppakuvakohtay + 10);
                 if(!on2) piirrakuva2(kauppanappi2, 438, kauppakuvakohtay + 110);
                 else if(valinta == 2) piirrakuva2(kauppanappi3, 438, kauppakuvakohtay + 110);
                 else piirrakuva2(kauppanappi1, 438, kauppakuvakohtay + 110);
                 if(!on3) piirrakuva2(kauppanappi2, 438, kauppakuvakohtay + 210);
                 else if(valinta == 3) piirrakuva2(kauppanappi3, 438, kauppakuvakohtay + 210);
                 else piirrakuva2(kauppanappi1, 438, kauppakuvakohtay + 210);
                 if(!on4) piirrakuva2(kauppanappi2, 438, kauppakuvakohtay + 310);
                 else if(valinta == 4) piirrakuva2(kauppanappi3, 438, kauppakuvakohtay + 310);
                 else piirrakuva2(kauppanappi1, 438, kauppakuvakohtay + 310);
                 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;
                                            valinta = 5;
                      }
                      laskefps();
                      
     //mennään escmenuun
     if(meneescmenuun) {
            meneescmenuun = false;
            vapautaesc = false; //lukitaan esc-nappi
            if(escmenu()) { //poistutaan menuun
                 pois2 = true;
                 valinta = 6; //tämä on omansa
            }
            if(kokonaanpois) { //poistutaan kokonaan
                 pois2 = true;
                 valinta = 5;
            }
     }
    //tähän loppuu kaupan looppi
    }
    return valinta;
}
