/*


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


*/

//          global.hpp

#ifndef _GLOBAL_HPP
#define _GLOBAL_HPP 1

//globaalit includet
#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL/SDL_mixer.h>

//definet
#define PI 3.14159265

//globaalit muuttujat - muuttujien selitykset ja alustukset tiedostossa "main.hpp"
extern SDL_Surface *ruutu;
extern SDL_Surface *tempruutu;
extern SDL_Surface *tempruutu2;
extern SDL_Surface *tempruutuesc;
extern SDL_Surface *temptausta;
extern SDL_Surface *piirtokohta;
extern Uint8 *pelaajaninputit;
extern int hiirix, hiiriy, hiiriprewx, hiiriprewy;
extern bool hiiriekanappi, hiiriprewekanappi;
extern SDL_Rect hiirikohta;
extern Uint32 alkuaika, loppuaika;
extern SDL_Surface *reddot;
extern FILE *tiedosto;
#ifndef _WIN32
        extern FILE *logtiedosto;
#endif
extern char tiedostorivi[100];
extern char viesti[100];
extern bool kokonaanpois;
extern short int menuvalinta;
extern char nykyinenkartta[20];
extern bool voitto;
extern Uint8 focus;
extern char versio[10];
extern short int fullscreen;
extern short int fasterloading;
extern short int nosplash;
extern short int showloadingtime;
extern short int showfpseverywhere;
extern short int mapdebug;
extern short int mapdebugkeys;
extern short int showexpgoals;
extern short int showparticles;
extern short int sightsetting;

extern short int framerate;
extern short int frame;
extern int fps;
extern int fpssumma;
extern short int fpslaskuri;
extern int aikalaskuri;

extern Uint32 valkoinen;
extern Uint32 viivavari;
extern SDL_Surface *mustafade;
extern SDL_Surface *valkoinenfade;
extern int gfxpistevari[3];
extern int gfxviivavari[3];

extern short int aanenvoimakkuus;
extern short int musiikinvoimakkuus;
extern Mix_Music *pelimusiikki;
extern Mix_Music *menuintromusiikki;
extern Mix_Music *menumusiikki;
extern Mix_Chunk *ampu;
extern Mix_Chunk *ampu2;
extern Mix_Chunk *loppubasso;
extern Mix_Chunk *gameoverhit;
extern Mix_Chunk *tick;
extern Mix_Chunk *splat1;
extern Mix_Chunk *splat2;
extern Mix_Chunk *splat3;
extern Mix_Chunk *splat4;
extern Mix_Chunk *hit;
extern Mix_Chunk *hitzap;
extern Mix_Chunk *levelup;
extern Mix_Chunk *kauppaaani;
extern Mix_Chunk *nappi1;
extern Mix_Chunk *nappi2;
extern Mix_Chunk *nappion;

extern SDL_Surface *tausta;
extern SDL_Surface *taustaframe;
extern SDL_Surface *taustavasen;
extern SDL_Surface *taustaoikea;
extern SDL_Surface *taustaala;
extern SDL_Surface *taustavasen2;
extern SDL_Surface *taustaoikea2;
extern SDL_Surface *taustaala2;
extern SDL_Surface *fpslaatikko;
extern SDL_Surface *lataus;
extern SDL_Surface *latauspalkki;
extern SDL_Surface *slpash;

extern SDL_Surface *debugnumerot;
extern SDL_Surface *expnumerot;
extern SDL_Surface *expnumerot_red;
extern SDL_Surface *numerot;
extern SDL_Surface *fontti[4];

extern SDL_Surface *partikkeli1[3];
extern SDL_Surface *partikkeli2[5];
extern SDL_Surface *partikkeli3;

extern SDL_Surface *tykkikuva1;
extern SDL_Surface *tykki[46];
extern SDL_Surface *tykkialusta;
extern SDL_Surface *tykkitulikuva1[3][2];
extern SDL_Surface *tykkituli[3][2][46];
extern SDL_Surface *panoskuva;
extern SDL_Surface *panos[46];
extern SDL_Surface *panoscritkuva;
extern SDL_Surface *panoscrit[46];
extern SDL_Surface *pelitahtain;
extern SDL_Surface *menutahtain;
extern SDL_Surface *tahtain[110];
extern SDL_Surface *crittahtain;
extern SDL_Surface *efektikuvakeltainen2;
extern SDL_Surface *efektikuvakeltainen[5];
extern SDL_Surface *efektikuvapunainen2;
extern SDL_Surface *efektikuvapunainen[5];
extern SDL_Surface *nappipeliexit1;
extern SDL_Surface *nappipeliexit2;
extern SDL_Surface *aikasurvival;
extern SDL_Surface *aikajakaja;
extern SDL_Surface *aikaboss;
extern SDL_Surface *elamatkuva;
extern SDL_Surface *elamakuva;
extern float vihuminkoko;
extern float vihukokokerroin;
extern SDL_Surface *vihukuva2[4];
extern SDL_Surface *vihukuva[4][5];
extern SDL_Surface *vihukuollutkuva2[5];
extern SDL_Surface *vihukuollutkuva[5][5][10];
extern SDL_Surface *splatterkuva2[5];
extern SDL_Surface *splatterkuva[5][5][5][30];
extern SDL_Surface *vihukuva2keltainen;
extern SDL_Surface *vihukuvakeltainen[5][10];
extern SDL_Surface *vihukuvamusta;
extern SDL_Surface *vihukuollutkuva2musta;
extern SDL_Surface *vihukuollutkuvamusta[10];
extern SDL_Surface *splatterkuva2musta;
extern SDL_Surface *splatterkuvamusta[5][30];
extern SDL_Surface *vihukuva2nopea;
extern SDL_Surface *vihukuvanopea[5];
extern SDL_Surface *vihukuollutkuva2nopea;
extern SDL_Surface *vihukuollutkuvanopea[10];
extern SDL_Surface *splatterkuva2nopea;
extern SDL_Surface *splatterkuvanopea[5][30];
extern SDL_Surface *vihukuva7;
extern SDL_Surface *vihukuollutkuva7;
extern int levuraja[5];
extern int peruslevuraja[9];
extern SDL_Surface *exppalkki[15];
extern SDL_Surface *exppalkkityhja;
extern SDL_Surface *levelikuva[6];
extern SDL_Surface *levelikuva3;
extern SDL_Surface *peruslevelikuva[6];
extern SDL_Surface *levelipalkki[130];
extern SDL_Surface *expnumerot2;
extern SDL_Surface *expnumerot_100;
extern SDL_Surface *expnumerot_400;
extern SDL_Surface *expnumerot_1;
extern SDL_Surface *kauppatausta;
extern SDL_Surface *kauppanappi1;
extern SDL_Surface *kauppanappi2;
extern SDL_Surface *kauppanappi3;
extern SDL_Surface *kauppateksti;
extern SDL_Surface *kauppakuva;
extern SDL_Surface *menutausta;
extern SDL_Surface *otsikko;
extern SDL_Surface *nappitakaisin2;
extern SDL_Surface *nappitakaisin[3];
extern SDL_Surface *nappimored2;
extern SDL_Surface *nappimored[3];
extern SDL_Surface *nappimoreu2;
extern SDL_Surface *nappimoreu[3];
extern SDL_Surface *nappipelaa2;
extern SDL_Surface *nappipelaa[3];
extern SDL_Surface *nappiscores2;
extern SDL_Surface *nappiscores[4];
extern SDL_Surface *menunappinew1;
extern SDL_Surface *menunappinew2[3];
extern SDL_Surface *menunappiscores1;
extern SDL_Surface *menunappiscores2[3];
extern SDL_Surface *menunappisettings1;
extern SDL_Surface *menunappisettings2[3];
extern SDL_Surface *menunappicredits1;
extern SDL_Surface *menunappicredits2[3];
extern SDL_Surface *menunappiexit1;
extern SDL_Surface *menunappiexit2[3];
extern SDL_Surface *menunappitutorial1;
extern SDL_Surface *menunappitutorial2[3];
extern SDL_Surface *menunappistages1;
extern SDL_Surface *menunappistages2[3];
extern SDL_Surface *menunappisurvival1;
extern SDL_Surface *menunappisurvival2[3];
extern SDL_Surface *menunappicustommap1;
extern SDL_Surface *menunappicustommap2[3];
extern SDL_Surface *mappinappi0;
extern SDL_Surface *mappinappilock;
extern SDL_Surface *mappinappiok;
extern SDL_Surface *mappinappi[5];
extern SDL_Surface *mapnappifade;
extern SDL_Surface *escmenutausta;
extern SDL_Surface *escmenuteksti;
extern SDL_Surface *escmenunappi1;
extern SDL_Surface *escmenunappi2;
extern SDL_Surface *escmenunappi3;
extern SDL_Surface *escmenunappi4;
extern SDL_Surface *statsteksti;
extern SDL_Surface *statsdash;
extern SDL_Surface *statsscore;
extern SDL_Surface *statsmasterpiece1;
extern SDL_Surface *statsmasterpiece2;
extern SDL_Surface *statscontinue2;
extern SDL_Surface *statscontinue[3];
extern SDL_Surface *statspalkki[225];
extern SDL_Surface *gameoverfade;
extern SDL_Surface *gameoverteksti;
extern SDL_Surface *gameoverrikki;
extern int gameoverkohta;
extern SDL_Surface *newhstausta;
extern SDL_Surface *newhspalkki;
extern SDL_Surface *newhsteksti;
extern SDL_Surface *newhstype;
extern SDL_Surface *stageplaynext;
extern SDL_Surface *stageretry;
extern SDL_Surface *stagecompleted;
extern SDL_Surface *stageyes2;
extern SDL_Surface *stageyes[3];
extern SDL_Surface *stageno2;
extern SDL_Surface *stageno[3];
extern SDL_Surface *stageok2;
extern SDL_Surface *stageok[3];
extern SDL_Surface *settingstekstit;
extern SDL_Surface *settingspalkki1;
extern SDL_Surface *settingspalkki2;
extern SDL_Surface *settingsboth1;
extern SDL_Surface *settingsboth2;
extern SDL_Surface *settingscircle1;
extern SDL_Surface *settingscircle2;
extern SDL_Surface *settingsline1;
extern SDL_Surface *settingsline2;
extern SDL_Surface *settingsoff1;
extern SDL_Surface *settingsoff2;
extern SDL_Surface *settingson1;
extern SDL_Surface *settingson2;
extern SDL_Surface *tutorialnuoli;
extern SDL_Surface *tutorialcontinue2;
extern SDL_Surface *tutorialcontinue[3];

       //globaalit funktiot
//aanifunktiot.cpp
void soitamusiikki(Mix_Music *musiikki, const short int loopit);
void soitaaani(Mix_Chunk *aani);
//alustus.cpp
extern void latausruutu(const short int kerrat);
extern SDL_Surface *lataapng(const char *nimi);
extern SDL_Surface *lataapngalpha(const char *nimi);
extern SDL_Surface *optimoi(SDL_Surface *pinta);
extern SDL_Surface *optimoialpha(SDL_Surface *pinta);
extern Mix_Music *lataamusiikki(const char *nimi);
extern Mix_Chunk *lataaaani(const char *nimi);
//asetukset.cpp
extern void asetusruutu();
//asetustenlataus.cpp
extern void lataagfxasetukset();
extern void naytagfxvirhe();
extern void luogfxtiedosto();
extern void lataafsasetus();
extern void lataaasetukset();
extern void naytaasetusvirhe();
extern void luoasetustiedosto();
extern void tallennaasetukset();
//custommapit.cpp
extern void custommap();
//esc-menu.cpp
extern bool escmenu();
//funktioita.cpp
extern void naytavirhe(const char *teksti);
extern void log(const char *teksti);
extern void asetakartta(const char *teksti);
extern bool avaakartta();
extern bool avaahiscore();
extern bool avaahiscorew();
extern void luouusihiscoref();
extern void luoprogressf(const short kohta);
extern bool hoidatapahtumat();
extern void laskefps();
extern float laskekulma(const float alkux, const float alkuy, const float loppux, const float loppuy);
extern float laskeetaisyys(const float alkux, const float alkuy, const float loppux, const float loppuy);
//gameover.cpp
extern void gameoverf(bool hiscoret);
//kauppa.cpp
extern int kauppa();
//menu.cpp
extern void menu(float kasautuminen);
//naytahiscoret.cpp
extern void naytahiscoret(bool fadeus);
//newgame.cpp
extern void newgame(float kasautuminen);
//newhiscore.cpp
extern void newhiscore();
extern void luouusihiscoref();
//pelilooppi.cpp
extern void pelilooppi();
extern void luolevupartikkelit(const short int kohta);
//piirtofunktiot.cpp
extern void piirrakuva(SDL_Surface *tempkuva, const float kohtax, const float kohtay);
extern void piirrakuva2(SDL_Surface *tempkuva, const float kohtax, const float kohtay);
extern void piirrakuvataustaan(SDL_Surface *tempkuva, const float kohtax, const float kohtay);
extern void piirraanimoitukuva(SDL_Surface *tempkuva, const float kohtax, const float kohtay, const short int kuvanleveys, const short int kuvankorkeus, const short int kuva);
extern void piirraanimoitukuvataustaan(SDL_Surface *tempkuva, const float kohtax, const float kohtay, const short int kuvanleveys, const short int kuvankorkeus, const short int kuva);
extern void piirraviiva(const float alkux, const float alkuy, const float loppux, const float loppuy);
//splash.cpp
extern void splashruutu();
//stageloppu.cpp
extern void stageloppu();
//staget.cpp
extern void staget();
//stats.hpp
extern void stats(bool hiscoret);
//survivalmapit.cpp
extern void survival();
//tekijat.cpp
extern void tekijat();
extern 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);
//tekstifunktiot.cpp
extern void piirrateksti(const char *teksti, const float kohtax, const float kohtay, const short int fonttivalinta, const short int tasaus);
extern void piirrafloatluku(float luku, const short int kohtax, const short int kohtay);
extern void piirraluku(const int luku, const float kohtax, const float kohtay, bool vasen);
extern void piirraexpluku(const int luku, const short int paikka);
extern void piirraexplisays(float luku, const float kohtax, const float kohtay);
//tutorial.cpp
extern short int tutorial(short int vihuelossa);
extern bool tutorial2(short int vaihe);

#endif
