BVB Source Codes

CRYENGINE Show VehicleAnimationComponent.cpp Source code

Return Download CRYENGINE: download VehicleAnimationComponent.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 vehicle animation using Mannequin
  8.  
  9.    -------------------------------------------------------------------------
  10.    History:
  11.    - 06:02:2012: Created by Tom Berry
  12.  
  13. *************************************************************************/
  14. #include "StdAfx.h"
  15.  
  16. #include "../Vehicle.h"
  17. #include "../VehicleSeat.h"
  18.  
  19. #include <ICryMannequin.h>
  20.  
  21. CVehicleAnimationComponent::CVehicleAnimationComponent()
  22.         :
  23.         m_vehicle(NULL),
  24.         m_pADBVehicle(NULL),
  25.         m_pADBPassenger(NULL),
  26.         m_pAnimContext(NULL),
  27.         m_pActionController(NULL)
  28. {
  29. }
  30.  
  31. CVehicleAnimationComponent::~CVehicleAnimationComponent()
  32. {
  33.         DeleteActionController();
  34. }
  35.  
  36. void CVehicleAnimationComponent::Initialise(CVehicle& vehicle, const CVehicleParams& mannequinTable)
  37. {
  38.         DeleteActionController();
  39.  
  40.         m_vehicle = &vehicle;
  41.  
  42.         const char* vehicleControllerDef = mannequinTable.getAttr("controllerDef");
  43.         const char* vehicleADB = mannequinTable.getAttr("vehicleADB");
  44.         const char* passengerADB = mannequinTable.getAttr("passengerADB");
  45.         const char* tag = mannequinTable.getAttr("tag");
  46.  
  47.         IMannequin& mannequinSys = gEnv->pGameFramework->GetMannequinInterface();
  48.  
  49.         m_pADBVehicle = mannequinSys.GetAnimationDatabaseManager().Load(vehicleADB);
  50.         m_pADBPassenger = mannequinSys.GetAnimationDatabaseManager().Load(passengerADB);
  51.         const SControllerDef* pControllerDef = mannequinSys.GetAnimationDatabaseManager().LoadControllerDef(vehicleControllerDef);
  52.  
  53.         if (m_pADBVehicle && pControllerDef)
  54.         {
  55.                 m_pAnimContext = new SAnimationContext(*pControllerDef);
  56.                 m_pActionController = mannequinSys.CreateActionController(vehicle.GetEntity(), *m_pAnimContext);
  57.  
  58.                 if (tag)
  59.                 {
  60.                         m_typeTag = pControllerDef->m_tags.Find(tag);
  61.                         if (m_typeTag != TAG_ID_INVALID)
  62.                         {
  63.                                 m_pAnimContext->state.Set(m_typeTag, true);
  64.                         }
  65.                 }
  66.  
  67.                 //--- Create scopes via the parts?
  68.                 const int numParts = vehicle.GetPartCount();
  69.                 for (int p = 0; p < numParts; p++)
  70.                 {
  71.                         IVehiclePart* pPart = vehicle.GetPart(p);
  72.                         TagID partContext = pControllerDef->m_scopeContexts.Find(pPart->GetName());
  73.  
  74.                         if (partContext != TAG_ID_INVALID)
  75.                         {
  76.                                 const int slot = pPart->GetSlot();
  77.  
  78.                                 if (slot >= 0)
  79.                                 {
  80.                                         ICharacterInstance* pSlotChar = vehicle.GetEntity()->GetCharacter(slot);
  81.                                         if (pSlotChar)
  82.                                         {
  83.                                                 m_pActionController->SetScopeContext(partContext, *vehicle.GetEntity(), pSlotChar, m_pADBVehicle);
  84.                                         }
  85.                                 }
  86.                         }
  87.                 }
  88.         }
  89. }
  90.  
  91. void CVehicleAnimationComponent::Reset()
  92. {
  93.         if (m_pActionController)
  94.         {
  95.                 m_pActionController->Flush();
  96.         }
  97.  
  98.         if (m_pAnimContext)
  99.         {
  100.                 m_pAnimContext->state.Clear();
  101.                 if (m_typeTag != TAG_ID_INVALID)
  102.                 {
  103.                         m_pAnimContext->state.Set(m_typeTag, true);
  104.                 }
  105.         }
  106. }
  107.  
  108. void CVehicleAnimationComponent::Update(float timePassed)
  109. {
  110.         if (m_pActionController)
  111.         {
  112.                 m_pActionController->Update(timePassed);
  113.         }
  114. }
  115.  
  116. void CVehicleAnimationComponent::AttachPassengerScope(CVehicleSeat* pSeat, EntityId entID, bool attach)
  117. {
  118.         CRY_ASSERT(m_pActionController);
  119.  
  120.         IActorSystem* pActorSystem = CCryAction::GetCryAction()->GetIActorSystem();
  121.         CRY_ASSERT(pActorSystem);
  122.  
  123.         IActor* pActor = pActorSystem->GetActor(entID);
  124.         CRY_ASSERT(pActor);
  125.  
  126.         const SControllerDef& contDef = m_pActionController->GetContext().controllerDef;
  127.         TagID targetScopeContext = contDef.m_scopeContexts.Find(pSeat->GetName());
  128.  
  129.         if (targetScopeContext != TAG_ID_INVALID)
  130.         {
  131.                 IAnimatedCharacter* pAnimChar = pActor ? pActor->GetAnimatedCharacter() : NULL;
  132.                 if (pAnimChar)
  133.                 {
  134.                         if (attach)
  135.                         {
  136.                                 pAnimChar->SetMovementControlMethods(eMCM_Animation, eMCM_Animation);
  137.                                 pAnimChar->RequestPhysicalColliderMode(eColliderMode_Disabled, eColliderModeLayer_Game, "CVehicle::AttachPassengerScope");
  138.                         }
  139.                         else
  140.                         {
  141.                                 pAnimChar->SetMovementControlMethods(eMCM_Entity, eMCM_Entity);
  142.                                 pAnimChar->RequestPhysicalColliderMode(eColliderMode_Undefined, eColliderModeLayer_Game, "CVehicle::AttachPassengerScope");
  143.                         }
  144.                 }
  145.  
  146.                 uint32 numScopes = m_pActionController->GetTotalScopes();
  147.  
  148.                 if (pActor && pActor->GetAnimatedCharacter()->GetActionController())
  149.                 {
  150.                         m_pActionController->SetSlaveController(*pActor->GetAnimatedCharacter()->GetActionController(), targetScopeContext, attach, m_pADBPassenger);
  151.                 }
  152.                 else
  153.                 {
  154.                         if (attach && pActor)
  155.                         {
  156.                                 m_pActionController->SetScopeContext(targetScopeContext, *pActor->GetEntity(), pActor->GetEntity()->GetCharacter(0), m_pADBPassenger);
  157.                         }
  158.                         else
  159.                         {
  160.                                 m_pActionController->ClearScopeContext(targetScopeContext);
  161.                         }
  162.                 }
  163.         }
  164.  
  165.         TagID userTagID = contDef.m_tags.Find(pSeat->GetName());
  166.         if (userTagID != TAG_ID_INVALID)
  167.         {
  168.                 m_pAnimContext->state.Set(userTagID, attach);
  169.         }
  170. }
  171.  
  172. void CVehicleAnimationComponent::DeleteActionController()
  173. {
  174.         SAFE_RELEASE(m_pActionController);
  175.         SAFE_DELETE(m_pAnimContext);
  176. }
  177.  
downloadVehicleAnimationComponent.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