/*********************************************************************//**
*	HUD Crosshair
*	Trida implementuje a zobrazuje zamerovac.	
*
*	author: Michal Jirous
*	date: 10.9.2008
*	file: HUD_crosshair.cpp
**********************************************************************/

#include "HUD_crosshair.h"
#include "ctrl_gamevars.h"
#include "ctrl_var_definition.h"
#include "sys_config.h"

#include "textLibrary.h"

CrosshairWindow::CrosshairWindow()
{
	onInit();
	HUDBaseWindowInit();
	setCaption( textLibrary::getText( TXT_CROSSHAIR ), "REGULAR", FONT_ALIGN_LEFT );

	setSizeOffset( m_fWidth - m_ScissorBox.w,0 );
	setSizeOffset( 0,m_ScissorBox.w - m_ScissorBox.h );
	float x = systemconf::getSystemInfo().m_iResolutionWidth * gamevarsLibrary::getfData( vardef::HUD_CROSSHAIR_WIN_X )
		- m_ScissorBox.w / 2.0f - m_fPaddingLeft;
	float y = systemconf::getSystemInfo().m_iResolutionHeight * gamevarsLibrary::getfData( vardef::HUD_CROSSHAIR_WIN_Y )
		- m_ScissorBox.h/2.0f - m_fPaddingBottom;
	setPosition( x, y );
}


void CrosshairWindow::onDefault()
{
	float x = systemconf::getSystemInfo().m_iResolutionWidth * vardef::HUD_CROSSHAIR_WIN_X_DEFAULT;
	float y = systemconf::getSystemInfo().m_iResolutionHeight * vardef::HUD_CROSSHAIR_WIN_Y_DEFAULT;
	setPosition( x- m_ScissorBox.w / 2.0f - m_fPaddingLeft, y - m_ScissorBox.h/2.0f - m_fPaddingBottom);
}

void CrosshairWindow::onCancel()
{
	float x = systemconf::getSystemInfo().m_iResolutionWidth * gamevarsLibrary::getfData( vardef::HUD_CROSSHAIR_WIN_X );
	float y = systemconf::getSystemInfo().m_iResolutionHeight * gamevarsLibrary::getfData( vardef::HUD_CROSSHAIR_WIN_Y );
	setPosition( x - m_ScissorBox.w / 2.0f - m_fPaddingLeft, y - m_ScissorBox.h/2.0f - m_fPaddingBottom);
}

void CrosshairWindow::onSave()
{
	float x = (m_fGlobalXpos + m_ScissorBox.w / 2.0f + m_fPaddingLeft) / systemconf::getSystemInfo().m_iResolutionWidth;
	float y = (m_fGlobalYpos + m_ScissorBox.h/2.0f + m_fPaddingBottom) / systemconf::getSystemInfo().m_iResolutionHeight;
	gamevarsLibrary::setVariable( vardef::HUD_CROSSHAIR_WIN_X, x );
	gamevarsLibrary::setVariable( vardef::HUD_CROSSHAIR_WIN_Y, y );
}

void CrosshairWindow::onInit()
{
	m_fWidth = HUD_CROSSHAIR_WIDTH;
	m_fHeight = HUD_CROSSHAIR_HEIGHT;
	
	m_fGlobalXpos = systemconf::getSystemInfo().m_iResolutionWidth * gamevarsLibrary::getfData( vardef::HUD_CROSSHAIR_WIN_X )
		- m_ScissorBox.w / 2.0f - m_fPaddingLeft;
	m_fGlobalYpos = systemconf::getSystemInfo().m_iResolutionHeight * gamevarsLibrary::getfData( vardef::HUD_CROSSHAIR_WIN_Y )
		- m_ScissorBox.h/2.0f - m_fPaddingBottom;

	for( int i = 0; i < NUM_TEXTURES; i++ )
	{
		m_CrossHairTextures[i].image.setFilename( textures_names[i] );
		
		textureLibrary.applyTexture( &m_CrossHairTextures[i] );

	}

	m_uiCurrentCrosshair = CROSSHAIR_DEFAULT;

}

#include "mathematic.h"

void CrosshairWindow::setCrosshair( int id )
{
	m_uiCurrentCrosshair = getFromRange( id, (int)CROSSHAIR_NONE, (int)CROSSHAIR_HAND );
}

CrosshairWindow::~CrosshairWindow()
{
	for( int i = 0; i < NUM_TEXTURES; i++ )
		glDeleteTextures( 1, &m_CrossHairTextures[i].texture_id );
}

void CrosshairWindow::componentDraw( ScissorBox &scissorBox )
{
	if( m_uiCurrentCrosshair == CROSSHAIR_NONE )
		return;

	if( m_CrossHairTextures[m_uiCurrentCrosshair].texture_id )
	{
		glPushAttrib( GL_ENABLE_BIT | GL_CURRENT_BIT );
		glEnable( GL_TEXTURE_2D );
		glColor4f( 1.0f, 1.0f, 1.0f, m_fAlphaMultiplier );
		glBindTexture( GL_TEXTURE_2D, m_CrossHairTextures[m_uiCurrentCrosshair].texture_id );

		ImageInfo *info = &m_CrossHairTextures[m_uiCurrentCrosshair].image;
		glBegin( GL_QUADS );
		glTexCoord2i( 0,0 );	glVertex2f( m_ScissorBox.x + m_ScissorBox.w/2.0f - info->width/2, m_ScissorBox.y + m_ScissorBox.h / 2.0f -info->height/2.0f  );
			glTexCoord2i( 0,1 );	glVertex2f( m_ScissorBox.x + m_ScissorBox.w/2.0f - info->width/2, m_ScissorBox.y + m_ScissorBox.h / 2.0f +info->height/2.0f );
			glTexCoord2i( 1,1 );	glVertex2f( m_ScissorBox.x + m_ScissorBox.w/2.0f + info->width/2, m_ScissorBox.y + m_ScissorBox.h / 2.0f +info->height/2.0f );
			glTexCoord2i( 1,0 );	glVertex2f( m_ScissorBox.x + m_ScissorBox.w/2.0f + info->width/2, m_ScissorBox.y + m_ScissorBox.h / 2.0f -info->height/2.0f );
		glEnd();

		glPopAttrib();
	}
}

#include "game.h"

void CrosshairWindow::onRun()
{
	m_uiCurrentCrosshair = getFromRange<int>( game.m_iCurrentCrosshair, CROSSHAIR_NONE, CROSSHAIRS_COUNT );

}
