Skip to content
Snippets Groups Projects
traci-vehicle.cc 2.97 KiB
Newer Older
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
 * Copyright (c) 2017 Fraunhofer ESK
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation;
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * Author: Karsten Roscher <karsten.roscher@esk.fraunhofer.de>
 */
#include "traci-vehicle.h"

#include "traci-geometry.h"

namespace ns3 {
namespace traci {

Vehicle::Vehicle (Ptr<TraCi> traci, std::string id)
  : m_traci (traci), m_id (id),
    m_position (m_traci, id),
    m_length (m_traci, id), m_width (m_traci, id), m_height (m_traci, id),
    m_speed (m_traci, id), m_maxSpeed (m_traci, id), m_heading (m_traci, id),
    m_color (m_traci, id)
{
}

std::string
Vehicle::GetId () const
{
  return m_id;
}

Ptr<TraCi>
Vehicle::GetTraCi () const
{
  return  m_traci;
}

void
Vehicle::SetNode (Ptr<Node> node)
{
  m_node = node;
}

Ptr<Node>
Vehicle::GetNode () const
{
  return m_node;
}

Vector
Vehicle::GetPosition (bool forceReload) const
{
  // Note: This is ok for now since Position3D is just a typedef for Vector.
  //       If it changes some day, the compiler should complain.
  return m_position.GetValue (forceReload);
}

Vector2D
Vehicle::GetPosition2d (bool forceReload) const
{
  // we reuse the 3D position here
  Vector pos = GetPosition (forceReload);
  return Vector2D (pos.x, pos.y);
}

Vector
Vehicle::GetCenterPosition (bool forceReload) const
{
  return ShiftPosition (
      GetPosition (forceReload),
      GetHeading (forceReload),
      -GetLength (forceReload) / 2.0);
}

double
Vehicle::GetLength (bool forceReload) const
{
  return m_length.GetValue (forceReload);
}

double
Vehicle::GetWidth (bool forceReload) const
{
  return m_width.GetValue (forceReload);
}

double
Vehicle::GetHeight (bool forceReload) const
{
  return m_height.GetValue (forceReload);
}

double
Vehicle::GetSpeed (bool forceReload) const
{
  return m_speed.GetValue (forceReload);
}

double
Vehicle::GetMaxSpeed (bool forceReload) const
{
  return m_maxSpeed.GetValue (forceReload);
}

Heading
Vehicle::GetHeading (bool forceReload) const
{
  return Heading (m_heading.GetValue (forceReload));
}

Vector
Vehicle::GetVelocity (bool forceReload) const
{
  double speed = GetSpeed (forceReload);
  Heading heading = GetHeading (forceReload);

  return VelocityFromSpeedHeading (speed, heading);
}

Color
Vehicle::GetColor (bool forceReload) const
{
  return m_color.GetValue (forceReload);
}

void
Vehicle::SetColor (const Color& color)
{
  SetVariable (VAR_COLOR, color);
}

}
}