BVB Source Codes

CRYENGINE Show CoverSampler.h Source code

Return Download CRYENGINE: download CoverSampler.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. #ifndef __CoverSampler_h__
  4. #define __CoverSampler_h__
  5. #pragma once
  6.  
  7. #include "Cover.h"
  8. #include "CoverSurface.h"
  9. #include "CoverPath.h"
  10.  
  11. class CoverSampler
  12.         : public ICoverSampler
  13. {
  14. public:
  15.         CoverSampler();
  16.         virtual void                         Release();
  17.  
  18.         virtual ESamplerState                StartSampling(const ICoverSampler::Params& params);
  19.         virtual ESamplerState                Update(float timeLimitPerFrame, float timeLimitTotal);
  20.         virtual ESamplerState                GetState() const;
  21.  
  22.         virtual uint32                       GetSampleCount() const;
  23.         virtual const ICoverSampler::Sample* GetSamples() const;
  24.         virtual const AABB& GetAABB() const;
  25.         virtual uint32      GetSurfaceFlags() const;
  26.         virtual void        DebugDraw() const;
  27.  
  28. private:
  29.         virtual ~CoverSampler();
  30.  
  31.         enum SurfaceType
  32.         {
  33.                 SolidSurface,
  34.                 DynamicSurface,
  35.         };
  36.  
  37.         struct IntersectionResult
  38.         {
  39.                 Vec3        position;
  40.                 Vec3        normal;
  41.  
  42.                 float       distance;
  43.                 SurfaceType surfaceType;
  44.         };
  45.  
  46.         enum EInternalState
  47.         {
  48.                 SamplerReady = 0,
  49.                 SamplerStarting,
  50.                 SamplerLeft,
  51.                 SamplerLeftEdge,
  52.                 SamplerRight,
  53.                 SamplerRightEdge,
  54.                 SamplerSimplifySurface,
  55.                 SamplerFinished,
  56.                 SamplerError,
  57.         };
  58.  
  59.         enum EDirection
  60.         {
  61.                 Left = 0,
  62.                 Right,
  63.         };
  64.  
  65.         bool        OverlapCylinder(const Vec3& bottomCenter, const Vec3& dir, float length, float radius, uint32 collisionFlags) const;
  66.         bool        IntersectSweptSphere(const Vec3& center, const Vec3& dir, float radius, IPhysicalEntity** entityList,
  67.                                          size_t entityCount, IntersectionResult* result) const;
  68.         bool        IntersectRay(const Vec3& center, const Vec3& dir, uint32 collisionFlags, IntersectionResult* result) const;
  69.  
  70.         SurfaceType GetSurfaceType(IPhysicalEntity* physicalEntity, int ipart) const;
  71.  
  72.         float       SampleHeightInterval(const Vec3& position, const Vec3& dir, float interval, IPhysicalEntity** entityList,
  73.                                          size_t entityCount, float* depth, Vec3* normal, SurfaceType* surfaceType);
  74.         float       SampleHeight(const Vec3& position, float heightInterval, float maxHeight, float* depth,
  75.                                  Vec3* averageNormal, SurfaceType* surfaceType);
  76.         bool        SampleFloor(const Vec3& position, float searchHeight, float searchRadius, Vec3* floor, Vec3* normal);
  77.         float       SampleWidthInterval(EDirection direction, float interval, float maxHeight, Vec3& floor,
  78.                                         Vec3& floorNormal, Vec3& averageNormal);
  79.         bool        SampleWidth(EDirection direction, float widthInterval, float maxHeight);
  80.         bool        CheckClearance(const Vec3& floor, const Vec3& floorNormal, const Vec3& dir, float maxHeight);
  81.         bool        Adjust(const Vec3& floor, const Vec3& floorNormal, const Vec3& wantedDirection, float weight);
  82.         bool        CanSampleHeight(const Vec3& floor, const Vec3& direction, EDirection samplingDirection) const;
  83.         bool        ValidateSample(const Vec3& floor, const Vec3& direction, const Sample& sample,
  84.                                    EDirection samplingDirection, float* deltaSq) const;
  85.         void        Simplify();
  86.  
  87.         ESamplerState m_externalState;
  88.         Params        m_params;
  89.  
  90.         typedef std::deque<CoverSampler::Sample> TempSamples;
  91.         TempSamples m_tempSamples;
  92.  
  93.         typedef std::vector<ICoverSampler::Sample> Samples;
  94.         Samples m_samples;
  95.  
  96.         struct SamplingState
  97.         {
  98.                 SamplingState()
  99.                         : origin(ZERO)
  100.                         , direction(ZERO)
  101.                         , right(ZERO)
  102.                         , floor(ZERO)
  103.                         , solidDirection(ZERO)
  104.                         , solidRight(ZERO)
  105.                         , solidFloor(ZERO)
  106.                         , initialDirection(ZERO)
  107.                         , initialRight(ZERO)
  108.                         , initialFloor(ZERO)
  109.                         , internalState(SamplerReady)
  110.                         , length(0.0f)
  111.                         , depth(0.0f)
  112.                         , edgeHeight(0.0f)
  113.                         , limitLength(0.0f)
  114.                         , surfaceNormal(ZERO)
  115.                         , looped(false)
  116.                         , totalTime((int64)0ll)
  117.                         , originalSurfaceSamples(0)
  118.                         , updateCount(0)
  119.                         , pwiCount(0)
  120.                         , rwiCount(0)
  121.                 {
  122.                 }
  123.  
  124.                 Vec3           origin;
  125.  
  126.                 Vec3           direction;
  127.                 Vec3           right;
  128.                 Vec3           floor;
  129.  
  130.                 Vec3           solidDirection; // solid means it's not at the edge
  131.                 Vec3           solidRight;
  132.                 Vec3           solidFloor;
  133.  
  134.                 Vec3           initialDirection;
  135.                 Vec3           initialRight;
  136.                 Vec3           initialFloor;
  137.  
  138.                 EInternalState internalState;
  139.  
  140.                 float          length;
  141.                 float          depth;
  142.                 float          edgeHeight;
  143.                 float          limitLength;
  144.  
  145.                 Vec3           surfaceNormal;
  146.                 bool           looped;
  147.  
  148.                 CTimeValue     totalTime;
  149.                 uint32         originalSurfaceSamples;
  150.                 uint32         updateCount;
  151.                 mutable uint32 pwiCount;
  152.                 mutable uint32 rwiCount;
  153.         };
  154.  
  155.         SamplingState m_state;
  156.         AABB          m_aabb;
  157.         uint32        m_flags;
  158. };
  159.  
  160. #endif //__CoverSampler_h__
  161.  
downloadCoverSampler.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