/*********************************************************************//**
*	HUD Level report
*	Okno zobrazuje vysledky hrani levelu po jeho dokonceni.	
*
*	author: Michal Jirous
*	date: 24.11.2008
*	file: HUD_level_report.cpp
**********************************************************************/


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

LevelReportWindow::LevelReportWindow()
{
	onInit();
	HUDBaseWindowInit();
	setCaption( textLibrary::getText( TXT_LEVELREPORT ), "REGULAR", FONT_ALIGN_LEFT );
	m_bReportCreated = false;
	m_fAnimation = 0.0f;
	m_bAnimation = false;
}


void LevelReportWindow::onDefault()
{
	float x = (systemconf::getSystemInfo().m_iResolutionWidth-HUD_LEVEL_REPORT_WIDTH) * vardef::HUD_LEVEL_REPORT_WIN_X_DEFAULT;
	float y = (systemconf::getSystemInfo().m_iResolutionHeight-HUD_LEVEL_REPORT_HEIGHT) * vardef::HUD_LEVEL_REPORT_WIN_Y_DEFAULT;
	setPosition( x, y );
}

void LevelReportWindow::onCancel()
{
	float x = (systemconf::getSystemInfo().m_iResolutionWidth-HUD_LEVEL_REPORT_WIDTH) * gamevarsLibrary::getfData( vardef::HUD_LEVEL_REPORT_WIN_X );
	float y = (systemconf::getSystemInfo().m_iResolutionHeight-HUD_LEVEL_REPORT_HEIGHT) * gamevarsLibrary::getfData( vardef::HUD_LEVEL_REPORT_WIN_Y );
	setPosition( x, y );
}

void LevelReportWindow::onSave()
{
	float x = m_fGlobalXpos / (systemconf::getSystemInfo().m_iResolutionWidth-HUD_LEVEL_REPORT_WIDTH);
	float y = m_fGlobalYpos / (systemconf::getSystemInfo().m_iResolutionHeight-HUD_LEVEL_REPORT_HEIGHT);
	gamevarsLibrary::setVariable( vardef::HUD_LEVEL_REPORT_WIN_X, x );
	gamevarsLibrary::setVariable( vardef::HUD_LEVEL_REPORT_WIN_Y, y );
}

void LevelReportWindow::onInit()
{
	m_fWidth = HUD_LEVEL_REPORT_WIDTH;
	m_fHeight = HUD_LEVEL_REPORT_HEIGHT;
	m_fGlobalXpos = (systemconf::getSystemInfo().m_iResolutionWidth-HUD_LEVEL_REPORT_WIDTH) * gamevarsLibrary::getfData( vardef::HUD_LEVEL_REPORT_WIN_X );
	m_fGlobalYpos = (systemconf::getSystemInfo().m_iResolutionHeight-HUD_LEVEL_REPORT_HEIGHT) * gamevarsLibrary::getfData( vardef::HUD_LEVEL_REPORT_WIN_Y );
	/*m_ValueHolder.setColorCritical( HUD::HUD_COLOR_CRITICAL );
	m_ValueHolder.setColorDefault( HUD_HEALTH_COLOR );
	m_ValueHolder.setCriticalValue( CRITICAL_HEALTH );
	m_ValueHolder.setColorHighLighted( HUD_HEALTH_HIGHLIGHTED );*/
	m_dsDeadMessage.create( textLibrary::getText( TXT_YOU_ARE_DEAD ), "GAMETEXT", FONT_ALIGN_CENTER );
}

void LevelReportWindow::componentDraw( ScissorBox &scissorBox )
{
	if( game.m_bLevelFinnished )
	{
		glPushAttrib( GL_ENABLE_BIT  | GL_CURRENT_BIT );
		
		glDisable( GL_SCISSOR_TEST );
		glEnable( GL_BLEND );
		glDisable( GL_TEXTURE_2D );
		glDisable( GL_DEPTH_TEST );
		glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );


		if( game.m_pPlayer->isDeath() )
		{
			glPushMatrix();
			glColor4fv( HUL_LEVEL_REPORT_GAME_OVER.values );
			glTranslatef( m_ScissorBox.x + m_ScissorBox.w / 2.0f, m_ScissorBox.y + m_ScissorBox.h / 2.0f,0.0f );
			glScalef( m_fAnimation, m_fAnimation, 1.0f );

			m_dsDeadMessage.draw(0,0);

			glPopMatrix();
			m_dsReport.draw( m_ScissorBox.x, m_ScissorBox.y + m_dsReport.m_iHeight );
		}
		else
		{
			glColor4f( 0,0,0,0.5f);
			
			glBegin( GL_QUADS );
				glVertex2f( m_fGlobalXpos, m_fGlobalYpos );
				glVertex2f( m_fGlobalXpos + m_fWidth, m_fGlobalYpos );
				glVertex2f( m_fGlobalXpos + m_fWidth, m_fGlobalYpos + m_fHeight );
				glVertex2f( m_fGlobalXpos, m_fGlobalYpos +m_fHeight );
			glEnd();
			
			glColor4fv( HUD_LEVEL_REPORT_COLOR.values );
			m_dsReport.draw( m_ScissorBox.x, m_ScissorBox.y + m_ScissorBox.h );
		}
		
		

		glPopAttrib();

		//m_ValueHolder.draw( scissorBox.x + HUD_LEVEL_REPORT_BORDER, scissorBox.y + HUD_LEVEL_REPORT_BORDER, "HEALTH", m_fAlphaMultiplier  );
	}
}

#include "HUD_fade.h"

void LevelReportWindow::onRun()
{
	if( !game.m_bLevelFinnished )
		m_bReportCreated = false;

	if( game.m_bLevelFinnished && !m_bReportCreated )
	{
		m_bReportCreated = true;
		m_dsReport.create( game.m_sLevelReportString , "SERIF16", FONT_ALIGN_LEFT, (int)m_ScissorBox.w);

		if( game.m_pPlayer->isDeath() )
		{
			m_bAnimation = true;
			m_fAnimation = 0.0f;
			fadeEffect.startFade( Color( 1.0f,0.1f,0.1f), 6000, 1, 1, 0.0f, 0.6f, 0.6f, true );
		}
	}

	if( m_bAnimation )
	{
		if( m_fAnimation + 0.05f > 3.0f )
		{
			m_fAnimation = 3.0f;
			m_bAnimation = false;
			
		}
		else
			m_fAnimation += 0.05f;
	}
	

}
