BVB Source Codes

CRYENGINE Show FlowVehicleHorn.cpp Source code

Return Download CRYENGINE: download FlowVehicleHorn.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 flow node to use vehicle horn
  8.  
  9.    -------------------------------------------------------------------------
  10.    History:
  11.    - 03:03:2007: Created by MichaelR
  12.  
  13. *************************************************************************/
  14. #include "StdAfx.h"
  15. #include "CryAction.h"
  16. #include "IVehicleSystem.h"
  17. #include "FlowVehicleBase.h"
  18. #include "VehicleSystem/Vehicle.h"
  19. #include "VehicleSystem/VehicleSeat.h"
  20. #include "VehicleSystem/VehicleSeatActionSound.h"
  21. #include <CryFlowGraph/IFlowBaseNode.h>
  22.  
  23. class CFlowVehicleHonk
  24.         : public CFlowVehicleBase
  25. {
  26. public:
  27.         CFlowVehicleHonk(SActivationInfo* pActivationInfo) : m_timeout(0.0f)
  28.         {
  29.                 Init(pActivationInfo);
  30.         }
  31.  
  32.         ~CFlowVehicleHonk()
  33.         {
  34.                 Delete();
  35.         }
  36.  
  37.         enum EInputs
  38.         {
  39.                 eIn_Trigger,
  40.                 eIn_Duration
  41.         };
  42.  
  43.         enum EOutputs
  44.         {
  45.         };
  46.  
  47.         //------------------------------------------------------------------------
  48.         void GetConfiguration(SFlowNodeConfig& nodeConfig)
  49.         {
  50.                 CFlowVehicleBase::GetConfiguration(nodeConfig);
  51.  
  52.                 static const SInputPortConfig pInConfig[] =
  53.                 {
  54.                         InputPortConfig<SFlowSystemVoid>("Trigger", _HELP("Trigger to honk")),
  55.                         InputPortConfig<float>("Duration",          2.0f,                     _HELP("Duration in seconds")),
  56.                         { 0 }
  57.                 };
  58.  
  59.                 static const SOutputPortConfig pOutConfig[] =
  60.                 {
  61.                         { 0 }
  62.                 };
  63.  
  64.                 nodeConfig.sDescription = _HELP("Use a vehicle's horn");
  65.                 nodeConfig.nFlags |= EFLN_TARGET_ENTITY;
  66.                 nodeConfig.pInputPorts = pInConfig;
  67.                 nodeConfig.pOutputPorts = pOutConfig;
  68.                 nodeConfig.SetCategory(EFLN_APPROVED);
  69.         }
  70.  
  71.         //------------------------------------------------------------------------
  72.         CVehicleSeat* GetDriverSeat()
  73.         {
  74.                 if (IVehicle* pIVehicle = GetVehicle())
  75.                 {
  76.                         CVehicle* pVehicle = static_cast<CVehicle*>(pIVehicle);
  77.                         TVehicleSeatId seatId = pVehicle->GetDriverSeatId();
  78.                         if (seatId != InvalidVehicleSeatId)
  79.                                 return static_cast<CVehicleSeat*>(pVehicle->GetSeatById(seatId));
  80.                 }
  81.                 return 0;
  82.         }
  83.  
  84.         void StopAudio(SActivationInfo* pActivationInfo)
  85.         {
  86.                 if (CVehicleSeat* pSeat = GetDriverSeat())
  87.                         pSeat->OnAction(eVAI_Horn, eAAM_OnRelease, 1);
  88.                 pActivationInfo->pGraph->SetRegularlyUpdated(pActivationInfo->myID, true);
  89.                 m_timeout = 0.0f;
  90.         }
  91.  
  92.         //------------------------------------------------------------------------
  93.         void ProcessEvent(EFlowEvent flowEvent, SActivationInfo* pActivationInfo)
  94.         {
  95.                 CFlowVehicleBase::ProcessEvent(flowEvent, pActivationInfo);
  96.  
  97.                 if (flowEvent == eFE_Activate && IsPortActive(pActivationInfo, eIn_Trigger))
  98.                 {
  99.                         if (CVehicleSeat* pVehicleSeat = GetDriverSeat())
  100.                         {
  101.                                 pVehicleSeat->OnAction(eVAI_Horn, eAAM_OnPress, 1);
  102.                                 m_timeout = GetPortFloat(pActivationInfo, eIn_Duration);
  103.                                 if (m_timeout <= 0.0f)
  104.                                         m_timeout = 0.1f;
  105.                                 pActivationInfo->pGraph->SetRegularlyUpdated(pActivationInfo->myID, true);
  106.                         }
  107.                 }
  108.                 if (flowEvent == eFE_Update)
  109.                 {
  110.                         if (m_timeout > 0.0f)
  111.                         {
  112.                                 m_timeout -= gEnv->pTimer->GetFrameTime();
  113.                                 if (m_timeout <= 0.0f)
  114.                                         StopAudio(pActivationInfo);
  115.                         }
  116.                         else
  117.                                 pActivationInfo->pGraph->SetRegularlyUpdated(pActivationInfo->myID, true);
  118.                 }
  119.         }
  120.  
  121.         // IVehicleEventListener
  122.         void OnVehicleEvent(EVehicleEvent event, const SVehicleEventParams& params)
  123.         {
  124.                 CFlowVehicleBase::OnVehicleEvent(event, params);
  125.                 if (event == eVE_Destroyed)
  126.                 {
  127.                         if (m_timeout > 0.0f)
  128.                         {
  129.                                 m_timeout = 0.0f;
  130.                                 // will stop node update on next eFE_Update
  131.                         }
  132.                 }
  133.         }
  134.         // ~IVehicleEventListener
  135.  
  136.         //------------------------------------------------------------------------
  137.         IFlowNodePtr Clone(SActivationInfo* pActivationInfo)
  138.         {
  139.                 IFlowNode* pNode = new CFlowVehicleHonk(pActivationInfo);
  140.                 return pNode;
  141.         }
  142.  
  143.         //------------------------------------------------------------------------
  144.         void Serialize(SActivationInfo* pActivationInfo, TSerialize ser)
  145.         {
  146.                 CFlowVehicleBase::Serialize(pActivationInfo, ser);
  147.                 if (ser.IsReading())
  148.                         StopAudio(pActivationInfo);
  149.         }
  150.  
  151.         //------------------------------------------------------------------------
  152.         virtual void GetMemoryUsage(ICrySizer* s) const
  153.         {
  154.                 s->Add(*this);
  155.         }
  156.  
  157. protected:
  158.         float m_timeout;
  159. };
  160.  
  161. REGISTER_FLOW_NODE("Vehicle:Honk", CFlowVehicleHonk);
  162.  
downloadFlowVehicleHorn.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