/*********************************************************************
*	HUD Oxygen
*	SOURCE FILE
*	Autor:	Michal Jirouš
*	Datum: 10.9.2008
*	Soubor: HUD_oxygen.cpp
*	Popis: Trida implementuje graficky prvek, ktery informuje o mnozstvi 
*			zbyvajiciho kysliku pri pohybu pod vodou
**********************************************************************/

#include "HUD_oxygen.h"
#include "ctrl_gamevars.h"
#include "ctrl_var_definition.h"
#include "sys_config.h"
#include "game.h"
#include "fonts.h"
#include "textLibrary.h"
#include "mathematic.h"

OxygenWindow::OxygenWindow()
{
	onInit();
	HUDBaseWindowInit();
	setCaption( textLibrary::getText( TXT_OXYGEN ), "REGULAR", FONT_ALIGN_LEFT );
	m_dsNote = fontLibrary::DString( textLibrary::getText( TXT_OXYGEN ), "SERIF10", FONT_ALIGN_LEFT );
	m_fOxygenAlpha = 0.0f;
}

void OxygenWindow::onDefault()
{
	float x = systemconf::getSystemInfo().m_iResolutionWidth * vardef::HUD_OXYGEN_WIN_X_DEFAULT;
	float y = systemconf::getSystemInfo().m_iResolutionHeight * vardef::HUD_OXYGEN_WIN_Y_DEFAULT;
	setPosition( x, y );
}

void OxygenWindow::onCancel()
{
	float x = systemconf::getSystemInfo().m_iResolutionWidth * gamevarsLibrary::getfData( vardef::HUD_OXYGEN_WIN_X );
	float y = systemconf::getSystemInfo().m_iResolutionHeight * gamevarsLibrary::getfData( vardef::HUD_OXYGEN_WIN_Y );
	setPosition( x, y );
}

void OxygenWindow::onSave()
{
	float x = m_fGlobalXpos / systemconf::getSystemInfo().m_iResolutionWidth;
	float y = (m_fGlobalYpos) / systemconf::getSystemInfo().m_iResolutionHeight;
	gamevarsLibrary::setVariable( vardef::HUD_OXYGEN_WIN_X, x );
	gamevarsLibrary::setVariable( vardef::HUD_OXYGEN_WIN_Y, y );
}

void OxygenWindow::onInit()
{
	m_fWidth = HUD_OXYGEN_WIDTH;
	m_fHeight = HUD_OXYGEN_HEIGHT;
	m_fGlobalXpos = systemconf::getSystemInfo().m_iResolutionWidth * gamevarsLibrary::getfData( vardef::HUD_OXYGEN_WIN_X );
	m_fGlobalYpos = systemconf::getSystemInfo().m_iResolutionHeight * gamevarsLibrary::getfData( vardef::HUD_OXYGEN_WIN_Y );
	m_ValueHolder.setColorCritical( HUD::HUD_COLOR_CRITICAL );
	m_ValueHolder.setColorDefault( HUD_OXYGEN_COLOR );
	m_ValueHolder.setCriticalValue( CRITICAL_OXYGEN );
}

void OxygenWindow::componentDraw( ScissorBox &scissorBox )
{
	if( game.m_pPlayer && m_fOxygenAlpha > ALPHA_TRANSPARENT )
	{
		if( game.m_pPlayer->getOxygen() > CRITICAL_OXYGEN )
			glColor4f( HUD_OXYGEN_COLOR.values[0], HUD_OXYGEN_COLOR.values[1],HUD_OXYGEN_COLOR.values[2], HUD_OXYGEN_COLOR.values[3] * m_fOxygenAlpha * m_fAlphaMultiplier );
		else
			glColor4f( HUD::HUD_COLOR_CRITICAL.values[0], HUD::HUD_COLOR_CRITICAL.values[1],HUD::HUD_COLOR_CRITICAL.values[2], HUD::HUD_COLOR_CRITICAL.values[3] * m_fOxygenAlpha * m_fAlphaMultiplier );
			
		m_dsNote.draw( scissorBox.x, scissorBox.y + scissorBox.h - m_dsNote.m_iHeight / 2 );
		m_ValueHolder.draw( scissorBox.x, scissorBox.y, "OXYGEN", m_fOxygenAlpha * m_fAlphaMultiplier );
	}
}

void OxygenWindow::onRun()
{
	if( game.m_pPlayer )
	{
		int oxygen = game.m_pPlayer->getOxygen();
		m_ValueHolder.setValue( oxygen );
		m_ValueHolder.run();
		if( oxygen < DEFAULT_OXYGEN )
			m_fOxygenAlpha += min( 1.0f - m_fOxygenAlpha, 0.1f );
		else
			m_fOxygenAlpha -= getFromRange( 0.1f, 0.0f, m_fOxygenAlpha );
	}
}

