BVB Source Codes

CRYENGINE Show IViewSystem.h Source code

Return Download CRYENGINE: download IViewSystem.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: View System interfaces.
  8.  
  9.    -------------------------------------------------------------------------
  10.    History:
  11.    - 17:9:2004 : Created by Filippo De Luca
  12.  
  13. *************************************************************************/
  14.  
  15. #pragma once
  16.  
  17. #include <CryNetwork/ISerialize.h>
  18.  
  19. //
  20. #define VIEWID_NORMAL     0
  21. #define VIEWID_FOLLOWHEAD 1
  22. #define VIEWID_VEHICLE    2
  23. #define VIEWID_RAGDOLL    3
  24.  
  25. enum EMotionBlurType
  26. {
  27.         eMBT_None         = 0,
  28.         eMBT_Accumulation = 1,
  29.         eMBT_Velocity     = 2
  30. };
  31.  
  32. struct SViewParams
  33. {
  34.         SViewParams() :
  35.                 position(ZERO),
  36.                 rotation(IDENTITY),
  37.                 localRotationLast(IDENTITY),
  38.                 nearplane(0.0f),
  39.                 fov(0.0f),
  40.                 viewID(0),
  41.                 groundOnly(false),
  42.                 shakingRatio(0.0f),
  43.                 currentShakeQuat(IDENTITY),
  44.                 currentShakeShift(ZERO),
  45.                 idTarget(0),
  46.                 targetPos(ZERO),
  47.                 frameTime(0.0f),
  48.                 angleVel(0.0f),
  49.                 vel(0.0f),
  50.                 dist(0.0f),
  51.                 blend(true),
  52.                 blendPosSpeed(5.0f),
  53.                 blendRotSpeed(10.0f),
  54.                 blendFOVSpeed(5.0f),
  55.                 blendPosOffset(ZERO),
  56.                 blendRotOffset(IDENTITY),
  57.                 blendFOVOffset(0),
  58.                 justActivated(false),
  59.                 viewIDLast(0),
  60.                 positionLast(ZERO),
  61.                 rotationLast(IDENTITY),
  62.                 FOVLast(0)
  63.         {
  64.         }
  65.  
  66.         void SetViewID(uint8 id, bool blend = true)
  67.         {
  68.                 viewID = id;
  69.                 if (!blend)
  70.                         viewIDLast = id;
  71.         }
  72.  
  73.         void UpdateBlending(float frameTime)
  74.         {
  75.                 //if necessary blend the view
  76.                 if (blend)
  77.                 {
  78.                         if (viewIDLast != viewID)
  79.                         {
  80.                                 blendPosOffset = positionLast - position;
  81.                                 blendRotOffset = (rotationLast / rotation).GetNormalized();
  82.                                 blendFOVOffset = FOVLast - fov;
  83.                         }
  84.                         else
  85.                         {
  86.                                 blendPosOffset -= blendPosOffset * min(1.0f, blendPosSpeed * frameTime);
  87.                                 blendRotOffset = Quat::CreateSlerp(blendRotOffset, IDENTITY, min(1.0f, frameTime * blendRotSpeed));
  88.                                 blendFOVOffset -= blendFOVOffset * min(1.0f, blendFOVSpeed * frameTime);
  89.                         }
  90.  
  91.                         position += blendPosOffset;
  92.                         rotation *= blendRotOffset;
  93.                         fov += blendFOVOffset;
  94.                 }
  95.                 else
  96.                 {
  97.                         blendPosOffset.zero();
  98.                         blendRotOffset.SetIdentity();
  99.                         blendFOVOffset = 0.0f;
  100.                 }
  101.  
  102.                 viewIDLast = viewID;
  103.         }
  104.  
  105.         void BlendFrom(const SViewParams& params)
  106.         {
  107.                 positionLast = params.position;
  108.                 rotationLast = params.rotation;
  109.                 FOVLast = params.fov;
  110.                 localRotationLast = params.localRotationLast;
  111.                 blend = true;
  112.                 viewIDLast = 0xff;
  113.         }
  114.  
  115.         void SaveLast()
  116.         {
  117.                 if (viewIDLast != 0xff)
  118.                 {
  119.                         positionLast = position;
  120.                         rotationLast = rotation;
  121.                         FOVLast = fov;
  122.                 }
  123.                 else
  124.                 {
  125.                         viewIDLast = 0xfe;
  126.                 }
  127.         }
  128.  
  129.         void ResetBlending()
  130.         {
  131.                 blendPosOffset.zero();
  132.                 blendRotOffset.SetIdentity();
  133.         }
  134.  
  135.         const Vec3& GetPositionLast() { return positionLast; }
  136.         const Quat& GetRotationLast() { return rotationLast; }
  137.  
  138.         //
  139.         Vec3  position;//view position
  140.         Quat  rotation;//view orientation
  141.         Quat  localRotationLast;
  142.  
  143.         float nearplane;//custom near clipping plane, 0 means use engine defaults
  144.         float fov;
  145.  
  146.         uint8 viewID;
  147.  
  148.         //view shake status
  149.         bool  groundOnly;
  150.         float shakingRatio;//whats the ammount of shake, from 0.0 to 1.0
  151.         Quat  currentShakeQuat;//what the current angular shake
  152.         Vec3  currentShakeShift;//what is the current translational shake
  153.  
  154.         // For damping camera movement.
  155.         EntityId idTarget;  // Who we're watching. 0 == nobody.
  156.         Vec3     targetPos; // Where the target was.
  157.         float    frameTime; // current dt.
  158.         float    angleVel;  // previous rate of change of angle.
  159.         float    vel;       // previous rate of change of dist between target and camera.
  160.         float    dist;      // previous dist of cam from target
  161.  
  162.         //blending
  163.         bool  blend;
  164.         float blendPosSpeed;
  165.         float blendRotSpeed;
  166.         float blendFOVSpeed;
  167.         Vec3  blendPosOffset;
  168.         Quat  blendRotOffset;
  169.         float blendFOVOffset;
  170.         bool  justActivated;
  171.  
  172. private:
  173.         uint8 viewIDLast;
  174.         Vec3  positionLast;//last view position
  175.         Quat  rotationLast;//last view orientation
  176.         float FOVLast;
  177. };
  178.  
  179. struct IGameObject;
  180. struct IEntity;
  181. struct IAnimSequence;
  182. struct SCameraParams;
  183.  
  184. struct IView
  185. {
  186.         virtual ~IView(){}
  187.         struct SShakeParams
  188.         {
  189.                 Ang3  shakeAngle;
  190.                 Vec3  shakeShift;
  191.                 float sustainDuration;
  192.                 float fadeInDuration;
  193.                 float fadeOutDuration;
  194.                 float frequency;
  195.                 float randomness;
  196.                 int   shakeID;
  197.                 bool  bFlipVec;
  198.                 bool  bUpdateOnly;
  199.                 bool  bGroundOnly;
  200.                 bool  bPermanent; // if true, sustainDuration is ignored
  201.                 bool  isSmooth;
  202.  
  203.                 SShakeParams()
  204.                         : shakeAngle(0, 0, 0)
  205.                         , shakeShift(0, 0, 0)
  206.                         , sustainDuration(0)
  207.                         , fadeInDuration(0)
  208.                         , fadeOutDuration(2.f)
  209.                         , frequency(0)
  210.                         , randomness(0)
  211.                         , shakeID(0)
  212.                         , bFlipVec(true)
  213.                         , bUpdateOnly(false)
  214.                         , bGroundOnly(false)
  215.                         , bPermanent(false)
  216.                         , isSmooth(false)
  217.                 {}
  218.         };
  219.  
  220.         virtual void               Release() = 0;
  221.         virtual void               Update(float frameTime, bool isActive) = 0;
  222.         virtual void               LinkTo(IGameObject* follow) = 0;
  223.         virtual void               LinkTo(IEntity* follow) = 0;
  224.         virtual EntityId           GetLinkedId() = 0;
  225.  
  226.         virtual void               SetCurrentParams(SViewParams& params) = 0;
  227.         virtual const SViewParams* GetCurrentParams() = 0;
  228.         virtual void               SetViewShake(Ang3 shakeAngle, Vec3 shakeShift, float duration, float frequency, float randomness, int shakeID, bool bFlipVec = true, bool bUpdateOnly = false, bool bGroundOnly = false) = 0;
  229.         virtual void               SetViewShakeEx(const SShakeParams& params) = 0;
  230.         virtual void               StopShake(int shakeID) = 0;
  231.         virtual void               ResetShaking() = 0;
  232.         virtual void               ResetBlending() = 0;
  233.         virtual void               SetFrameAdditiveCameraAngles(const Ang3& addFrameAngles) = 0;
  234.         virtual void               SetScale(const float scale) = 0;
  235.         virtual void               SetZoomedScale(const float scale) = 0;
  236.         virtual void               SetActive(bool const bActive) = 0;
  237. };
  238.  
  239. struct IViewSystemListener
  240. {
  241.         virtual ~IViewSystemListener(){}
  242.         virtual bool OnBeginCutScene(IAnimSequence* pSeq, bool bResetFX) = 0;
  243.         virtual bool OnEndCutScene(IAnimSequence* pSeq) = 0;
  244.         virtual bool OnCameraChange(const SCameraParams& cameraParams) = 0;
  245. };
  246.  
  247. struct IViewSystem
  248. {
  249.         virtual ~IViewSystem(){}
  250.         virtual IView* CreateView() = 0;
  251.         virtual void   RemoveView(IView* pView) = 0;
  252.         virtual void   RemoveView(unsigned int viewId) = 0;
  253.  
  254.         virtual void   SetActiveView(IView* pView) = 0;
  255.         virtual void   SetActiveView(unsigned int viewId) = 0;
  256.  
  257.         //utility functions
  258.         virtual IView*       GetView(unsigned int viewId) const = 0;
  259.         virtual IView*       GetActiveView() const = 0;
  260.         virtual bool         IsClientActorViewActive() const = 0;
  261.  
  262.         virtual unsigned int GetViewId(IView* pView) const = 0;
  263.         virtual unsigned int GetActiveViewId() const = 0;
  264.  
  265.         virtual IView*       GetViewByEntityId(unsigned int id, bool forceCreate = false) = 0;
  266.  
  267.         virtual bool         AddListener(IViewSystemListener* pListener) = 0;
  268.         virtual bool         RemoveListener(IViewSystemListener* pListener) = 0;
  269.  
  270.         virtual void         Serialize(TSerialize ser) = 0;
  271.         virtual void         PostSerialize() = 0;
  272.  
  273.         // Get default distance to near clipping plane.
  274.         virtual float GetDefaultZNear() const = 0;
  275.  
  276.         virtual void  SetBlendParams(float fBlendPosSpeed, float fBlendRotSpeed, bool performBlendOut) = 0;
  277.  
  278.         // Used by time demo playback.
  279.         virtual void SetOverrideCameraRotation(bool bOverride, Quat rotation) = 0;
  280.  
  281.         virtual bool IsPlayingCutScene() const = 0;
  282.  
  283.         virtual void UpdateSoundListeners() = 0;
  284.  
  285.         virtual void SetDeferredViewSystemUpdate(bool const bDeferred) = 0;
  286.         virtual bool UseDeferredViewSystemUpdate() const = 0;
  287.         virtual void SetControlAudioListeners(bool const bActive) = 0;
  288. };
  289.  
downloadIViewSystem.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