#include <math.h>
#include "Graphics.h"
 
Graphics graphics;
bool key_states[256];

//estrutura de informacoes da nave
typedef struct nave{
	Image imagemNormal;
	float pos_x;
	float pos_y;
	float velocidade;
} Nave;

Nave player;

//funcao de loop principal do jogo
void MainLoop()
{	
    if (key_states[KEY_LEFT] == true) //se a seta da esquerda for pressionada
	{
		//movimenta a nave para tras
		player.pos_x = player.pos_x - (player.velocidade * graphics.GetElapsedTime());
	}
	if (key_states[KEY_RIGHT] == true) //se a seta da direita for pressionada
	{
		//movimenta a nave para frente
		player.pos_x = player.pos_x + (player.velocidade * graphics.GetElapsedTime());
	}
	if (key_states[KEY_UP] == true) //se a seta para cima for pressionada
	{
		//movimenta a nave para cima
		player.pos_y = player.pos_y + (player.velocidade * graphics.GetElapsedTime());
	}
	if (key_states[KEY_DOWN] == true) //se a seta para baixo for pressionada
	{
		//movimenta a nave para baixo
		player.pos_y = player.pos_y - (player.velocidade * graphics.GetElapsedTime());
	}
	
	//desenha a nave na posicao pos_x e pos_y da tela
	graphics.DrawImage2D(player.pos_x, player.pos_y, 128, 128, player.imagemNormal);

}

//Funcao para verificar o pressionamento de teclas do teclado
void KeyboardInput(int key, int state, int x, int y)
{ 
    if (state == KEY_STATE_DOWN)
        key_states[key] = true;
    else if (state == KEY_STATE_UP)
        key_states[key] = false;
}
 
int main(void)
{
	//cria janela para o jogo
	graphics.CreateMainWindow(800, 600, "Oficina de Engenharia da Computação");
    //define a cor de fundo da tela: preto (RGB - 0,0,0)
	graphics.SetBackgroundColor(0, 0, 0);
 
	//carrega a imagem da nave que esta na pasta Images
	player.imagemNormal.LoadPNGImage("Images/hero-ship.png");    
	
	//define a posicao inicial e a velocidade da nave
	player.pos_x = 100;
	player.pos_y = 250;
	player.velocidade = 200;	
 
	//define as funcoes de pressionamento de teclas e loop do aplicativo
    graphics.SetKeyboardInput(KeyboardInput);
    graphics.SetMainLoop(MainLoop);

	//inicia o loop do aplicativo
    graphics.StartMainLoop();
    return 0;
}