BVB Source Codes

CRYENGINE Show VehicleSeatActionLights.cpp Source code

Return Download CRYENGINE: download VehicleSeatActionLights.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 action to head/spot lights
  8.  
  9.    -------------------------------------------------------------------------
  10.    History:
  11.    - 01:03:2006: Created by Mathieu Pinard
  12.    - 20:07:2010: Refactored by Paul Slinger
  13.  
  14. *************************************************************************/
  15. #include "StdAfx.h"
  16. #include "CryAction.h"
  17. #include "IVehicleSystem.h"
  18. #include "Vehicle.h"
  19. #include "VehicleSeat.h"
  20. #include "VehiclePartLight.h"
  21. #include "VehicleSeatActionLights.h"
  22.  
  23. static const char* s_activationSounds[] =
  24. {
  25.         "sounds/vehicles:vehicle_accessories:light",
  26.         "sounds/vehicles:vehicle_accessories:flashlight",
  27.         "sounds/vehicles:vehicle_accessories:spotlight"
  28. };
  29.  
  30. DEFINE_SHARED_PARAMS_TYPE_INFO(CVehicleSeatActionLights::SSharedParams)
  31.  
  32. CVehicleSeatActionLights::~CVehicleSeatActionLights()
  33. {
  34.         m_pVehicle->UnregisterVehicleEventListener(this);
  35. }
  36.  
  37. //------------------------------------------------------------------------
  38. bool CVehicleSeatActionLights::Init(IVehicle* pVehicle, IVehicleSeat* pSeat, const CVehicleParams& table)
  39. {
  40.         m_pVehicle = pVehicle;
  41.         m_pVehicle->RegisterVehicleEventListener(this, "SeatActionLights");
  42.  
  43.         CVehicleParams lightsTable = table.findChild("Lights");
  44.  
  45.         if (!lightsTable)
  46.         {
  47.                 return false;
  48.         }
  49.  
  50.         ELightActivation activation = eLA_Toggle;
  51.  
  52.         string inputActivation = lightsTable.getAttr("activation");
  53.  
  54.         if (inputActivation == "brake")
  55.         {
  56.                 activation = eLA_Brake;
  57.         }
  58.         else if (inputActivation == "reverse")
  59.         {
  60.                 activation = eLA_Reversing;
  61.         }
  62.  
  63.         CryFixedStringT<256> sharedParamsName;
  64.  
  65.         sharedParamsName.Format("%s::SeatActionLights::%d::%s", pVehicle->GetEntity()->GetClass()->GetName(), pSeat->GetSeatId(), inputActivation.c_str());
  66.  
  67.         ISharedParamsManager* pSharedParamsManager = CCryAction::GetCryAction()->GetISharedParamsManager();
  68.  
  69.         CRY_ASSERT(pSharedParamsManager);
  70.  
  71.         m_pSharedParams = CastSharedParamsPtr<SSharedParams>(pSharedParamsManager->Get(sharedParamsName));
  72.  
  73.         if (!m_pSharedParams)
  74.         {
  75.                 SSharedParams sharedParams;
  76.  
  77.                 sharedParams.seatId = pSeat->GetSeatId();
  78.                 sharedParams.activation = activation;
  79.  
  80.                 if (activation == eLA_Toggle)
  81.                 {
  82.                         if (lightsTable.haveAttr("sound"))
  83.                         {
  84.                                 int sound = 1;
  85.  
  86.                                 if (!lightsTable.getAttr("sound", sound) || !sound)
  87.                                 {
  88.                                         sharedParams.onSound = lightsTable.getAttr("sound");
  89.                                 }
  90.                                 else if (sound > 0 && sound <= (CRY_ARRAY_COUNT(s_activationSounds)))
  91.                                 {
  92.                                         sharedParams.onSound = s_activationSounds[sound - 1];
  93.                                 }
  94.  
  95.                                 sharedParams.offSound = sharedParams.onSound;
  96.                         }
  97.                         else
  98.                         {
  99.                                 sharedParams.onSound = lightsTable.getAttr("onSound");
  100.                                 sharedParams.offSound = lightsTable.getAttr("offSound");
  101.                         }
  102.                 }
  103.  
  104.                 m_pSharedParams = CastSharedParamsPtr<SSharedParams>(pSharedParamsManager->Register(sharedParamsName, sharedParams));
  105.         }
  106.  
  107.         CRY_ASSERT(m_pSharedParams.get());
  108.  
  109.         CVehicleParams lightsPartsArray = lightsTable.findChild("LightParts");
  110.  
  111.         if (lightsPartsArray)
  112.         {
  113.                 int childCount = lightsPartsArray.getChildCount();
  114.  
  115.                 m_lightParts.reserve(childCount);
  116.  
  117.                 for (int i = 0; i < childCount; ++i)
  118.                 {
  119.                         if (CVehicleParams lightPartRef = lightsPartsArray.getChild(i))
  120.                         {
  121.                                 if (IVehiclePart* pPart = pVehicle->GetPart(lightPartRef.getAttr("value")))
  122.                                 {
  123.                                         if (CVehiclePartLight* pPartLight = CAST_VEHICLEOBJECT(CVehiclePartLight, pPart))
  124.                                         {
  125.                                                 m_lightParts.push_back(SLightPart(pPartLight));
  126.                                         }
  127.                                 }
  128.                         }
  129.                 }
  130.         }
  131.  
  132.         m_enabled = false;
  133.  
  134.         return !m_lightParts.empty();
  135. }
  136.  
  137. //------------------------------------------------------------------------
  138. void CVehicleSeatActionLights::Reset()
  139. {
  140.         m_enabled = false;
  141. }
  142.  
  143. //------------------------------------------------------------------------
  144. void CVehicleSeatActionLights::OnAction(const TVehicleActionId actionId, int activationMode, float value)
  145. {
  146.         if (actionId == eVAI_ToggleLights && m_pSharedParams->activation == eLA_Toggle)
  147.         {
  148.                 if (eAAM_OnPress == activationMode)
  149.                 {
  150.                         ToggleLights(value == 0.f ? false : !m_enabled);
  151.  
  152.                         if (CVehicleSeat* pSeat = static_cast<CVehicleSeat*>(m_pVehicle->GetSeatById(m_pSharedParams->seatId)))
  153.                         {
  154.                                 pSeat->ChangedNetworkState(CVehicle::ASPECT_SEAT_ACTION);
  155.                         }
  156.                 }
  157.         }
  158. }
  159.  
  160. //---------------------------------------------------------------------------
  161. void CVehicleSeatActionLights::GetMemoryUsage(ICrySizer* pSizer) const
  162. {
  163.         pSizer->Add(*this);
  164.  
  165.         pSizer->AddObject(m_lightParts);
  166. }
  167.  
  168. //------------------------------------------------------------------------
  169. void CVehicleSeatActionLights::Serialize(TSerialize ser, EEntityAspects aspects)
  170. {
  171.         if (ser.GetSerializationTarget() != eST_Network)
  172.         {
  173.                 ser.Value("enabled", m_enabled);
  174.         }
  175.         else if (aspects & CVehicle::ASPECT_SEAT_ACTION)
  176.         {
  177.                 NET_PROFILE_SCOPE("SeatAction_Lights", ser.IsReading());
  178.  
  179.                 bool enabled = m_enabled;
  180.  
  181.                 ser.Value("enabled", enabled, 'bool');
  182.  
  183.                 if (ser.IsReading() && enabled != m_enabled)
  184.                 {
  185.                         ToggleLights(enabled);
  186.                 }
  187.         }
  188. }
  189.  
  190. //---------------------------------------------------------------------------
  191. void CVehicleSeatActionLights::OnVehicleEvent(EVehicleEvent event, const SVehicleEventParams& params)
  192. {
  193.         switch (event)
  194.         {
  195.         case eVE_Brake:
  196.         case eVE_Reversing:
  197.                 {
  198.                         if ((event == eVE_Brake && eLA_Brake == m_pSharedParams->activation) || (event == eVE_Reversing && eLA_Reversing == m_pSharedParams->activation))
  199.                         {
  200.                                 bool toggle = true;
  201.  
  202.                                 if (params.bParam)
  203.                                 {
  204.                                         // Only enable brake lights if engine is powered and driver is still inside.
  205.  
  206.                                         if (!m_pVehicle->GetMovement()->IsPowered())
  207.                                         {
  208.                                                 toggle = false;
  209.                                         }
  210.                                         else if (IVehicleSeat* pSeat = m_pVehicle->GetSeatById(1))
  211.                                         {
  212.                                                 if (!pSeat->GetPassenger() || pSeat->GetCurrentTransition() == IVehicleSeat::eVT_Exiting)
  213.                                                 {
  214.                                                         toggle = false;
  215.                                                 }
  216.                                         }
  217.                                 }
  218.  
  219.                                 if (toggle)
  220.                                 {
  221.                                         ToggleLights(params.bParam);
  222.                                 }
  223.                         }
  224.  
  225.                         break;
  226.                 }
  227.  
  228.         case eVE_EngineStopped:
  229.                 {
  230.                         if (eLA_Brake == m_pSharedParams->activation)
  231.                         {
  232.                                 ToggleLights(false);
  233.                         }
  234.  
  235.                         break;
  236.                 }
  237.         }
  238. }
  239.  
  240. //---------------------------------------------------------------------------
  241. void CVehicleSeatActionLights::ToggleLights(bool enable)
  242. {
  243.         for (TVehiclePartLightVector::iterator iter = m_lightParts.begin(), end = m_lightParts.end(); iter != end; ++iter)
  244.         {
  245.                 iter->pPart->ToggleLight(enable);
  246.         }
  247.  
  248.         m_enabled = enable;
  249.  
  250.         if (enable && !m_pSharedParams->onSound.empty())
  251.         {
  252.                 PlaySound(m_pSharedParams->onSound);
  253.         }
  254.         else if (!m_pSharedParams->offSound.empty())
  255.         {
  256.                 PlaySound(m_pSharedParams->offSound);
  257.         }
  258. }
  259.  
  260. //---------------------------------------------------------------------------
  261. void CVehicleSeatActionLights::PlaySound(const string& name)
  262. {
  263.         REINST("send event");
  264.         /*IEntityAudioComponent* pIEntityAudioComponent = m_pVehicle->GetEntity()->GetOrCreateComponent<IEntityAudioComponent>();
  265.  
  266.            if(pIEntityAudioComponent)
  267.            {
  268.            pIEntityAudioComponent->PlaySound(name.c_str(), Vec3(0.0f, 0.0f, 0.0f), FORWARD_DIRECTION, FLAG_SOUND_DEFAULT_3D, 0, eSoundSemantic_Vehicle);
  269.            }*/
  270. }
  271.  
  272. DEFINE_VEHICLEOBJECT(CVehicleSeatActionLights);
  273.  
downloadVehicleSeatActionLights.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