#include <hge.h>
#include <hgesprite.h>
#include <hgeparticle.h>
#include <math.h>
#include <mmsystem.h>
#include "Missiles.h" 
#include "Global.h"



TMissiles::TMissiles(HTEXTURE BulletType)
{
	ZeroMemory(bullets, sizeof(bullets));
	MaxBullets = 0;
	ShotTime = 100;
	MDownLeft = false;

	BulletType = hge->Texture_Load("Missiles.png");
	sprBulletType1 = new hgeSprite(BulletType, 0, 0, 16, 16);
	sprBulletType1->SetHotSpot(8, 8);
}

TMissiles::Add()
{
	int Index = -1;

	for(int i=0; i<1000; i++)//ищем пустое место для пули
	{
		if(bullets[i].type==0)
		{
			Index = i;
			break;
		}
	}

	if(Index != -1)//Если нашли место - помещаем туда пулю
	{
		hge->Input_GetMousePos(&MX, &MY);
		bullets[Index].dx = (MX+X - PosX)/(MY+Y - PosY);
		bullets[Index].dy = (MY+Y - PosY)/(MX+X - PosX);
		bullets[Index].lenght = 0;
		bullets[Index].MaxLenght = 1000;
		bullets[Index].rotation = atan2(PosX - (MX+X), PosY - (MY+Y))*180/3.1415926535;
		if(bullets[Index].rotation>0) bullets[Index].rotation = 360 - bullets[Index].rotation;
		else bullets[Index].rotation *= -1;
		bullets[Index].rotation *= (3.1415926535/180);
		bullets[Index].speed = 1500;
		bullets[Index].ttx = PosX;
		bullets[Index].tty = PosY;
		bullets[Index].type = 1;
		if(Index == MaxBullets) MaxBullets++; //Больше 1000 не получиться т.к. Index ограничивается в цикле поиска пустого места.
	}
}

TMissiles::Delete(int Index)
{
	if(bullets[Index].ttx != 16 && bullets[Index].tty != 16)//тут какой-то баг
	{
		bullets[Index].dx = 0;
		bullets[Index].dy = 0;
		bullets[Index].lenght = 0;
		bullets[Index].rotation = 0;
		bullets[Index].speed = 0;
		bullets[Index].ttx = 0;
		bullets[Index].tty = 0;
		bullets[Index].type = 0;
		while(bullets[MaxBullets-1].type==0)
			MaxBullets--;
	}
}

TMissiles::Update(float dt)
{
	for(int i=0; i<MaxBullets;i++)
	{
		if(bullets[i].type != 0)
		{
			//+Перемещение
			hge->Input_GetMousePos(&MX, &MY);
			dx = sin(bullets[i].rotation)*bullets[i].speed*dt;
			dy = cos(bullets[i].rotation)*bullets[i].speed*dt;
			bullets[i].ttx += dx;
			bullets[i].tty -= dy;
			bullets[i].lenght += sqrt(dx*dx+dy*dy);
			//-Перемещение

			//+Выход за границы поля
			if(bullets[i].ttx < -100 || bullets[i].tty < -100 || bullets[i].ttx>2100 || bullets[i].tty>1400 || bullets[i].lenght > bullets[i].MaxLenght)
 				Delete(i);
			//-Выход за границы поля

		}
	}

	if(hge->Input_KeyDown(HGEK_LBUTTON))
		MDownLeft = true;
	else if(hge->Input_KeyUp(HGEK_LBUTTON))
		MDownLeft = false;

	if(MDownLeft==true && ShotTime>0.1) //ShotTime - задержка между выстрелами
	{
		Add();
		ShotTime = 0;
	}



	ShotTime += dt;
}

TMissiles::Render(float X, float Y)
{
	for(int i=0; i<MaxBullets;i++)
	{
		if(bullets[i].type != 0)
		{
			sprBulletType1->RenderEx(bullets[i].ttx-X, bullets[i].tty-Y, bullets[i].rotation, 1.0, 0);
		}
	}
}

