/*********************************************************************//**
*	Teleport.
*	Teleportuje entitu do cilove pozice pokud do tohoto objektu vstoupi.
*	
*	author: Michal Jirous
*	date: 23.04.2009
*	file: ent_triggerhurt.cpp
**********************************************************************/

#include "ent_triggers.h"
#include "level_loader.h"

TriggerTeleport::TriggerTeleport() : CBaseTrigger()
{
	m_sClassName = "trigger_teleport";
	m_pDestination = NULL;
	m_uiResetDelay = 0;	//vzdy k pouziti
}

void TriggerTeleport::trigger()
{
	if( m_pTriggeredObject &&  m_pTriggeredObject->getProperties() & ENT_PARM_DYNAMIC_MODEL_USAGE && m_pDestination )
	{
		CBasePhysics *pCreature = m_pTriggeredObject;
		Point targetPosition = m_pDestination->origin;
		Vector movement = targetPosition - pCreature->m_Model.m_middleCenterPoint;

		
		pCreature->teleport( movement, false );

		pCreature->setMoveVector( pCreature->getMoveVector().createFrom2Angles( m_pDestination->angles[0], m_pDestination->angles[2], m_Movement.absolute() ) );
		pCreature->angles.x = 0.0f;
		pCreature->angles.z = m_pDestination->angles.z;

	}
}

void TriggerTeleport::compile()
{
	CBaseTrigger::compile();
	if( m_TargetList && !m_TargetList->empty() )
	{
		m_pDestination = m_TargetList->front();
	}


}
#include "game.h"

void TriggerTeleport::processTrigger( CBasePhysics * initiator )
{
	m_Movement = initiator->getMoveVector();
	m_pTriggeredObject = initiator;

	//m_uiResetTime je nula pouze pri prvnim pruchodu
	if( m_uiResetTime == 0 || ( m_uiResetDelay != TRIGGER_INFINITE && m_uiResetTime != TRIGGER_INFINITE && m_uiResetTime + m_uiResetDelay <= game.getGameTime() ) )
	{
		m_uiTriggerTime = game.getGameTime();
		m_uiResetTime = TRIGGER_INFINITE;
	}
}


//#include "baseentity.h"
//#include "player.h"
//
//CTriggerTeleport::CTriggerTeleport( CBaseObject *pPlayer)
//{
//	m_sClassName = "trigger_teleport";
//	m_pPlayer = pPlayer;
//	m_bIsOn = true;
//	m_sSearchType = "info_teleport_destination";
//}
//
//void CTriggerTeleport::setFlags( int flags )
//{
//	if(flags & START_OFF)
//		m_bIsOn = false;
//}
//
//void CTriggerTeleport::onTarget()
//{
//	if(m_bIsOn)	m_bIsOn = false;
//	else m_bIsOn = true;
//}
//
//void CTriggerTeleport::trigger()
//{
//	if(!m_bIsOn)
//		return;
//
//	bTargetedObjects *tmp = pTarget;
//	if(tmp != NULL && m_pPlayer != NULL && m_pPlayer->getClassName() == "player")
//	{
//		CPlayer *pPlayer = reinterpret_cast<CPlayer*>(m_pPlayer);
//		float moveVectorSize = pPlayer->m_vecMove.absolute();
//		Vector origin = tmp->object->getOrigin();
//		Vector angles = tmp->object->getAngle();
//		origin.x += pPlayer->m_fTransX;
//		origin.y += pPlayer->m_fTransY;
//		origin.z += pPlayer->m_fTransZ + PLAYER_HEIGHT/2;
//		pPlayer->m_fRotZaxis = -angles[2];
//		pPlayer->m_fRotXaxis = -angles[0];
//		pPlayer->teleport( -origin );
//		
//		
//		origin.createFrom2Angles( angles[0], angles[2] + 180, moveVectorSize);
//		pPlayer->setMoveVector( origin );
//	}
//}
