/*********************************************************************//**
*	HUD Targets
*	Okno zobrazuje pocet sebranych a celkovy pocet veci ve scene.
*
*	author: Michal Jirous
*	date: 24.11.2008
*	file: HUD_targets.cpp
**********************************************************************/

#include "HUD_targets.h"
#include "ctrl_gamevars.h"
#include "ctrl_var_definition.h"
#include "sys_config.h"
#include "game.h"
#include "fonts.h"
#include "textLibrary.h"

TargetsWindow::TargetsWindow()
{
	m_uiCurrentTotalTargets = -1;
	onInit();
	HUDBaseWindowInit();
	setCaption( textLibrary::getText( TXT_TARGETS ), "REGULAR", FONT_ALIGN_LEFT );
	m_iZeroCharSize = -1;
	m_fAnimation = 0.0f;
	m_bAnimationUp = true;
}


void TargetsWindow::onDefault()
{
	float x = systemconf::getSystemInfo().m_iResolutionWidth-HUD_TARGETS_WIDTH - (systemconf::getSystemInfo().m_iResolutionWidth-HUD_TARGETS_WIDTH) * vardef::HUD_TARGETS_WIN_X_DEFAULT;
	float y = systemconf::getSystemInfo().m_iResolutionHeight-HUD_TARGETS_HEIGHT - (systemconf::getSystemInfo().m_iResolutionHeight-HUD_TARGETS_HEIGHT) * vardef::HUD_TARGETS_WIN_Y_DEFAULT;
	setPosition( x, y );
}

void TargetsWindow::onCancel()
{
	float x = systemconf::getSystemInfo().m_iResolutionWidth-HUD_TARGETS_WIDTH - (systemconf::getSystemInfo().m_iResolutionWidth-HUD_TARGETS_WIDTH) * gamevarsLibrary::getfData( vardef::HUD_TARGETS_WIN_X );
	float y = systemconf::getSystemInfo().m_iResolutionHeight-HUD_TARGETS_HEIGHT - (systemconf::getSystemInfo().m_iResolutionHeight-HUD_TARGETS_HEIGHT) * gamevarsLibrary::getfData( vardef::HUD_TARGETS_WIN_Y );
	setPosition( x, y );
}

void TargetsWindow::onSave()
{
	float x = (m_fGlobalXpos + systemconf::getSystemInfo().m_iResolutionWidth+HUD_TARGETS_WIDTH) / (systemconf::getSystemInfo().m_iResolutionWidth-HUD_TARGETS_WIDTH);
	float y = (m_fGlobalYpos + systemconf::getSystemInfo().m_iResolutionHeight+HUD_TARGETS_HEIGHT) / (systemconf::getSystemInfo().m_iResolutionHeight-HUD_TARGETS_HEIGHT);
	gamevarsLibrary::setVariable( vardef::HUD_TARGETS_WIN_X, x );
	gamevarsLibrary::setVariable( vardef::HUD_TARGETS_WIN_Y, y );
}

void TargetsWindow::onInit()
{
	m_fWidth = HUD_TARGETS_WIDTH;
	m_fHeight = HUD_TARGETS_HEIGHT;
	m_fGlobalXpos = systemconf::getSystemInfo().m_iResolutionWidth-HUD_TARGETS_WIDTH - (systemconf::getSystemInfo().m_iResolutionWidth-HUD_TARGETS_WIDTH) * gamevarsLibrary::getfData( vardef::HUD_TARGETS_WIN_X );
	m_fGlobalYpos = systemconf::getSystemInfo().m_iResolutionHeight-HUD_TARGETS_HEIGHT - (systemconf::getSystemInfo().m_iResolutionHeight-HUD_TARGETS_HEIGHT) * gamevarsLibrary::getfData( vardef::HUD_TARGETS_WIN_Y );
	m_ValueHolder.setColorCritical( HUD_TARGETS_COLOR );
	m_ValueHolder.setColorDefault( HUD_TARGETS_COLOR );
	m_ValueHolder.setCriticalValue( 0 );
	m_ValueHolder.setColorHighLighted( HUD_TARGETS_HIGHLIGHTED );

	m_dsFinnishMessage.create( "Exit", "HEALTH", FONT_ALIGN_CENTER, (int)m_fWidth );
}

void TargetsWindow::componentDraw( ScissorBox &scissorBox )
{
	if( game.m_pPlayer )
	{
		if( game.m_uiTotalGameTargets != game.m_uiTargetsDoneCount )
		{
			glPushAttrib( GL_CURRENT_BIT );
			float x_pos = scissorBox.x + scissorBox.w / 2.0f;
			m_ValueHolder.draw( x_pos - m_ValueHolder.m_sValue.length() * m_iZeroCharSize, scissorBox.y + HUD_TARGETS_BORDER, "OXYGEN", m_fAlphaMultiplier  );
			glColor4fv( HUD_TARGETS_COLOR.values );
			m_dsTotalTargets.draw( x_pos, scissorBox.y + HUD_TARGETS_BORDER + m_fLetterhalfHeight );
			glPopAttrib();
		}
		else
		{
			glPushMatrix();
			glTranslatef( m_fGlobalXpos + m_fWidth / 2.0f, m_fGlobalYpos + m_fHeight / 2.0f,0);
			//glColor4f( HUD_TARGETS_COLOR.values[0], HUD_TARGETS_COLOR.values[1], HUD_TARGETS_COLOR.values[2], 1.0f - m_fAnimation );
			glColor4fv( HUD_TARGETS_HIGHLIGHTED.values );
			//glPushMatrix();
			glScalef( 1+m_fAnimation,1+m_fAnimation,1);
		
			m_dsFinnishMessage.draw(0,0);
			glPopMatrix();
			//glColor4fv( HUD_TARGETS_COLOR.values );
			//m_dsFinnishMessage.draw(0,0);
		
			//glPopMatrix();
		}
	}
}

void TargetsWindow::onRun()
{
	if( game.m_pPlayer )
	{
		Uint32 targetsTaken = game.m_uiTargetsDoneCount;
		m_ValueHolder.setValueHighLighted( targetsTaken );
		m_ValueHolder.run();
		

		if( game.m_uiTotalGameTargets != m_uiCurrentTotalTargets )
		{
			m_uiCurrentTotalTargets = game.m_uiTotalGameTargets;
			ostringstream buf;
			buf << "/" << m_uiCurrentTotalTargets;
			m_dsTotalTargets.create( buf.str(),"OXYGEN");
		}

		if( m_iZeroCharSize == -1 )
		{
			Font *pFont = fontLibrary::getFont( "OXYGEN" );
			if( pFont )
			{
				m_iZeroCharSize = pFont->getCharacterWidth( '0' );
				m_fLetterhalfHeight = (float)(pFont->m_iLetterHeight>>1);
			}
		}

		if( m_bAnimationUp )
		{
			if( m_fAnimation + 0.02f > 0.3f )
			{
				m_fAnimation = 0.3f;
				m_bAnimationUp = false;
			}
			else
				m_fAnimation += 0.02f;
		}
		else 
		{
			if( m_fAnimation - 0.02f < 0.0f )
			{
				m_fAnimation = 0.0f;
				m_bAnimationUp = true;
			}
			else
				m_fAnimation -= 0.02f;
		}

	}
}
