#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "c2d2/chien2d2.h"
#include "c2d2/chien2d2primitivas.h"
#include "c2d2/chienaudio2.h"

#define altura_chao 400

#include "ajuda.h"
#include "Carrega_Recursos.h"
#include "creditos.h"
#include "Descarrega_Recursos.h"
#include "tela_venceu.h"
#include "menu.h"
#include "Pause.h"
#include "telajogo.h"
#include "Log.h"
#include "fase.h"
#include "objetos_randomicos.h"

bool encerra=false;

int estadoatual=1;
int fase = 1;
int vel_coracao = 0;
int pause_saida = 0;
int sai_fase=0;
int som_cnt=0;

unsigned int fonte32=0;
unsigned int fonte64=0;
unsigned int botao_jogar=0;
unsigned int botao_ajuda = 0;
unsigned int botao_creditos=0;
unsigned int botao_menu = 0;
unsigned int botao_voltar=0;
unsigned int botao_sair=0;
unsigned int botao_proximo = 0;
unsigned int spmira=0;
unsigned int titulo=0;
unsigned int pause = 0;
unsigned int score = 0;
unsigned int medset = 0;
unsigned int injetar = 0;
unsigned int fundo = 0;
unsigned int win = 0;
unsigned int gameover = 0;
unsigned int som_tocando1 = 0; 
unsigned int som_tocando2 = 0;
unsigned int som_tocando3 = 0;
unsigned int som_tocando4 = 0;
unsigned int som_tocando5 = 0;
unsigned int som_tocando6 = 0;
unsigned int som_tocando7 = 0;
unsigned int som_tocando8 = 0;

char text_vel[5];
char mednum[50], mednum1[50], mednum2[50], mednum3[50], mednum4[50], mednum5[50];
char f2mednum[50], f2mednum1[50], f2mednum2[50], f2mednum3[50], f2mednum4[50], f2mednum5[50];
char f3mednum[50], f3mednum1[50], f3mednum2[50], f3mednum3[50], f3mednum4[50], f3mednum5[50];

int medcount = 0, medcount1 = 0, medcount2 = 0, medcount3 = 0, medcount4 = 0, medcount5 = 0;
int f2medcount = 0, f2medcount1 = 0, f2medcount2 = 0, f2medcount3 = 0, f2medcount4 = 0, f2medcount5 = 0;
int f3medcount = 0, f3medcount1 = 0, f3medcount2 = 0, f3medcount3 = 0, f3medcount4 = 0, f3medcount5 = 0;

unsigned int  text_chao[4],text_parede[3],text_teto[3];//onde é armazenadp
unsigned int musicas[2];//musicas do jogo...
unsigned int sons[2];//efeitos sonoros do jogo...
unsigned int objetos_sprites[6];

bool player_possui_chave=false;//armazena informação se player pegou a chave

int objeto_e_chave;//marca qual objeto é uma chave
int objetos[6];//Possui três objetos ou menos, cada objeto irá armazenar um número que irá fazer referência a qual objeto está na tela
int objetos_posx[6];//Posição horizontal dos objetos
int objetos_posy[6];//Posição vertical dos objetos
int objetos_tamanho_x[6];//define o tamanho horizontal do objeto
int objetos_tamanho_y[6];//define o tamanho vertical do objeto

int jogador_animacao;//Salva a sprite que o jogador está
int jogador_move_direita_inicio=6;//armazena onde inicia as sprites do player andando
int jogador_move_direita_fim=8;//armazena onde termina as sprites do player andando
int jogador_move_esquerda_inicio=3;//armazena onde inicia as sprites do player andando
int jogador_move_esquerda_fim=5;//armazena onde termina as sprites do player andando
int jogador_sprite_pula=0;//armazena a posição do vetor de onde está a sprite de pular
int jogador_sprite_abaixa=9;//armazena a posição do vetor onde está a sprite de abaixar
int jogador_sprite_parado=0;//armazena a posição do vetor onde está a sprite de ficar parado
int jogador_sprite_dormindo=11;//...
int jogador_pos_x=500;
int jogador_pos_y=400-32;
int jogador_tamanho_x;
int jogador_tamanho_y;
int jogador_aceleracao_x;//velocidade horizontal
int jogador_aceleracao_y;//velocidade vertical
int jogador_pulo_cnt=0;//conta o tempo que o player fica no ar
extern bool randomiza_coisas=true;
unsigned int jogador;
unsigned int textura_gato[12];
int textura_chao=0;
int textura_teto=0;
int textura_parede=0;
int chave_setor;
int porta_chave;
int porta_setor;
int jogador_setor;
ArquivoLog *Log = AlocaLog();

int tempo_jogo=600;//600 segundos

 int main(int narg, char **valarg)

{
	BuscaArquivoLog(Log);

	srand(time_t(0));
	if(C2D2_Inicia(800, 600, C2D2_JANELA, C2D2_DESENHO_PADRAO, "Unconscious"))
		printf("Chiend2D2 initialized.\n");
	else
	{
		printf("Failed to initialized Chien2D2. Closing.\n");
		return 0;
	}
	C2D2P_Inicia();
	if(CA2_Inicia()){
		printf("Audio initialized.\n");
	}
	else
		printf("Failed to initialized the audio.\n");
    if(CarregaRecursos())
    {
        do
	    {
            switch(estadoatual)
            {
                case 1:
                    TelaPrincipal();
                    break;
                case 2:
                    TelaJogo();
                    break;
                case 3:
                    TelaCreditos();
                    break;
				case 4:
					TelaPause();
					break;
				case 5:
					Fase();
					randomiza_coisas=true;
					zera_objetos();
					sai_fase = 0; // FORÇA A ZERAR
					break;
				case 8:
					TelaAjuda();
					break;
				case 10:
					Win();
					break;
                default:
                    encerra=true;
                    break;
            }
			CA2_FadeMusica(0);
	    }
	    while(!encerra);
    }
    DescarregaRecursos();
	CA2_Encerra();
	C2D2_Encerra();
	fclose(Log->Arq);
	free(Log);
	return 0;
}