BVB Source Codes

CRYENGINE Show VehiclePartBase.h Source code

Return Download CRYENGINE: download VehiclePartBase.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. /*************************************************************************
  4.    -------------------------------------------------------------------------
  5.    $Id$
  6.    $DateTime$
  7.    Description: Implements a base class for vehicle parts
  8.  
  9.    -------------------------------------------------------------------------
  10.    History:
  11.    - 23:08:2005: Created by Mathieu Pinard
  12.  
  13. *************************************************************************/
  14. #ifndef __VEHICLEPARTBASE_H__
  15. #define __VEHICLEPARTBASE_H__
  16.  
  17. #include "IVehicleSystem.h"
  18. #include "VehicleCVars.h"
  19. #include "Vehicle.h"
  20. #include "ISharedParamsManager.h"
  21. #include "SharedParams/ISharedParams.h"
  22.  
  23. class CVehiclePartSubPart;
  24. class CVehiclePartSubPartEntity;
  25. class CVehicle;
  26. class CVehicleComponent;
  27. class CVehicleSeatActionRotateTurret;
  28.  
  29. #define VEHICLE_MASS_COLLTYPE_HEAVY  1500.f
  30. #define MAX_OPTIONAL_PARTS           5
  31. #define GEOMETRY_DESTROYED_SUFFIX    "_damaged"
  32. #define VEH_ANIM_POSE_MODIFIER_LAYER 1
  33.  
  34. class CVehiclePartBase
  35.         : public IVehiclePart
  36. {
  37.         // static member m_objectId also available in inherited vehicle classes
  38.         // cppcheck-suppress duplInheritedMember
  39.         IMPLEMENT_VEHICLEOBJECT;
  40. public:
  41.  
  42.         BEGIN_SHARED_PARAMS(SSharedParams_Parts)
  43.  
  44.         SSharedParams_Parts()
  45.                 : m_typeId(eVPT_Base), m_detachBaseForce(ZERO), m_detachProbability(0.0f), m_disableCollision(false), m_isPhysicalized(true)
  46.                   , m_wheelIndex(0), m_suspLength(0.0f), m_rimRadius(0.0f), m_position(ZERO), m_useOption(-1)
  47.                   , m_slipFrictionMod(0.0f), m_slipSlope(1.0f), m_torqueScale(1.0f), m_mass(0.0f), m_density(-1.0f)
  48.         {
  49.         }
  50.  
  51.         string m_name;
  52.         string m_helperPosName;
  53.  
  54.         Vec3   m_position;
  55.         int    m_typeId;
  56.         int    m_useOption;
  57.         float  m_mass;
  58.         float  m_density;
  59.  
  60.         // animated
  61.         // cppcheck incorrectly identifies m_filename and m_filenameDestroyed as duplicate in inherited class CVehiclePartStatic due to BEGIN_SHARED_PARAMS macro
  62.         //cppcheck-suppress duplInheritedMember
  63.         string m_filename;
  64.         //cppcheck-suppress duplInheritedMember
  65.         string m_filenameDestroyed;
  66.         string m_destroyedSuffix;
  67.  
  68.         // animated joint
  69.         Vec3  m_detachBaseForce;
  70.         float m_detachProbability;
  71.  
  72.         // wheel
  73.         int   m_wheelIndex;
  74.         float m_suspLength;
  75.         float m_rimRadius;
  76.         float m_slipFrictionMod;
  77.         float m_slipSlope;
  78.         float m_torqueScale;
  79.  
  80.         bool  m_disableCollision;
  81.         bool  m_isPhysicalized;
  82.  
  83.         END_SHARED_PARAMS
  84.  
  85.         CVehiclePartBase();
  86.         virtual ~CVehiclePartBase();
  87.  
  88.         // IVehiclePart
  89.         virtual bool              Init(IVehicle* pVehicle, const CVehicleParams& table, IVehiclePart* parent, CVehicle::SPartInitInfo& initInfo, int partType);
  90.         virtual void              PostInit() override;
  91.         virtual void              Reset() override;
  92.         virtual void              Release() override;
  93.  
  94.         virtual const char*       GetName() override { return m_pSharedParameters->m_name.c_str(); }
  95.         virtual IVehiclePart*     GetParent(bool root = false) override;
  96.         virtual IEntity*          GetEntity() override;
  97.  
  98.         virtual void              InvalidateTM(bool invalidate) override     {}
  99.         virtual void              AddChildPart(IVehiclePart* pPart) override { m_children.push_back((CVehiclePartBase*)pPart); }
  100.  
  101.         virtual void              OnEvent(const SVehiclePartEvent& event) override;
  102.  
  103.         virtual bool              ChangeState(EVehiclePartState state, int flags = 0) override;
  104.         virtual EVehiclePartState GetState() const override { return m_state; }
  105.  
  106.         virtual void              SetMaterial(IMaterial* pMaterial) override;
  107.         virtual void              Physicalize() override                                      {}
  108.         virtual void              SetMoveable(bool allowTranslationMovement = false) override {}
  109.  
  110.         virtual const Matrix34& GetLocalTM(bool relativeToParentPart, bool forced = false) override;
  111.         virtual const Matrix34& GetWorldTM() override;
  112.         virtual void            SetLocalTM(const Matrix34& localTM) override;
  113.         virtual const AABB&     GetLocalBounds() override;
  114.  
  115.         // set & get baseTM. for standard parts, this just forwards to LocalTM
  116.         virtual const Matrix34& GetLocalBaseTM() override                   { return GetLocalTM(true); }
  117.         virtual void            SetLocalBaseTM(const Matrix34& tm) override { SetLocalTM(tm); }
  118.  
  119.         virtual void            ResetLocalTM(bool recursive);
  120.  
  121.         virtual const Matrix34& GetLocalInitialTM() override { return GetLocalTM(true); }
  122.  
  123.         virtual void            Update(const float deltaTime) override;
  124.         virtual void            Serialize(TSerialize ser, EEntityAspects aspects) override;
  125.         virtual void            PostSerialize() override                                         {}
  126.  
  127.         virtual void            RegisterSerializer(IGameObjectExtension* gameObjectExt) override {}
  128.         virtual int             GetType() override                                               { return m_pSharedParameters->m_typeId; }
  129.  
  130.         virtual IVehicleWheel*  GetIWheel() override                                             { return nullptr; }
  131.  
  132.         virtual const Vec3& GetDetachBaseForce() override                                    { return m_pSharedParameters->m_detachBaseForce; }
  133.         virtual float       GetDetachProbability()                                           { return m_pSharedParameters->m_detachProbability; }
  134.         virtual float       GetMass() override                                               { return m_pSharedParameters->m_mass; }
  135.         virtual int         GetPhysId() override                                             { return m_physId; }
  136.         virtual int         GetSlot() override                                               { return m_slot; }
  137.         virtual int         GetIndex() const override                                        { return m_index; }
  138.         // ~IVehiclePart
  139.  
  140.         virtual void       OnVehicleEvent(EVehicleEvent event, const SVehicleEventParams& params) override {}
  141.  
  142.         virtual IStatObj*  GetSubGeometry(CVehiclePartBase* pPart, EVehiclePartState state, Matrix34& position, bool removeFromParent);
  143.         virtual IStatObj*  GetStatObj()                   { return NULL; }
  144.         virtual bool       SetStatObj(IStatObj* pStatObj) { return false; }
  145.         virtual void       GetGeometryName(EVehiclePartState state, string& name);
  146.  
  147.         virtual IMaterial* GetMaterial();
  148.  
  149.         // Is this part using external geometry
  150.         virtual IStatObj* GetExternalGeometry(bool destroyed) { return NULL; }
  151.  
  152.         bool              IsPhysicalized()                    { return m_pSharedParameters->m_isPhysicalized; }
  153.  
  154.         const Matrix34&   LocalToVehicleTM(const Matrix34& localTM);
  155.         EVehiclePartState GetMaxState();
  156.  
  157.         void              CloneMaterial();
  158.  
  159.         bool              IsRotationBlocked() const { return m_isRotationBlocked; }
  160.  
  161.         virtual void      GetMemoryUsage(ICrySizer* s) const override
  162.         {
  163.                 s->Add(*this);
  164.                 GetMemoryUsageInternal(s);
  165.         }
  166.  
  167.         void GetMemoryUsageInternal(ICrySizer* s) const;
  168.  
  169.         typedef std::vector<CVehiclePartBase*> TVehicleChildParts;
  170.         const TVehicleChildParts& GetChildParts() const { return m_children; }
  171.  
  172.         static const char*        ms_geometryDestroyedSuffixes[eVGS_Last], * ms_nullGeometryDestroyedSuffix;
  173.  
  174.         static inline const char* GetDestroyedGeometrySuffix(EVehiclePartState state)
  175.         {
  176.                 if ((state >= 0) && (state < (CRY_ARRAY_COUNT(ms_geometryDestroyedSuffixes))))
  177.                 {
  178.                         return ms_geometryDestroyedSuffixes[state];
  179.                 }
  180.                 else
  181.                 {
  182.                         return ms_nullGeometryDestroyedSuffix;
  183.                 }
  184.         }
  185.  
  186. public:
  187.  
  188.         enum EVehiclePartBaseEvent
  189.         {
  190.                 eVPE_ParentPartUpdated = eVPE_OtherEvents,
  191.         };
  192.  
  193.         virtual void Hide(bool hide);
  194.  
  195. protected:
  196.  
  197.         void                      ParsePhysicsParams(SEntityPhysicalizeParams& physicalizeParams, const CVehicleParams& table);
  198.  
  199.         bool                      ClampToRotationLimits(Ang3& angles);
  200.  
  201.         void                      CheckColltypeHeavy(int partid);
  202.         void                      SetFlags(int partid, int flags, bool add);
  203.         void                      SetFlagsCollider(int partid, int flagsCollider);
  204.  
  205.         EntityId                  SpawnEntity();
  206.         bool                      SetCGASlot(int jointId, IStatObj* pStatObj, bool bUpdatePhysics = true);
  207.  
  208.         float                     GetDamageSpeedMul();
  209.         virtual EVehiclePartState GetStateForDamageRatio(float ratio);
  210.  
  211.         bool                      RegisterSharedParameters(IVehicle* pVehicle, const CVehicleParams& table, int partType);
  212.         SSharedParams_PartsConstPtr m_pSharedParameters;
  213.  
  214. protected:
  215.         AABB          m_bounds;
  216.  
  217.         CVehicle*     m_pVehicle;
  218.         IVehiclePart* m_pParentPart;
  219.         IMaterial*    m_pClonedMaterial;
  220.  
  221.         int           m_physId;
  222.  
  223.         // used to fade in/out opacity
  224.         enum EVehiclePartHide
  225.         {
  226.                 eVPH_NoFade = 0,
  227.                 eVPH_FadeIn,
  228.                 eVPH_FadeOut,
  229.         };
  230.  
  231.         EVehiclePartState  m_state;
  232.         EVehiclePartHide   m_hideMode;
  233.         int                m_hideCount         : 8; // if 0, not hidden. Allows multiple hide/unhide requests simultaneously.
  234.         int                m_slot              : 8;
  235.  
  236.         int                m_users             : 7;
  237.         bool               m_isRotationBlocked : 1;
  238.  
  239.         TVehicleChildParts m_children;
  240.  
  241.         float              m_damageRatio;
  242.  
  243.         float              m_hideTimeMax;
  244.         float              m_hideTimeCount;
  245.         int                m_index;
  246.  
  247.         friend class CVehiclePartSubPart;
  248.         friend class CVehiclePartSubPartEntity;
  249.         friend class CVehiclePartAnimatedJoint;
  250.         friend class CVehicleSeatActionRotateTurret;
  251. };
  252.  
  253. #if ENABLE_VEHICLE_DEBUG
  254. namespace
  255. {
  256. ILINE bool IsDebugParts()
  257. {
  258.         return VehicleCVars().v_debugdraw == eVDB_Parts;
  259. }
  260. }
  261. #endif
  262.  
  263. #endif
  264.  
downloadVehiclePartBase.h 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