BVB Source Codes

CRYENGINE Show VehicleSeatGroup.cpp Source code

Return Download CRYENGINE: download VehicleSeatGroup.cpp Source code - Download CRYENGINE Source code - Type:.cpp
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. /*************************************************************************
  4.    -------------------------------------------------------------------------
  5.    $Id$
  6.    $DateTime$
  7.    Description: Implements a seat group
  8.  
  9.    -------------------------------------------------------------------------
  10.    History:
  11.    - 12:03:2006: Created by Mathieu Pinard
  12.  
  13. *************************************************************************/
  14. #include "StdAfx.h"
  15. #include "CryAction.h"
  16. #include "GameObjects/GameObject.h"
  17. #include "IActorSystem.h"
  18. #include "IAnimatedCharacter.h"
  19. #include "IVehicleSystem.h"
  20. #include "Vehicle.h"
  21. #include "VehicleSeat.h"
  22. #include "VehicleSeatGroup.h"
  23.  
  24. //------------------------------------------------------------------------
  25. bool CVehicleSeatGroup::Init(IVehicle* pVehicle, const CVehicleParams& paramsTable)
  26. {
  27.         m_pVehicle = static_cast<CVehicle*>(pVehicle);
  28.         m_isSwitchingReverse = false;
  29.  
  30.         if (CVehicleParams seatsTable = paramsTable.findChild("Seats"))
  31.         {
  32.                 int i = 0;
  33.                 int c = seatsTable.getChildCount();
  34.                 m_seats.reserve(c);
  35.  
  36.                 for (; i < c; i++)
  37.                 {
  38.                         string seatName = seatsTable.getChild(i).getAttr("value");
  39.                         if (!seatName.empty())
  40.                         {
  41.                                 TVehicleSeatId seatId = m_pVehicle->GetSeatId(seatName);
  42.                                 if (CVehicleSeat* pSeat = (CVehicleSeat*)m_pVehicle->GetSeatById(seatId))
  43.                                 {
  44.                                         pSeat->SetSeatGroup(this);
  45.                                         m_seats.push_back(pSeat);
  46.                                 }
  47.                         }
  48.                 }
  49.         }
  50.  
  51.         return !m_seats.empty();
  52. }
  53.  
  54. //------------------------------------------------------------------------
  55. void CVehicleSeatGroup::Reset()
  56. {
  57.         m_isSwitchingReverse = false;
  58. }
  59.  
  60. //------------------------------------------------------------------------
  61. CVehicleSeat* CVehicleSeatGroup::GetSeatByIndex(unsigned int index)
  62. {
  63.         if (index < m_seats.size())
  64.                 return m_seats[index];
  65.  
  66.         return NULL;
  67. }
  68.  
  69. //------------------------------------------------------------------------
  70. CVehicleSeat* CVehicleSeatGroup::GetNextSeat(CVehicleSeat* pCurrentSeat)
  71. {
  72.         for (TVehicleSeatVector::iterator ite = m_seats.begin(); ite != m_seats.end(); ++ite)
  73.         {
  74.                 CVehicleSeat* pSeat = *ite;
  75.                 if (pSeat == pCurrentSeat)
  76.                 {
  77.                         if (m_isSwitchingReverse)
  78.                         {
  79.                                 if (ite == m_seats.begin())
  80.                                 {
  81.                                         m_isSwitchingReverse = false;
  82.                                         ++ite;
  83.                                 }
  84.                                 else
  85.                                         --ite;
  86.                         }
  87.                         else
  88.                         {
  89.                                 ++ite;
  90.  
  91.                                 if (ite == m_seats.end())
  92.                                 {
  93.                                         m_isSwitchingReverse = true;
  94.                                         --ite;
  95.                                         --ite;
  96.                                 }
  97.                         }
  98.  
  99.                         return *ite;
  100.                 }
  101.         }
  102.  
  103.         return NULL;
  104. }
  105.  
  106. //------------------------------------------------------------------------
  107. CVehicleSeat* CVehicleSeatGroup::GetNextFreeSeat(CVehicleSeat* pCurrentSeat)
  108. {
  109.         TVehicleSeatVector::iterator itCurrent = std::find(m_seats.begin(), m_seats.end(), pCurrentSeat);
  110.  
  111.         if (itCurrent == m_seats.end())
  112.                 return NULL;
  113.  
  114.         TVehicleSeatVector::iterator itFwd = itCurrent, itBack = itCurrent;
  115.  
  116.         IActor* pActor = pCurrentSeat->GetPassengerActor();
  117.  
  118.         while (!(itFwd == m_seats.end() && itBack == m_seats.begin()))
  119.         {
  120.                 if (m_isSwitchingReverse)
  121.                 {
  122.                         if (itBack != m_seats.begin())
  123.                         {
  124.                                 --itBack;
  125.  
  126.                                 if ((*itBack)->IsFree(pActor))
  127.                                         return *itBack;
  128.                         }
  129.                         else
  130.                         {
  131.                                 m_isSwitchingReverse = false;
  132.                         }
  133.                 }
  134.                 else
  135.                 {
  136.                         if (itFwd != m_seats.end())
  137.                         {
  138.                                 ++itFwd;
  139.  
  140.                                 if (itFwd == m_seats.end())
  141.                                 {
  142.                                         m_isSwitchingReverse = true;
  143.                                 }
  144.                                 else
  145.                                 {
  146.                                         if ((*itFwd)->IsFree(pActor))
  147.                                                 return *itFwd;
  148.                                 }
  149.                         }
  150.                         else
  151.                         {
  152.                                 m_isSwitchingReverse = true;
  153.                         }
  154.                 }
  155.         }
  156.  
  157.         return NULL;
  158. }
  159.  
  160. //------------------------------------------------------------------------
  161. bool CVehicleSeatGroup::IsGroupEmpty()
  162. {
  163.         const TVehicleSeatVector::const_iterator seatsEnd = m_seats.end();
  164.         for (TVehicleSeatVector::const_iterator ite = m_seats.begin(); ite != seatsEnd; ++ite)
  165.         {
  166.                 CVehicleSeat* pSeat = *ite;
  167.                 if (!pSeat->IsFree(NULL))
  168.                         return false;
  169.         }
  170.  
  171.         return true;
  172. }
  173.  
  174. //------------------------------------------------------------------------
  175. void CVehicleSeatGroup::OnPassengerExit(CVehicleSeat* pSeat, EntityId passengerId)
  176. {
  177.  
  178. }
  179.  
  180. //------------------------------------------------------------------------
  181. void CVehicleSeatGroup::OnPassengerChangeSeat(CVehicleSeat* pNewSeat, CVehicleSeat* pOldSeat)
  182. {
  183.  
  184. }
  185.  
  186. void CVehicleSeatGroup::GetMemoryUsage(ICrySizer* s) const
  187. {
  188.         s->Add(*this);
  189.         s->AddContainer(m_seats);
  190. }
  191.  
downloadVehicleSeatGroup.cpp Source code - Download CRYENGINE Source code
Related Source Codes/Software:
postal - 2017-06-11
reactide - Reactide is the first dedicated IDE for React web ... 2017-06-11
rkt - rkt is a pod-native container engine for Linux. It... 2017-06-11
uWebSockets - Tiny WebSockets https://for... 2017-06-11
realworld - TodoMVC for the RealWorld - Exemplary fullstack Me... 2017-06-11
CRYENGINE - CRYENGINE is a powerful real-time game development... 2017-06-11
goreplay - GoReplay is an open-source tool for capturing and ... 2017-06-10
pyenv - Simple Python version management 2017-06-10
redux-saga - An alternative side effect model for Redux apps ... 2017-06-10
angular-starter - 2017-06-10

 Back to top