/*


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


*/

//          pelilooppi.hpp

#ifndef _PELILOOPPI_HPP
#define _PELILOOPPI_HPP 1

//täällä on esitelty kaikki pelilooppi.cpp:n käyttämät muuttujat

     int i, j, k, l; //tempmuuttujia forreja ja muita varten
     float floati; //lisää tempmuuttujia
     bool pois = false; //milloin lähdetään pois peliloopista
     bool gameover = false;
     short int valinta = 0;
     short int prewvalinta = 0;
     
     //levut ja expat
     short int vahinkolevu = 0; //ei vaikutusta
     int vahinkoexpa = 0;
     short int tarkkuuslevu = 0; //suora vaikutus
     int tarkkuusexpa = 0;
     short int nopeuslevu = 0; //ei vaikutusta
     int nopeusexpa = 0;
     short int hakeutuvuuslevu = 0; //suora vaikutus
     int hakeutuvuusexpa = 0;
     short int levu = 0;
     int expa = 0;
     
     //asetukset
     bool onsurvival;
     int peliaika;
     bool onelamat;
     short int elamalkm;
     bool peliloppu = false;
     short int peliloppulaskuri = 0;
     short int levuteksti;
     int levutekstilaskuri = 1000;
     bool ontutorial;
     extern short int tutoriallaskuri;
     
     //kauppa ja esc
     bool menekauppaan = false;
     bool meneescmenuun = false;
     
     //yleislevu
     short int levurajoitus = 0; //1: joku levu on > 3, 2: kaikki levut täysillä
     int pisteet = 0;
     
     //tarkkuus
     float tarkkuusarvo = 25; //25 on max aluksi - tämä alustus ei jostain syystä aina toimi :/
     float tarkviivavx, tarkviivavy, tarkviivaox, tarkviivaoy;
     float tarkhiirikulma, tarkhiiriprewkulma, tarkhiirietaisyys;
     bool crittarkkuus = false;
     short int crittahtainkuva = 0;
     short int tahtainkoko;
     float tarkammukset = 0; //nämä kaksi ovat floatteja, jotta niiden suhde saadaan laskettua oikein
     float tarkosumat = 0;
     int tarkhiirix, tarkhiiriy;
     int tarkhiiriprewx, tarkhiiriprewy;
     
     //nopeus
     float odotus = 60; //aseta tähän alkuodotus, ennen kuin voi ampua
     float odotusmuutos = 60.0; //nämä kaksi ovat floatteja, jotta voisi käyttää myös desimaalilukuja aikoina
     short int nopeuslaskuri = 10000; //tämä kertoo kuinka paljon expaa saa joka taposta, aseta tähän joku hyvä luku alkuun
     float tykkitulilaskuri = 0; //kertoo tykin ampumisliekin kuvan
     short int tykkitulikuva = 0;
     float tykkitulisuunta = 0;
     
     //vahinko
     short int vahinko = 1; //panosken teho
     
                 //STRUCTIT
     //partikkeli
     struct partikkelistr {
            short int elossa;
            short int tyyppi; //kertoo käytettävän kuvan
            float nopeus;
            float kitka;
            float x;
            float y;
            float suunta;
     };

     //tämä toimii spawnerina
     const short int spawnmax = 256;
     struct karttavihu {
            char nimi[20];
            short int elossa; //onko tämä spawneri käytössä
            //kerrotaan vihun ominaisuudet
            short int tyyppi; //kertoo käytettävän kuvan - täytyy olaa >= 0 tai -1 (auto)
            short int arvo; //pistekerroin
            float nopeus; //mahdolliset nopeudet: (nopeus) -> (nopeus * (1 + nopeusrandom / 100))
            float nopeusrandom; //prosentteja
            short int koko; //mahdolliset arvot: 1-5
            short int energia;
            //kerrotaan spawnerin ominaisuudet
            int alku; //milloin spawneri käynnistyy ja sammuu sekunteina
            int loppu;
            float rate; //spawnien välinen aika sekunteina    //mahdolliset ratet: (rate) -> (rate * (1 + raterandom / 100))
            float raterandom; //prosentteja
            float minrate;
            float aika; //laskee ajan spawnien välillä
            float vaikeutuminen; //kuinka nopeasti rate pienenee
     };
     
     //ammus - nämä piirretään 10 pikseliä edelle
     const short int ammusmax = 12; //luvun pitää olla ceil[610 / nopeus(px/frame) / 3.5], nopeus = 15, nopeus on asetettu liikuttamiskohdassa
     float ammuseptarksuunta;
     float ammuseptarkmatka;
     struct ammusstr {
            short int elossa;
            float x;
            float y;
            float suunta;
            float suuntakohtax;
            float suuntakohtay;
            short int efekti; //efektin frame
            bool crit;
            short int tapot;
     };
     
     //explisäysnumero
     //kutakin expa numeroa voi kerralla olla kaksi ja levunumeroita yksi
     //0 on vahinkoexpa, 1 on tarkkuusexpa, ..., 20 on vahinko levu, 21 on tarkkuuslevu, ...
     //kyllä, siellä on ylimääräisiä
     struct explisaysstr {
            short int elossa;
            short int luku;
            float x;
            float y;
            float nopeus;
     };
     
     //vihulainen
     const short int vihumax = 256;
     struct vihustr {
            char nimi[100];
            short int elossa;
            short int tyyppi; //kertoo käytettävän kuvan
            short int arvo; //pistekerroin
            float vihunopeus; //tavoitenopeus
            float nopeusx; //todelliset nopeudet
            float nopeusy;
            float koko; //vihun säde lasketaan: ((vihu[i].koko - 1) * vihukokokerroin + vihuminkoko) / 2
            float x;
            float y;
            short int kuvasuunta; //keltaisen vihun käyttämä random suunta kuvalle
            short int vihuenergia; //alkuperäinen energia
            short int energia;
            bool lopussa; //onko vihu päässyt jo loppuun? - ei enää poistaa elämiä
     };
     
     //vihu splatter
     const short int vihusplattermax = 64;
     struct vihusplatterstr {
            short int elossa;
            short int frame;
            short int tyyppi; //kertoo käytettävän kuvan
            float nopeus;
            float koko;
            float x;
            float y;
            float suunta;
     };
     
     //vihu splatteremitter
     const short int vihusplatteremittermax = 8;
     struct vihusplatteremitterstr {
            short int elossa;
            short int frame;
            short int tyyppi; //kertoo käytettävän kuvan
            float nopeus;
            float koko;
            float x;
            float y;
            float suunta;
     };
     
#endif
