// ************************************************************************** // // (C) Copyright 2009 Swiss SIMTEC AG // // ************************************************************************** // // $HeadURL$ // $LastChangedBy$ // $LastChangedDate$ // $LastChangedRevision$ // // ************************************************************************** // manual class headers #include "GeoPairingImplAirTarget.hpp" // from cpp_includes #include namespace N_GeoPairingImpl { // --------------------------------------------------------------- // Constructor // --------------------------------------------------------------- GeoPairingImplAirTarget::GeoPairingImplAirTarget(SInt32 a_playerID) : m_PlayerID(a_playerID), m_logger(CesGeoPairing::getLogger("Plugin.GeoPairing.GeoPairingImplAirTarget")) { INFO_LOG(m_logger) << "Constructor : PlayerID " << m_PlayerID; } // --------------------------------------------------------------- // updates the position // --------------------------------------------------------------- bool GeoPairingImplAirTarget::updatePosition(Float64 a_positionLat, Float64 a_positionLon, Float64 a_positionAlt, UInt32 a_positionTime) { if (a_positionTime <= m_PositionTime) { INFO_LOG(m_logger) << "No new position info for Player " << m_PlayerID << ", abandon update. PositionTime = " << a_positionTime; return false; } INFO_LOG(m_logger) << "Set new Position for Player " << m_PlayerID; N_Math::GeoCoord l_NewPositionUtm; l_NewPositionUtm.setLlPositionDegree(a_positionLat, a_positionLon, a_positionAlt); N_Types::Coord3 l_NewPosition(l_NewPositionUtm.utmEasting(), l_NewPositionUtm.utmNorthing(), l_NewPositionUtm.height()); if (m_PositionTime > 0) { UInt32 l_TimeDiff = a_positionTime - m_PositionTime; INFO_LOG(m_logger) << "l_TimeDiff [s]: " << l_TimeDiff; // when new position time is more current than existing one if (l_TimeDiff > 0) { N_Types::Vec3 l_NewDirection = l_NewPosition - m_Position; Float64 l_Distance = l_NewDirection.magnitude(); INFO_LOG(m_logger) << "l_Distance [m]: " << l_Distance; l_NewDirection /= l_Distance; m_Direction = l_NewDirection; INFO_LOG(m_logger) << "m_Direction : " << m_Direction; m_Speed = l_Distance / l_TimeDiff; INFO_LOG(m_logger) << "m_Speed [m/s]: " << m_Speed; } } m_Position = l_NewPosition; INFO_LOG(m_logger) << "m_Position : " << m_Position; m_PositionTime = a_positionTime; INFO_LOG(m_logger) << "m_PositionTime : " << m_PositionTime; return true; } // --------------------------------------------------------------- // updates the air target state // --------------------------------------------------------------- void GeoPairingImplAirTarget::updateState(SInt32 a_state) { INFO_LOG(m_logger) << "Set new State for Player " << m_PlayerID << " : " << a_state; m_State = a_state; } } // namespace N_GeoPairingImpl