/*********************************************************************
*	HUD Energy
*	SOURCE FILE
*	Autor:	Michal Jirouš
*	Datum: 10.9.2008
*	Soubor: HUD_energy.cpp
*	Popis: Trida implementuje graficky prvek, ktery informuje o energii 
*			hrace
**********************************************************************/

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

EnergyWindow::EnergyWindow()
{
	m_uiTextureId = 0;
	onInit();
	HUDBaseWindowInit();
	setCaption( textLibrary::getText( TXT_ENERGY ), "REGULAR", FONT_ALIGN_LEFT );
	
}


void EnergyWindow::onDefault()
{
	float x = systemconf::getSystemInfo().m_iResolutionWidth * vardef::HUD_ENERGY_WIN_X_DEFAULT;
	float y = systemconf::getSystemInfo().m_iResolutionHeight-HUD_ENERGY_HEIGHT - (systemconf::getSystemInfo().m_iResolutionHeight-HUD_ENERGY_HEIGHT) * vardef::HUD_ENERGY_WIN_Y_DEFAULT;
	setPosition( x, y );
}

void EnergyWindow::onCancel()
{
	float x = systemconf::getSystemInfo().m_iResolutionWidth * gamevarsLibrary::getfData( vardef::HUD_ENERGY_WIN_X );
	float y = systemconf::getSystemInfo().m_iResolutionHeight-HUD_ENERGY_HEIGHT - (systemconf::getSystemInfo().m_iResolutionHeight-HUD_ENERGY_HEIGHT) * gamevarsLibrary::getfData( vardef::HUD_ENERGY_WIN_Y );
	setPosition( x, y );
}

void EnergyWindow::onSave()
{
	float x = m_fGlobalXpos / systemconf::getSystemInfo().m_iResolutionWidth;
	float y = (m_fGlobalYpos + systemconf::getSystemInfo().m_iResolutionHeight+HUD_ENERGY_HEIGHT) / (systemconf::getSystemInfo().m_iResolutionHeight-HUD_ENERGY_HEIGHT);
	gamevarsLibrary::setVariable( vardef::HUD_ENERGY_WIN_X, x );
	gamevarsLibrary::setVariable( vardef::HUD_ENERGY_WIN_Y, y );
}

void EnergyWindow::onInit()
{
	m_fWidth = HUD_ENERGY_WIDTH;
	m_fHeight = HUD_ENERGY_HEIGHT;
	m_fGlobalXpos = systemconf::getSystemInfo().m_iResolutionWidth * gamevarsLibrary::getfData( vardef::HUD_ENERGY_WIN_X );
	m_fGlobalYpos = systemconf::getSystemInfo().m_iResolutionHeight-HUD_ENERGY_HEIGHT - (systemconf::getSystemInfo().m_iResolutionHeight-HUD_ENERGY_HEIGHT) * gamevarsLibrary::getfData( vardef::HUD_ENERGY_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 );*/

	TextureElement element;
	element.image.setFilename( HUD_ENERGY_TEXTURE_FILE );

	if( textureLibrary.applyTexture( &element ) )
		m_uiTextureId = element.texture_id;

}

EnergyWindow::~EnergyWindow()
{
	if( m_uiTextureId )
		glDeleteTextures( 1, &m_uiTextureId );
}


void EnergyWindow::componentDraw( ScissorBox &scissorBox )
{
	if( game.m_pPlayer )
	{
		glPushAttrib( GL_ENABLE_BIT  | GL_CURRENT_BIT );
		
		glDisable( GL_SCISSOR_TEST );
		
		float energy = game.m_pPlayer->getEnergy();
	
		if( m_uiTextureId )
		{
			texBind( m_uiTextureId );
			glEnable( GL_TEXTURE_2D );
			glColor3f( 1.0f, 1.0f, 1.0f );
			glBlendFunc( GL_ONE, GL_ONE );
			glEnable( GL_BLEND );
		}
		else
		{
			glDisable( GL_TEXTURE_2D );
			glColor3f( 0.2f, 0.7f, 0.8f );
		}

		glBegin( GL_QUADS );
			glTexCoord2i(0,1);	glVertex2f( scissorBox.x, scissorBox.y + HUD_ENERGY_PANEL_HEIGHT );
			glTexCoord2i(0,0);	glVertex2f( scissorBox.x, scissorBox.y );
			glTexCoord2f(energy/100.0f,0);	glVertex2f( scissorBox.x+energy/100.0f*HUD_ENERGY_WIDTH, scissorBox.y );
			glTexCoord2f(energy/100.0f,1);	glVertex2f( scissorBox.x+energy/100.0f*HUD_ENERGY_WIDTH, scissorBox.y + HUD_ENERGY_PANEL_HEIGHT );
		glEnd();
		glPopAttrib();

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

void EnergyWindow::onRun()
{
	if( game.m_pPlayer )
	{
		/*int health = game.m_pPlayer->getHealth();
		m_ValueHolder.setValueHighLighted( health );
		m_ValueHolder.run();*/
	}
}
