BVB Source Codes

CRYENGINE Show VehicleSeat.h Source code

Return Download CRYENGINE: download VehicleSeat.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 standard seat for vehicles
  8.  
  9.    -------------------------------------------------------------------------
  10.    History:
  11.    - 14:04:2005: Created by Mathieu Pinard
  12.  
  13. *************************************************************************/
  14. #ifndef __VEHICLESEAT_H__
  15. #define __VEHICLESEAT_H__
  16.  
  17. #include "IVehicleSystem.h"
  18. #include "IMovementController.h"
  19. #include "AIProxy.h"
  20. #include "AnimationGraph/AnimatedCharacter.h"
  21.  
  22. class CGameChannel;
  23. class CVehicle;
  24. class CVehicleSeatSerializer;
  25. class CVehicleSeatGroup;
  26. class CScriptBind_Vehicle;
  27. class CScriptBind_VehicleSeat;
  28. class CCryAction;
  29. class CVehicleSeatActionWeapons;
  30. class CVehicleSeatActionRotateTurret;
  31. class CVehicleViewThirdPerson;
  32.  
  33. struct SSeatActionData
  34. {
  35.         IVehicleSeatAction* pSeatAction;
  36.         bool                isAvailableRemotely;
  37.         bool                isEnabled;
  38.  
  39.         SSeatActionData()
  40.         {
  41.                 pSeatAction = NULL;
  42.                 isAvailableRemotely = false;
  43.                 isEnabled = true;
  44.         }
  45.  
  46.         void Reset()
  47.         {
  48.                 if (pSeatAction)
  49.                         pSeatAction->Reset();
  50.  
  51.                 isEnabled = true;
  52.         }
  53.  
  54.         void Serialize(TSerialize ser, EEntityAspects aspects)
  55.         {
  56.                 if (ser.GetSerializationTarget() != eST_Network)
  57.                 {
  58.                         ser.Value("isEnabledAction", isEnabled);
  59.                 }
  60.  
  61.                 if (pSeatAction)
  62.                         pSeatAction->Serialize(ser, aspects);
  63.         }
  64.  
  65.         void GetMemoryUsage(ICrySizer* pSizer) const
  66.         {
  67.                 pSizer->AddObject(pSeatAction);
  68.         }
  69. };
  70.  
  71. typedef std::vector<SSeatActionData> TVehicleSeatActionVector;
  72. typedef std::vector<IVehicleView*>   TVehicleViewVector;
  73.  
  74. class CVehicleSeat
  75.         :
  76.           public IVehicleSeat,
  77.           public IMovementController,
  78.           public IFireController,
  79.           public IAnimatedCharacterListener
  80. {
  81. public:
  82.         CVehicleSeat();
  83.         ~CVehicleSeat();
  84.  
  85.         virtual bool         Init(IVehicle* pVehicle, TVehicleSeatId seatId, const CVehicleParams& seatTable);
  86.         virtual void         PostInit(IVehicle* pVehicle);
  87.         virtual void         Reset();
  88.         virtual void         Release() { delete this; }
  89.  
  90.         void                 GetMemoryUsage(ICrySizer* s) const;
  91.  
  92.         const char*          GetSeatName() const     { return m_name.c_str(); }
  93.         IMovementController* GetMovementController() { return this; }
  94.  
  95.         void                 SerializeActions(TSerialize ser, EEntityAspects aspects);
  96.         void                 OnSpawnComplete();
  97.  
  98.         // IVehicleSeat
  99.         virtual bool                      Enter(EntityId actorId, bool isTransitionEnabled = true);
  100.         virtual bool                      Exit(bool isTransitionEnabled, bool force = false, Vec3 exitPos = ZERO);
  101.  
  102.         virtual void                      SetLocked(EVehicleSeatLockStatus lock) { m_lockStatus = lock; }
  103.         virtual EVehicleSeatLockStatus    GetLockedStatus() const                { return m_lockStatus; }
  104.  
  105.         virtual bool                      IsDriver() const                       { return m_isDriver; }
  106.         virtual bool                      IsGunner() const;
  107.         virtual bool                      IsRemoteControlled() const             { return IsRemoteControlledInternal(); }
  108.         virtual bool                      IsLocked(IActor* pActor) const;
  109.         bool                              IsRotatable() const                    { return m_pTurretAction != NULL; }
  110.  
  111.         virtual bool                      IsPassengerHidden() const              { return m_isPassengerHidden; }
  112.         virtual bool                      IsPassengerExposed() const             { return m_isPassengerExposed; }
  113.         virtual const SSeatSoundParams&   GetSoundParams() const                 { return m_soundParams; }
  114.         SSeatSoundParams&                 GetSoundParams()                       { return m_soundParams; }
  115.  
  116.         virtual bool                      ProcessPassengerMovementRequest(const CMovementRequest& movementRequest);
  117.  
  118.         virtual IVehicleView*             GetView(TVehicleViewId viewId) const;
  119.         virtual bool                      SetView(TVehicleViewId viewId);
  120.         virtual TVehicleViewId            GetCurrentViewId() const       { return m_currentView; }
  121.         virtual IVehicleView*             GetCurrentView() const         { return GetView(m_currentView); }
  122.         virtual TVehicleViewId            GetNextViewId(bool bExcludeDebug, bool bExcludeDisabled) const;
  123.         virtual TVehicleViewId            GetNextAvailableViewId() const { return GetNextViewId(false, false); }
  124.         virtual int                       GetViewCount() const           { return m_views.size(); };
  125.  
  126.         virtual const char*               GetActionMap() const           { return m_actionMap.c_str(); }
  127.  
  128.         virtual bool                      IsAutoAimEnabled();
  129.  
  130.         virtual IVehicleSeatAction*       GetISeatActionWeapons();
  131.         virtual const IVehicleSeatAction* GetISeatActionWeapons() const;
  132.  
  133.         virtual void                      PrePhysUpdate(const float dt);
  134.  
  135.         virtual void                      OffsetPosition(const Vec3& delta);
  136.         // ~IVehicleSeat
  137.  
  138.         bool     EnterRemotely(EntityId actorId);
  139.         bool     ExitRemotely();
  140.  
  141.         bool     SitDown();
  142.         bool     StandUp();
  143.  
  144.         bool     ShouldEnterInFirstPerson() { return m_shouldEnterInFirstPerson; }
  145.         bool     ShouldExitInFirstPerson()  { return m_shouldExitInFirstPerson; }
  146.  
  147.         void     GivesActorSeatFeatures(bool enabled = true, bool isRemote = false);
  148.  
  149.         void     SetPasssenger(EntityId passengerId) { m_passengerId = passengerId; }
  150.         EntityId GetPassenger(bool remoteUser = false) const;
  151.         IActor*  GetPassengerActor(bool remoteUser = false) const;
  152.         bool     IsFree(IActor* pActor);
  153.  
  154.         void     OnAction(const TVehicleActionId actionId, int activationMode, float value);
  155.         void     Update(float deltaTime);
  156.         void     UpdateView(SViewParams& viewParams);
  157.         void     UpdateRemote(IActor* pActor, float deltaTime);
  158.  
  159.         void     UpdateSounds(float deltaTime);
  160.         void     StopSounds();
  161.  
  162.         void Serialize(TSerialize ser, EEntityAspects);
  163.         void                    PostSerialize();
  164.         CVehicleSeatSerializer* GetSerializer();
  165.         void                    SetSerializer(CVehicleSeatSerializer* pSerializer);
  166.  
  167.         virtual IVehicle*       GetVehicle() const { return (IVehicle*)m_pVehicle; }
  168.         virtual IVehiclePart*   GetAimPart() const { return (IVehiclePart*)m_pAimPart; }
  169.  
  170.         float                   ProcessPassengerDamage(float actorHealth, float damage, int hitTypeId, bool explosion);
  171.  
  172.         virtual void            OnPassengerDeath();
  173.         virtual void            UnlinkPassenger(bool ragdoll);
  174.         void                    OnVehicleEvent(EVehicleEvent event, const SVehicleEventParams& params);
  175.         virtual void            OnCameraShake(float& angleAmount, float& shiftAmount, const Vec3& pos, const char* source) const;
  176.  
  177.         // network
  178.         EntityId NetGetPassengerId() const;
  179.         void     NetSetPassengerId(EntityId passengerId);
  180.  
  181.         // IMovementController
  182.         virtual bool RequestMovement(CMovementRequest& request);
  183.         virtual void GetMovementState(SMovementState& state);
  184.         virtual bool GetStanceState(const SStanceStateQuery& query, SStanceState& state);
  185.         // ~IMovementController
  186.  
  187.         // IFireController
  188.         virtual bool RequestFire(bool bFire);
  189.         virtual void UpdateTargetPosAI(const Vec3& pos);
  190.         // ~IFireController
  191.  
  192.         virtual void                     ForceFinishExiting()   {}
  193.  
  194.         const TVehicleSeatActionVector&  GetSeatActions() const { return m_seatActions; }
  195.         TVehicleSeatActionVector&        GetSeatActions()       { return m_seatActions; }
  196.  
  197.         bool                             IsPassengerClientActor() const;
  198.  
  199.         int                              GetSeatActionId(IVehicleSeatAction* pAction) const;
  200.         const IVehicleSeatAction*        GetSeatActionById(int id) const;
  201.         virtual void                     ChangedNetworkState(NetworkAspectType aspects);
  202.  
  203.         const string&                    GetName() const   { return m_name; }
  204.         TVehicleSeatId                   GetSeatId() const { return m_seatId; }
  205.  
  206.         CGameChannel*                    GetGameChannel(EntityId actorId);
  207.  
  208.         virtual IVehicleHelper*          GetSitHelper() const                        { return m_pSitHelper; }
  209.         virtual IVehicleHelper*          GetAIVisionHelper() const                   { return m_pAIVisionHelper; }
  210.         IVehicleHelper*                  GetEnterHelper() const                      { return m_pEnterHelper; }
  211.         IVehicleHelper*                  GetExitHelper() const                       { return m_pExitHelper ? m_pExitHelper : m_pEnterHelper; }
  212.  
  213.         virtual int                      GetCurrentTransition() const                { return m_transitionType; }
  214.  
  215.         void                             SetSeatGroup(CVehicleSeatGroup* pSeatGroup) { m_pSeatGroup = pSeatGroup; }
  216.         const CVehicleSeatGroup*         GetSeatGroup() const                        { return m_pSeatGroup; }
  217.  
  218.         CVehicleSeatActionWeapons*       GetSeatActionWeapons()                      { return m_pWeaponAction; }
  219.         const CVehicleSeatActionWeapons* GetSeatActionWeapons() const                { return m_pWeaponAction; }
  220.  
  221.         int                              GetSeatGroupIndex() const                   { return m_seatGroupIndex; }
  222.         void                             SetAIWeaponId(EntityId aiWeaponId)          { m_aiWeaponId = aiWeaponId; }
  223.  
  224.         // vehicle exit code.
  225.         Matrix34      GetExitTM(IActor* pActor, bool opposite = false);                           // get this seat's current exit TM
  226.         bool          TestExitPosition(IActor* pActor, Vec3& testPos, EntityId* pBlockingEntity); // test a specific position to see if the actor can be placed there.
  227.  
  228.         void          OnSeatFreed(TVehicleSeatId seatId, EntityId passengerId);
  229.         CVehicleSeat* GetSeatUsedRemotely(bool onlyIfBeingUsed) const;
  230.  
  231.         bool          IsPassengerShielded() const { return m_isPassengerShielded; };
  232.  
  233.         bool          ShouldEnslaveActorAnimations() const;
  234.  
  235.         void          OnVehicleActionControllerDeleted();
  236.  
  237.         // from IAnimCharListener
  238.         virtual void OnCharacterChange();
  239.  
  240. protected:
  241.  
  242.         bool            InitSeatActions(const CVehicleParams& seatTable);
  243.  
  244.         TVehicleSeatId  GetNextSeatId(const TVehicleSeatId currentSeatId) const;
  245.  
  246.         IVehicleClient* GetVehicleClient() const;
  247.  
  248.         void            UpdateHiddenState(bool hide);
  249.  
  250.         void            UpdatePassengerLocalTM(IActor* pActor);
  251.         bool            QueueTransition();
  252.  
  253.         inline bool     IsRemoteControlledInternal() const { return m_isRemoteControlled; } //avoid the virtual cost on when used internally
  254.  
  255.         static CCryAction*              m_pGameFramework;
  256.  
  257.         TVehicleSeatActionVector        m_seatActions;
  258.         TVehicleViewVector              m_views;
  259.  
  260.         string                          m_seatNameToUseForEntering;
  261.         string                          m_useActionsRemotelyOfSeat; // only for init
  262.  
  263.         string                          m_actionMap;
  264.         string                          m_name;
  265.  
  266.         SSeatSoundParams                m_soundParams;
  267.  
  268.         Vec3                            m_exitOffsetPlayer;
  269.         Vec3                            m_adjustedExitPos;
  270.         Vec3                            m_exitWorldPos; // set when player requests exit (to avoid repeated raycasts)
  271.  
  272.         CVehicle*                       m_pVehicle;
  273.         CVehicleSeatSerializer*         m_pSerializer;
  274.  
  275.         CVehicleSeatActionWeapons*      m_pWeaponAction;
  276.         CVehicleSeatActionRotateTurret* m_pTurretAction;
  277.         CVehicleSeatGroup*              m_pSeatGroup;
  278.         CVehicleSeat*                   m_pRemoteSeat;
  279.  
  280.         IVehiclePart*                   m_pAimPart;
  281.  
  282.         IVehicleHelper*                 m_pEnterHelper;
  283.         IVehicleHelper*                 m_pExitHelper;
  284.         IVehicleHelper*                 m_pSitHelper;
  285.         IVehicleHelper*                 m_pAIVisionHelper;
  286.  
  287.         EntityId                        m_serializerId;
  288.         EntityId                        m_passengerId;
  289.         EntityId                        m_aiWeaponId;
  290.  
  291.         TVehicleSeatId                  m_seatId;
  292.  
  293.         TVehicleViewId                  m_currentView;
  294.  
  295.         EVehicleSeatLockStatus          m_lockStatus;
  296.         EVehicleSeatLockStatus          m_lockDefault;
  297.  
  298.         IActionPtr                      m_pIdleAction;
  299.  
  300.         // Mannequin
  301.         enum EMannequinSeatActions
  302.         {
  303.                 eMannequinSeatAction_Idle = 0,
  304.                 eMannequinSeatAction_Exit,
  305.                 eMannequinSeatAction_Count
  306.         };
  307.  
  308.         FragmentID m_seatFragmentIDs[eMannequinSeatAction_Count];
  309.  
  310.         // ugly variables for PostSerialize, needed to support recent changes in entity serialization
  311.         EntityId m_postEnterId;
  312.         EntityId m_postViewId;
  313.         // ~ugly
  314.  
  315.         float m_explosionShakeMult;
  316.  
  317.         int   m_seatGroupIndex;
  318.  
  319.         uint8 m_transitionType;
  320.         uint8 m_prevTransitionType;
  321.         uint8 m_queuedTransition;
  322.  
  323.         bool  m_isDriver                 : 1;
  324.         bool  m_isPassengerShielded      : 1;
  325.         bool  m_isPassengerHidden        : 1;
  326.         bool  m_isPassengerExposed       : 1;
  327.  
  328.         bool  m_isPlayerViewBlending     : 1;
  329.         bool  m_stopAllAnimationsOnEnter : 1;
  330.         bool  m_skipViewBlending         : 1;
  331.         bool  m_updatePassengerTM        : 1;
  332.  
  333.         bool  m_isRemoteControlled       : 1;
  334.         bool  m_isRagdollingOnDeath      : 1;
  335.         bool  m_movePassengerOnExit      : 1;
  336.  
  337.         bool  m_autoAimEnabled           : 1;
  338.         bool  m_transformViewOnExit      : 1; //When sat in the seat you are already in a world space position - no need to teleport when exiting
  339.  
  340.         bool  m_shouldEnterInFirstPerson : 1;
  341.         bool  m_shouldExitInFirstPerson  : 1;
  342. };
  343.  
  344. #endif
  345.  
downloadVehicleSeat.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