BVB Source Codes

CRYENGINE Show GameVolume_Water.h Source code

Return Download CRYENGINE: download GameVolume_Water.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. #ifndef _GAME_VOLUME_WATER_H
  4. #define _GAME_VOLUME_WATER_H
  5.  
  6. #pragma once
  7.  
  8. class CGameVolume_Water : public CGameObjectExtensionHelper<CGameVolume_Water, IGameObjectExtension>
  9. {
  10.         struct WaterProperties
  11.         {
  12.                 WaterProperties(IEntity* pEntity)
  13.                 {
  14.                         CRY_ASSERT(pEntity != NULL);
  15.  
  16.                         memset(this, 0, sizeof(WaterProperties));
  17.  
  18.                         SmartScriptTable properties;
  19.                         IScriptTable* pScriptTable = pEntity->GetScriptTable();
  20.  
  21.                         if ((pScriptTable != NULL) && pScriptTable->GetValue("Properties", properties))
  22.                         {
  23.                                 properties->GetValue("StreamSpeed", streamSpeed);
  24.                                 properties->GetValue("FogDensity", fogDensity);
  25.                                 properties->GetValue("UScale", uScale);
  26.                                 properties->GetValue("VScale", vScale);
  27.                                 properties->GetValue("Depth", depth);
  28.                                 properties->GetValue("ViewDistanceRatio", viewDistanceRatio);
  29.                                 properties->GetValue("MinSpec", minSpec);
  30.                                 properties->GetValue("MaterialLayerMask", materialLayerMask);
  31.                                 properties->GetValue("FogColorMultiplier", fogColorMultiplier);
  32.                                 properties->GetValue("color_FogColor", fogColor);
  33.                                 properties->GetValue("bFogColorAffectedBySun", fogColorAffectedBySun);
  34.                                 properties->GetValue("FogShadowing", fogShadowing);
  35.                                 properties->GetValue("bCapFogAtVolumeDepth", capFogAtVolumeDepth);
  36.                                 properties->GetValue("bAwakeAreaWhenMoving", awakeAreaWhenMoving);
  37.                                 properties->GetValue("bIsRiver", isRiver);
  38.                                 properties->GetValue("bCaustics", caustics);
  39.                                 properties->GetValue("CausticIntensity", causticIntensity);
  40.                                 properties->GetValue("CausticTiling", causticTiling);
  41.                                 properties->GetValue("CausticHeight", causticHeight);
  42.                         }
  43.                 }
  44.  
  45.                 float streamSpeed;
  46.                 float fogDensity;
  47.                 float uScale;
  48.                 float vScale;
  49.                 float depth;
  50.                 int   viewDistanceRatio;
  51.                 int   minSpec;
  52.                 int   materialLayerMask;
  53.                 float fogColorMultiplier;
  54.                 Vec3  fogColor;
  55.                 bool  fogColorAffectedBySun;
  56.                 float fogShadowing;
  57.                 bool  capFogAtVolumeDepth;
  58.                 bool  awakeAreaWhenMoving;
  59.                 bool  isRiver;
  60.                 bool  caustics;
  61.                 float causticIntensity;
  62.                 float causticTiling;
  63.                 float causticHeight;
  64.         };
  65.  
  66. public:
  67.         CGameVolume_Water();
  68.         virtual ~CGameVolume_Water();
  69.  
  70.         // IGameObjectExtension
  71.         virtual bool                 Init(IGameObject* pGameObject);
  72.         virtual void                 InitClient(int channelId)                                                       {};
  73.         virtual void                 PostInit(IGameObject* pGameObject);
  74.         virtual void                 PostInitClient(int channelId)                                                   {};
  75.         virtual bool                 ReloadExtension(IGameObject* pGameObject, const SEntitySpawnParams& params);
  76.         virtual void                 PostReloadExtension(IGameObject* pGameObject, const SEntitySpawnParams& params) {}
  77.         virtual void                 Release();
  78.         virtual void                 FullSerialize(TSerialize ser)                                                 {};
  79.         virtual bool                 NetSerialize(TSerialize ser, EEntityAspects aspect, uint8 profile, int flags) { return false; };
  80.         virtual void                 PostSerialize()                                                               {};
  81.         virtual void                 SerializeSpawnInfo(TSerialize ser)                                            {}
  82.         virtual ISerializableInfoPtr GetSpawnInfo()                                                                { return 0; }
  83.         virtual void                 Update(SEntityUpdateContext& ctx, int slot);
  84.         virtual void                 HandleEvent(const SGameObjectEvent& gameObjectEvent);
  85.         virtual void                 ProcessEvent(SEntityEvent&);
  86.         virtual uint64               GetEventMask() const final;;
  87.         virtual void                 SetChannelId(uint16 id)     {};
  88.         virtual void                 SetAuthority(bool auth)     {};
  89.         virtual void                 PostUpdate(float frameTime) { CRY_ASSERT(false); }
  90.         virtual void                 PostRemoteSpawn()           {};
  91.         virtual void                 GetMemoryUsage(ICrySizer* pSizer) const;
  92.         // ~IGameObjectExtension
  93.  
  94. private:
  95.  
  96.         struct SWaterSegment
  97.         {
  98.                 SWaterSegment() : m_pWaterRenderNode(NULL), m_pWaterArea(NULL), m_physicsLocalAreaCenter(ZERO) {}
  99.                 IWaterVolumeRenderNode* m_pWaterRenderNode;
  100.                 IPhysicalEntity*        m_pWaterArea;
  101.                 Vec3                    m_physicsLocalAreaCenter;
  102.         };
  103.  
  104.         typedef std::vector<SWaterSegment> WaterSegments;
  105.  
  106.         void CreateWaterRenderNode(IWaterVolumeRenderNode*& pWaterRenderNode);
  107.         void SetupVolume();
  108.         void SetupVolumeSegment(const WaterProperties& waterProperties, const uint32 segmentIndex, const Vec3* pVertices, const uint32 vertexCount);
  109.  
  110.         void CreatePhysicsArea(const uint32 segmentIndex, const Matrix34& baseMatrix, const Vec3* pVertices, uint32 vertexCount, const bool isRiver, const float streamSpeed);
  111.         void DestroyPhysicsAreas();
  112.  
  113.         void AwakeAreaIfRequired(bool forceAwake);
  114.         void UpdateRenderNode(IWaterVolumeRenderNode* pWaterRenderNode, const Matrix34& newLocation);
  115.  
  116.         void FillOutRiverSegment(const uint32 segmentIndex, const Vec3* pVertices, const uint32 vertexCount, Vec3* pVerticesOut);
  117.  
  118.         void DebugDrawVolume();
  119.  
  120.         WaterSegments m_segments;
  121.  
  122.         Matrix34      m_baseMatrix;
  123.         Matrix34      m_initialMatrix;
  124.         Vec3          m_lastAwakeCheckPosition;
  125.         float         m_volumeDepth;
  126.         float         m_streamSpeed;
  127.         bool          m_awakeAreaWhenMoving;
  128.         bool          m_isRiver;
  129. };
  130.  
  131. #endif
  132.  
downloadGameVolume_Water.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