#include "MW4Headers.hpp"
#include "hudcomp.hpp"
#include "HUDhelparrow.hpp"

using namespace MechWarrior4;

HUDHelpArrow::HUDHelpArrow()
{
	AddTexture ("hud\\hud4",0,9,167,55,191);
	Point3D size;
	size = m_Textures[0]->Size ();
	m_Textures[0]->Origin (size.x,size.y/2.0f);
	m_Textures[0]->Clip (true);
	Size (size);
	m_AlphaTime = 0;
	m_Alpha = 255;
	m_GoalTime = 0;
	m_RotationDelta = 0;
	m_XDelta = 0;
	m_YDelta = 0;
}

HUDHelpArrow::~HUDHelpArrow()
{
}

void HUDHelpArrow::Update (Time till)
{
	if (m_AlphaTime == 0)
		m_AlphaTime = till;

	while (m_AlphaTime <= till)
	{
		m_Alpha +=20;
		if (m_Alpha >= 255)
			m_Alpha = 15;
		m_AlphaTime += 1.0/30.0;
	}

	if (m_GoalTime != 0)
	{
		if ((Scalar)gos_GetElapsedTime() > m_GoalTime)
		{
			m_GoalTime = 0;
		}
		else
		{
			const Scalar time_delta = (Scalar)gos_GetElapsedTime() - m_LastUpdate;

			m_Location.x += m_XDelta * time_delta;
			m_Location.y += m_YDelta * time_delta;
			m_Rotation += m_RotationDelta * time_delta;

			m_LastUpdate = (Scalar)gos_GetElapsedTime();
		}
	}

	inherited::Update (till);
}

void HUDHelpArrow::DrawImplementation(void)
{
	Point3D loc,size;
	DWORD color;
	loc = Location ();
	size = Size ();
	color = Color ();
	color = (color & 0x00ffffff) + ((m_Alpha&0xff)<<24);
	m_Textures[0]->Rotate (m_Rotation);
	m_Textures[0]->Draw (loc,size,color,HUDTexture::NO_FLIP,true);
}

void HUDHelpArrow::SetParams(Scalar rotation, Scalar x, Scalar y, int color, int time)
{
	Color(color);

	if (time > 0)
	{
		m_GoalTime = (Scalar)gos_GetElapsedTime() + (Scalar)time;

		m_RotationDelta = (m_Rotation - rotation) / (Scalar)time;

		m_XDelta = (x - m_Location.x) / (Scalar)time;
		m_YDelta = (y - m_Location.y) / (Scalar)time;
		return;
	}

	m_XDelta = 0;
	m_YDelta = 0;

	m_GoalTime = 0;
	Point3D location(x,y,0.9f);
	Location(location);
	SetRot(rotation);
	m_LastUpdate = (Scalar)gos_GetElapsedTime();
}
