/*********************************************************************//**
*	Vitr
*	Specifikace vlastnosti vetru
*	
*	author: Michal Jirous
*	date: 23.04.2009
*	file: ent_wind.cpp
**********************************************************************/

#include "ent_wind.h"

EnvWind::EnvWind() : CBaseEnvironment()
{
	m_sClassName = "env_wind";
	m_iProperties = ENT_PARM_RUNNABLE;
	m_bIsOn = false;

}

void EnvWind::passFlags( int flags )
{
	if( flags & STARTS_ON )
		m_bStore_IsOn = true;

	m_bIsOn = m_bStore_IsOn;
	m_Wind.setRunning( m_bIsOn );
}

#include "game.h"
void EnvWind::onTarget( int target_type )
{
	m_BackTimeData.push_front( BackTimeData() );
	m_BackTimeData.front().event_time = game.m_uiGameTime;
	
	if( m_bIsOn )
	{
		m_BackTimeData.front().type = EVENT_TURN_OFF;
		m_bIsOn = false;
	}
	else
	{
		m_BackTimeData.front().type = EVENT_TURN_ON;
		m_bIsOn = true;
	}

	m_Wind.setRunning( m_bIsOn );
}

void EnvWind::goBackInTime()
{
	CBaseEnvironment::goBackInTime();

	for( std::list<BackTimeData>::reverse_iterator riter = m_BackTimeData.rbegin(); riter != m_BackTimeData.rend(); ++riter )
	{
		if( (*riter).type == EVENT_BORDER )
			return;

		if( (*riter).type == EVENT_TURN_OFF )
		{	
			m_bIsOn = true;
			return;
		}
		else if( (*riter).type == EVENT_TURN_ON )
		{	
			m_bIsOn = false;
			return;
		}
	}

	m_Wind.setRunning( m_bIsOn );
}


void EnvWind::restart()
{
	CBaseEnvironment::restart();
	m_bIsOn = m_bStore_IsOn;
	m_Wind.setRunning( m_bIsOn );
}

Vector EnvWind::getWindForce()
{
	if( m_bIsOn )
		return m_Wind.getForce();
	return Vector();
}

void EnvWind::update( float seconds )
{
	CBaseEnvironment::update( seconds );
	m_Wind.update();
}

void EnvWind::setParameters( parameters_t &parametersMap )
{
	CBaseEnvironment::setParameters( parametersMap );

	std::string value = getParameterValue( parametersMap, "basemagnitude" );
	if( !value.empty() )
		m_Wind.setBasicMagnitude( (float)atof( value.c_str() ) );

	value = getParameterValue( parametersMap, "baseanglez" );
	if( !value.empty() )
		m_Wind.setAngleZ( (float)atof( value.c_str() ) );

	value = getParameterValue( parametersMap, "baseanglex" );
	if( !value.empty() )
		m_Wind.setAngleX( (float)atof( value.c_str() ) );

	value = getParameterValue( parametersMap, "magnituderange" );
	if( !value.empty() )
		m_Wind.setMagnitudeRange( (float)atof( value.c_str() ) );

	value = getParameterValue( parametersMap, "anglexrange" );
	if( !value.empty() )
		m_Wind.setAngleXRange( (float)atof( value.c_str() ) );

	value = getParameterValue( parametersMap, "anglezrange" );
	if( !value.empty() )
		m_Wind.setAngleZRange( (float)atof( value.c_str() ) );

	value = getParameterValue( parametersMap, "speedofchange" );
	if( !value.empty() )
		m_Wind.setSpeedOfChange( (float)atof( value.c_str() ) );

	value = getParameterValue( parametersMap, "changeperiod" );
	if( !value.empty() )
		m_Wind.setValueChangePeriod( atoi( value.c_str() ) );

	
}
