BVB Source Codes

CRYENGINE Show VehicleSeatActionShakeParts.cpp Source code

Return Download CRYENGINE: download VehicleSeatActionShakeParts.cpp Source code - Download CRYENGINE Source code - Type:.cpp
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. #include "StdAfx.h"
  4. #include "IVehicleSystem.h"
  5. #include "Vehicle.h"
  6. #include "VehicleSeat.h"
  7. #include "VehicleSeatActionShakeParts.h"
  8.  
  9. DEFINE_SHARED_PARAMS_TYPE_INFO(CVehicleSeatActionShakeParts::SSharedParams);
  10.  
  11. CVehicleSeatActionShakeParts::CVehicleSeatActionShakeParts()
  12. {
  13.         m_pVehicle = NULL;
  14. }
  15.  
  16. //------------------------------------------------------------------------
  17. bool CVehicleSeatActionShakeParts::Init(IVehicle* pVehicle, IVehicleSeat* pSeat, const CVehicleParams& table)
  18. {
  19.         m_pVehicle = pVehicle;
  20.  
  21.         CryFixedStringT<256> sharedParamsName;
  22.         IEntity* pEntity = pVehicle->GetEntity();
  23.         ISharedParamsManager* pSharedParamsManager = gEnv->pGameFramework->GetISharedParamsManager();
  24.         CRY_ASSERT(pSharedParamsManager);
  25.         sharedParamsName.Format("%s::%s::CVehicleSeatActionShakeParts", pEntity->GetClass()->GetName(), pVehicle->GetModification());
  26.         m_pSharedParams = CastSharedParamsPtr<SSharedParams>(pSharedParamsManager->Get(sharedParamsName));
  27.  
  28.         if (!m_pSharedParams)
  29.         {
  30.                 SSharedParams sharedParams;
  31.                 CVehicleParams partsTable = table.findChild("Parts");
  32.                 if (partsTable)
  33.                 {
  34.                         const int partCount = partsTable.getChildCount();
  35.                         m_controlledParts.reserve(partCount);
  36.                         sharedParams.partInfos.reserve(partCount);
  37.                         for (int partIdx = 0; partIdx < partCount; ++partIdx)
  38.                         {
  39.                                 CVehicleParams partTable = partsTable.getChild(partIdx);
  40.  
  41.                                 if (strcmp(partTable.getTag(), "Part") == 0)
  42.                                 {
  43.                                         const char* controlledPartName = partTable.getAttr("name");
  44.  
  45.                                         IVehiclePart* pControlledPart = m_pVehicle->GetPart(controlledPartName);
  46.                                         if (pControlledPart)
  47.                                         {
  48.                                                 sharedParams.partInfos.resize(sharedParams.partInfos.size() + 1);
  49.                                                 SSharedParams::SPartInfo* partInfo = &sharedParams.partInfos.back();
  50.  
  51.                                                 partInfo->partIndex = pControlledPart->GetIndex();
  52.                                                 partInfo->amplitudeUpDown = 0.f;
  53.                                                 partInfo->amplitudeRot = 0.f;
  54.                                                 partInfo->freq = 0.f;
  55.                                                 partInfo->suspensionAmp = 0.f;
  56.                                                 partInfo->suspensionResponse = 0.f;
  57.                                                 partInfo->suspensionSharpness = 0.f;
  58.  
  59.                                                 partTable.getAttr("amp", partInfo->amplitudeUpDown);
  60.                                                 partTable.getAttr("ampRot", partInfo->amplitudeRot);
  61.                                                 partTable.getAttr("freq", partInfo->freq);
  62.                                                 partTable.getAttr("suspensionAmp", partInfo->suspensionAmp);
  63.                                                 partTable.getAttr("suspensionResponse", partInfo->suspensionResponse);
  64.                                                 partTable.getAttr("suspensionSharpness", partInfo->suspensionSharpness);
  65.                                                 partInfo->amplitudeRot = DEG2RAD(partInfo->amplitudeRot);
  66.                                         }
  67.                                 }
  68.                         }
  69.                 }
  70.                 else
  71.                 {
  72.                         GameWarning("Can't initialise CVehicleSeatActionShakeParts there's no Parts node, vehicle %s", pEntity->GetName());
  73.                 }
  74.                 m_pSharedParams = CastSharedParamsPtr<SSharedParams>(pSharedParamsManager->Register(sharedParamsName, sharedParams));
  75.         }
  76.  
  77.         SSharedParams::TPartInfosConst& partInfos = m_pSharedParams->partInfos;
  78.         SSharedParams::TPartInfosConst::const_iterator partInfo = partInfos.begin();
  79.         m_controlledParts.resize(partInfos.size());
  80.         TParts::iterator part = m_controlledParts.begin();
  81.         for (; partInfo != partInfos.end(); ++partInfo, ++part)
  82.         {
  83.                 IVehiclePart* pControlledPart = m_pVehicle->GetPart(partInfo->partIndex);
  84.                 pControlledPart->SetMoveable(true);
  85.                 part->noiseUpDown.Setup(0.f, 0.f);
  86.                 part->noiseRot.Setup(0.f, 0.f, 0x567282);
  87.                 part->zpos = 0.f;
  88.         }
  89.  
  90.         return true;
  91. }
  92.  
  93. void CVehicleSeatActionShakeParts::StartUsing(EntityId passengerId)
  94. {
  95.         if (!m_pVehicle->IsPlayerDriving(true) && !m_pVehicle->IsPlayerPassenger())
  96.                 return;
  97.  
  98.         m_pVehicle->SetObjectUpdate(this, IVehicle::eVOU_PassengerUpdate);
  99.  
  100.         for (TParts::iterator partInfo = m_controlledParts.begin(); partInfo != m_controlledParts.end(); ++partInfo)
  101.                 partInfo->zpos = 0.f;
  102. }
  103.  
  104. void CVehicleSeatActionShakeParts::StopUsing()
  105. {
  106.         m_pVehicle->SetObjectUpdate(this, IVehicle::eVOU_NoUpdate);
  107. }
  108.  
  109. void CVehicleSeatActionShakeParts::Update(const float deltaTime)
  110. {
  111.         IVehicleMovement* pMovement = m_pVehicle->GetMovement();
  112.         if (pMovement == NULL)
  113.                 return;
  114.  
  115.         SVehicleMovementStatusGeneral status;
  116.         pMovement->GetStatus(&status);
  117.  
  118.         SVehicleMovementStatusWheeled wheeledStatus;
  119.         pMovement->GetStatus(&wheeledStatus);
  120.  
  121.         float invTopSpeed = 1.f / (status.topSpeed + 1.f);
  122.         float speedNorm = min(1.f, status.speed * invTopSpeed);
  123.         float accelNorm = min(1.f, status.localAccel.GetLengthSquared() * sqr(invTopSpeed));
  124.         float freqModifier = min(1.f, (0.5f * invTopSpeed + status.speed) * invTopSpeed * 0.667f);
  125.  
  126.         TParts::iterator partInstance = m_controlledParts.begin();
  127.         SSharedParams::TPartInfosConst& partInfos = m_pSharedParams->partInfos;
  128.         SSharedParams::TPartInfosConst::const_iterator partInfo = partInfos.begin();
  129.  
  130.         for (; partInfo != partInfos.end(); ++partInfo, ++partInstance)
  131.         {
  132.                 IVehiclePart* pPart = m_pVehicle->GetPart(partInfo->partIndex);
  133.                 if (pPart)
  134.                 {
  135.                         float amp = partInfo->amplitudeUpDown * max(speedNorm, accelNorm);
  136.                         float ampRot = partInfo->amplitudeRot * speedNorm;
  137.                         float freq = partInfo->freq * freqModifier;
  138.                         partInstance->noiseUpDown.SetAmpFreq(amp, freq);
  139.                         partInstance->noiseRot.SetAmpFreq(ampRot, freq);
  140.                         float randPos = partInstance->noiseUpDown.Update(deltaTime);
  141.                         float randRot = partInstance->noiseRot.Update(deltaTime);
  142.                         float targetZ = partInfo->suspensionAmp * clamp_tpl(wheeledStatus.suspensionCompressionRate * partInfo->suspensionResponse, -1.f, +1.f);
  143.                         partInstance->zpos += (targetZ - partInstance->zpos) * approxOneExp(partInfo->suspensionSharpness * deltaTime);
  144.                         Matrix34 tm;
  145.                         tm.SetRotationZ(randRot);
  146.                         tm.SetTranslation(Vec3(0.f, 0.f, randPos + partInstance->zpos));
  147.                         pPart->SetLocalBaseTM(pPart->GetLocalInitialTM() * tm);
  148.                 }
  149.         }
  150. }
  151.  
  152. void CVehicleSeatActionShakeParts::GetMemoryUsage(ICrySizer* s) const
  153. {
  154.         s->AddObject(this, sizeof(*this));
  155.         s->AddContainer(m_controlledParts);
  156. }
  157.  
  158. DEFINE_VEHICLEOBJECT(CVehicleSeatActionShakeParts);
  159.  
downloadVehicleSeatActionShakeParts.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