BVB Source Codes

CRYENGINE Show DynamicCoverManager.h Source code

Return Download CRYENGINE: download DynamicCoverManager.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. #ifndef __DynamicCoverManager_h__
  4. #define __DynamicCoverManager_h__
  5. #pragma once
  6.  
  7. #include "Cover.h"
  8. #include "EntityCoverSampler.h"
  9.  
  10. #include <CryAISystem/HashGrid.h>
  11.  
  12. class DynamicCoverManager :
  13.         public IEntityEventListener
  14. {
  15.         struct EntityCoverState;
  16. public:
  17.         struct ValidationSegment
  18.         {
  19.                 ValidationSegment()
  20.                         : center(ZERO)
  21.                         , normal(ZERO)
  22.                         , height(.0f)
  23.                         , length(.0f)
  24.                         , surfaceID(0)
  25.                         , segmentIdx(0)
  26.                         , flags(0)
  27.                 {
  28.                 }
  29.  
  30.                 enum Flags
  31.                 {
  32.                         Disabled   = 1 << 0,
  33.                         Validating = 1 << 1,
  34.                 };
  35.  
  36.                 Vec3           center;
  37.                 Vec3           normal;
  38.  
  39.                 float          height;
  40.                 float          length;
  41.  
  42.                 CoverSurfaceID surfaceID;
  43.                 uint16         segmentIdx;
  44.                 uint16         flags;
  45.         };
  46.  
  47.         DynamicCoverManager();
  48.  
  49.         // IEntityEventListener
  50.         virtual void OnEntityEvent(IEntity* entity, SEntityEvent& event);
  51.         //~IEntityEventListener
  52.  
  53.         void AddValidationSegment(const ValidationSegment& segment);
  54.         void RemoveSurfaceValidationSegments(const CoverSurfaceID& surfaceID);
  55.         void AddEntity(EntityId entityID);
  56.         void RemoveEntity(EntityId entityID);
  57.  
  58.         void Reset();
  59.         void Clear();
  60.         void ClearValidationSegments();
  61.         void Update(float updateTime);
  62.  
  63.         void BreakEvent(const Vec3& position, float radius);
  64.         void MoveEvent(EntityId entityID, const Matrix34& worldTM);
  65.  
  66. private:
  67.         void RemoveEntity(EntityId entityID, EntityCoverState& state);
  68.         void EntityCoverSampled(EntityId entityID, EntityCoverSampler::ESide side, const ICoverSystem::SurfaceInfo& surfaceInfo);
  69.         void RemoveEntityCoverSurfaces(EntityCoverState& state);
  70.  
  71.         void QueueValidation(int index);
  72.         void ValidateOne();
  73.         void IntersectionTestComplete(const QueuedIntersectionID& intID, const IntersectionTestResult& result);
  74.  
  75.         typedef std::vector<ValidationSegment> Segments;
  76.         Segments m_segments;
  77.  
  78.         typedef std::vector<uint16> FreeSegments;
  79.         FreeSegments m_freeSegments;
  80.  
  81.         struct segment_position
  82.         {
  83.                 segment_position(const Segments& segments)
  84.                         : m_segments(segments)
  85.                 {
  86.                 }
  87.  
  88.                 Vec3 operator()(int segmentIdx) const
  89.                 {
  90.                         return m_segments[segmentIdx].center;
  91.                 }
  92.         private:
  93.                 const Segments& m_segments;
  94.         };
  95.  
  96.         typedef hash_grid<256, uint32, hash_grid_2d<Vec3, Vec3i>, segment_position> SegmentsGrid;
  97.         SegmentsGrid m_segmentsGrid;
  98.  
  99.         typedef std::vector<int> DirtySegments;
  100.         DirtySegments m_dirtyBuf;
  101.  
  102.         struct QueuedValidation
  103.         {
  104.                 QueuedValidation()
  105.                         : validationSegmentIdx(-1)
  106.                         , waitingCount(0)
  107.                         , negativeCount(0)
  108.                 {
  109.                 }
  110.  
  111.                 QueuedValidation(int index)
  112.                         : validationSegmentIdx(index)
  113.                         , waitingCount(0)
  114.                         , negativeCount(0)
  115.                 {
  116.                 }
  117.  
  118.                 int   validationSegmentIdx;
  119.  
  120.                 uint8 waitingCount;
  121.                 uint8 negativeCount;
  122.         };
  123.  
  124.         typedef std::deque<QueuedValidation> ValidationQueue;
  125.         ValidationQueue m_validationQueue;
  126.  
  127.         struct EntityCoverState
  128.         {
  129.                 enum EState
  130.                 {
  131.                         Moving,
  132.                         Sampling,
  133.                         Sampled,
  134.                 };
  135.  
  136.                 EntityCoverState()
  137.                         : lastMovement((int64)0ll)
  138.                         , state(Moving)
  139.                 {
  140.                         surfaceID[EntityCoverSampler::Left] = CoverSurfaceID(CoverSurfaceID(0));
  141.                         surfaceID[EntityCoverSampler::Right] = CoverSurfaceID(CoverSurfaceID(0));
  142.                         surfaceID[EntityCoverSampler::Front] = CoverSurfaceID(CoverSurfaceID(0));
  143.                         surfaceID[EntityCoverSampler::Back] = CoverSurfaceID(CoverSurfaceID(0));
  144.  
  145.                         memset(&lastWorldTM, 0, sizeof(Matrix34));
  146.                 }
  147.  
  148.                 EntityCoverState(const CTimeValue& now)
  149.                         : lastMovement(now)
  150.                         , state(Moving)
  151.                 {
  152.                         surfaceID[EntityCoverSampler::Left] = CoverSurfaceID(CoverSurfaceID(0));
  153.                         surfaceID[EntityCoverSampler::Right] = CoverSurfaceID(CoverSurfaceID(0));
  154.                         surfaceID[EntityCoverSampler::Front] = CoverSurfaceID(CoverSurfaceID(0));
  155.                         surfaceID[EntityCoverSampler::Back] = CoverSurfaceID(CoverSurfaceID(0));
  156.  
  157.                         memset(&lastWorldTM, 0, sizeof(Matrix34));
  158.                 }
  159.  
  160.                 CTimeValue     lastMovement;
  161.                 CoverSurfaceID surfaceID[EntityCoverSampler::LastSide + 1];
  162.                 Matrix34       lastWorldTM;
  163.                 EState         state;
  164.         };
  165.  
  166.         typedef VectorMap<EntityId, EntityCoverState> EntityCover;
  167.         EntityCover        m_entityCover;
  168.  
  169.         EntityCoverSampler m_entityCoverSampler;
  170. };
  171.  
  172. #endif
  173.  
downloadDynamicCoverManager.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