BVB Source Codes

CRYENGINE Show VehiclePartDetachedEntity.cpp Source code

Return Download CRYENGINE: download VehiclePartDetachedEntity.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 an entity class for detached parts
  8.  
  9.    -------------------------------------------------------------------------
  10.    History:
  11.    - 26:10:2005: Created by Mathieu Pinard
  12.  
  13. *************************************************************************/
  14. #include "StdAfx.h"
  15.  
  16. #include <IViewSystem.h>
  17. #include <IItemSystem.h>
  18. #include <IVehicleSystem.h>
  19. #include <CryPhysics/IPhysics.h>
  20. #include <CryAnimation/ICryAnimation.h>
  21. #include <IActorSystem.h>
  22. #include <CryNetwork/ISerialize.h>
  23. #include <CryAISystem/IAgent.h>
  24.  
  25. #include "CryAction.h"
  26. #include "Vehicle.h"
  27. #include "VehiclePartDetachedEntity.h"
  28. #include "VehiclePartBase.h"
  29.  
  30. namespace VPDE
  31. {
  32. void RegisterEvents(IGameObjectExtension& goExt, IGameObject& gameObject)
  33. {
  34.         const int eventID = eGFE_OnCollision;
  35.         gameObject.UnRegisterExtForEvents(&goExt, NULL, 0);
  36.         gameObject.RegisterExtForEvents(&goExt, &eventID, 1);
  37. }
  38. }
  39.  
  40. //------------------------------------------------------------------------
  41. CVehiclePartDetachedEntity::~CVehiclePartDetachedEntity()
  42. {
  43.         GetGameObject()->EnablePhysicsEvent(false, eEPE_OnCollisionLogged);
  44. }
  45.  
  46. //------------------------------------------------------------------------
  47. bool CVehiclePartDetachedEntity::Init(IGameObject* pGameObject)
  48. {
  49.         SetGameObject(pGameObject);
  50.  
  51.         InitVehiclePart(pGameObject);
  52.  
  53.         return true;
  54. }
  55.  
  56. //------------------------------------------------------------------------
  57. void CVehiclePartDetachedEntity::PostInit(IGameObject* pGameObject)
  58. {
  59.         VPDE::RegisterEvents(*this, *pGameObject);
  60. }
  61.  
  62. //------------------------------------------------------------------------
  63. bool CVehiclePartDetachedEntity::ReloadExtension(IGameObject* pGameObject, const SEntitySpawnParams& params)
  64. {
  65.         ResetGameObject();
  66.  
  67.         VPDE::RegisterEvents(*this, *pGameObject);
  68.  
  69.         InitVehiclePart(pGameObject);
  70.  
  71.         return true;
  72. }
  73.  
  74. //------------------------------------------------------------------------
  75. void CVehiclePartDetachedEntity::InitVehiclePart(IGameObject* pGameObject)
  76. {
  77.         assert(pGameObject);
  78.  
  79.         // Set so we receive render events (when GO is set to update due to being visible), allowing last seen timer to reset
  80.         pGameObject->EnableUpdateSlot(this, 0);
  81.         pGameObject->SetUpdateSlotEnableCondition(this, 0, eUEC_VisibleAndInRange);
  82.  
  83.         if (IPhysicalEntity* pPhysics = GetEntity()->GetPhysics())
  84.         {
  85.                 pe_params_flags physFlags;
  86.  
  87.                 if (pPhysics->GetParams(&physFlags))
  88.                 {
  89.                         physFlags.flags |= pef_log_collisions;
  90.                         pPhysics->SetParams(&physFlags);
  91.  
  92.                         pGameObject->EnablePhysicsEvent(true, eEPE_OnCollisionLogged);
  93.                 }
  94.         }
  95.  
  96.         m_timeUntilStartIsOver = 10.0f;
  97. }
  98.  
  99. //------------------------------------------------------------------------
  100. void CVehiclePartDetachedEntity::Update(SEntityUpdateContext& ctx, int slot)
  101. {
  102.         const float frameTime = ctx.fFrameTime;
  103.  
  104.         switch (slot)
  105.         {
  106.         case 0:
  107.                 {
  108.                         if (m_timeUntilStartIsOver > 0.0f)
  109.                                 m_timeUntilStartIsOver -= frameTime;
  110.                 }
  111.                 break;
  112.         }
  113. }
  114.  
  115. //------------------------------------------------------------------------
  116. void CVehiclePartDetachedEntity::ProcessEvent(SEntityEvent& event)
  117. {
  118.         if (event.event == ENTITY_EVENT_RESET)
  119.         {
  120.                 gEnv->pEntitySystem->RemoveEntity(GetEntity()->GetId());
  121.         }
  122. }
  123.  
  124. //------------------------------------------------------------------------
  125. void CVehiclePartDetachedEntity::HandleEvent(const SGameObjectEvent& event)
  126. {
  127.         if (event.event == eGFE_OnCollision)
  128.         {
  129.                 if (m_timeUntilStartIsOver <= 0.0f)
  130.                 {
  131.                         const EventPhysCollision* pCollision = static_cast<const EventPhysCollision*>(event.ptr);
  132.                         IEntitySystem* pES = gEnv->pEntitySystem;
  133.                         IEntity* pE1 = pES->GetEntityFromPhysics(pCollision->pEntity[0]);
  134.                         IEntity* pE2 = pES->GetEntityFromPhysics(pCollision->pEntity[1]);
  135.                         IEntity* pCollider = pE1 == GetEntity() ? pE2 : pE1;
  136.  
  137.                         if (pCollider)
  138.                         {
  139.                                 //OnCollision( pCollider->GetId(), pCollision->pt, pCollision->n );
  140.                                 IEntity* pEntity = GetEntity();
  141.                                 CRY_ASSERT(pEntity);
  142.  
  143.                                 int slotCount = pEntity->GetSlotCount();
  144.                                 if (slotCount > 1)
  145.                                 {
  146.                                         for (int i = 1; i < slotCount; i++)
  147.                                         {
  148.                                                 if (pEntity->IsSlotValid(i))
  149.                                                         pEntity->FreeSlot(i);
  150.                                         }
  151.                                 }
  152.                         }
  153.                 }
  154.         }
  155. }
  156.  
  157. void CVehiclePartDetachedEntity::FullSerialize(TSerialize ser)
  158. {
  159.         bool hasGeom = false;
  160.         if (ser.IsWriting())
  161.         {
  162.                 if (GetEntity()->GetStatObj(0))
  163.                         hasGeom = true;
  164.         }
  165.         ser.Value("hasGeometry", hasGeom);
  166.         if (hasGeom)
  167.         {
  168.                 if (ser.IsWriting())
  169.                 {
  170.                         gEnv->p3DEngine->SaveStatObj(GetEntity()->GetStatObj(0), ser);
  171.                         if (GetEntity()->GetPhysics())
  172.                                 GetEntity()->GetPhysics()->GetStateSnapshot(ser);
  173.                 }
  174.                 else if (ser.IsReading())
  175.                 {
  176.                         IStatObj* pStatObj = gEnv->p3DEngine->LoadStatObj(ser);
  177.                         if (pStatObj)
  178.                         {
  179.                                 GetEntity()->SetStatObj(pStatObj, 0, true, 200.0f);
  180.                                 SEntityPhysicalizeParams physicsParams;
  181.                                 if (!pStatObj->GetPhysicalProperties(physicsParams.mass, physicsParams.density))
  182.                                         physicsParams.mass = 200.0f;
  183.                                 physicsParams.type = PE_RIGID;
  184.                                 physicsParams.nFlagsOR &= pef_log_collisions;
  185.                                 physicsParams.nSlot = 0;
  186.                                 GetEntity()->Physicalize(physicsParams);
  187.                                 if (GetEntity()->GetPhysics())
  188.                                         GetEntity()->GetPhysics()->SetStateFromSnapshot(ser);
  189.                         }
  190.                 }
  191.         }
  192. }
  193.  
downloadVehiclePartDetachedEntity.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