BVB Source Codes

CRYENGINE Show AIHideObject.h Source code

Return Download CRYENGINE: download AIHideObject.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. /********************************************************************
  4.    -------------------------------------------------------------------------
  5.    File name:   AIHideObject.h
  6.    $Id$
  7.    Description:
  8.  
  9.    -------------------------------------------------------------------------
  10.    History:
  11.    - 2:5:2006   16:22 : Created by Kirill Bulatsev
  12.    - 2 Mar 2009                  : Evgeny Adamenkov: Removed IRenderer
  13.  
  14.  *********************************************************************/
  15. #ifndef __AIHIdeObject_H__
  16. #define __AIHIdeObject_H__
  17.  
  18. #if _MSC_VER > 1000
  19.         #pragma once
  20. #endif
  21.  
  22. #include "HideSpot.h"
  23. #include <deque>
  24.  
  25. enum ECoverUsage
  26. {
  27.         USECOVER_NONE,
  28.         USECOVER_SMARTOBJECT_HIDE,
  29.         USECOVER_SMARTOBJECT_UNHIDE,
  30.         USECOVER_STRAFE_LEFT_STANDING,
  31.         USECOVER_STRAFE_RIGHT_STANDING,
  32.         USECOVER_STRAFE_TOP_STANDING,
  33.         USECOVER_STRAFE_TOP_LEFT_STANDING,
  34.         USECOVER_STRAFE_TOP_RIGHT_STANDING,
  35.         USECOVER_STRAFE_LEFT_CROUCHED,
  36.         USECOVER_STRAFE_RIGHT_CROUCHED,
  37.         USECOVER_CENTER_CROUCHED,
  38.         USECOVER_LAST,
  39. };
  40.  
  41. class CAIHideObject
  42. {
  43.         friend class CPipeUser;
  44. public:
  45.         CAIHideObject();
  46.         ~CAIHideObject();
  47.  
  48.         void         Set(const struct SHideSpot* hs, const Vec3& hidePos, const Vec3& hideDir);
  49.  
  50.         void         Invalidate() { m_bIsValid = false; };
  51.         bool         IsValid() const;
  52.         bool         IsCompromised(const CPipeUser* pRequester, const Vec3& targetPos) const;
  53.         bool         IsNearCover(const CPipeUser* pRequester) const;
  54.         bool         IsSmartObject() const                       { return m_bIsSmartObject; }
  55.         CQueryEvent& GetSmartObject()                            { return m_HideSmartObject; }
  56.         void         SetSmartObject(const CQueryEvent& smObject) { m_HideSmartObject = smObject; }
  57.         void         ClearSmartObject()                          { m_HideSmartObject.Clear(); }
  58.         // Returns the flag indicating if the agent is using the cover.
  59.         bool         IsUsingCover() const                        { return m_isUsingCover; }
  60.         // Sets the flag indicating if the agent is using the cover.
  61.         void         SetUsingCover(bool state)                   { m_isUsingCover = state; }
  62.  
  63.         int          GetCoverUsage() const                       { return m_useCover; }
  64.         void         SetCoverUsage(int type)                     { m_useCover = type; }
  65.  
  66.         // Returns unique ID which is updated each time the Set method succeeds. 0 is invalid ID.
  67.         uint32 GetCoverId() const { return m_id; }
  68.  
  69.         // Returns the name of the anchor being used
  70.         const char* GetAnchorName() const;
  71.  
  72.         // Returns the radius of the hide object (not valid for smart objects).
  73.         float                        GetObjectRadius() const    { return m_objectRadius; }
  74.         // Returns the position of the hide object  (not valid for smart objects).
  75.         const Vec3&                  GetObjectPos() const       { return m_objectPos; }
  76.         // Returns the direction of the hide object  (not valid for smart objects).
  77.         const Vec3&                  GetObjectDir() const       { return m_objectDir; }
  78.         // Returns true if
  79.         bool                         IsObjectCollidable() const { return m_objectCollidable; }
  80.         // Returns the position behind the hide object.
  81.         const Vec3&                  GetLastHidePos() const     { return m_vLastHidePos; }
  82.         // Returns the type of hide object.
  83.         SHideSpotInfo::EHideSpotType GetHideSpotType() const    { return m_hideSpotType; }
  84.  
  85.         void                         Update(CPipeUser* pOperand);
  86.  
  87.         bool                         HasLowCover() const;
  88.         bool                         HasHighCover() const;
  89.         bool                         IsLeftEdgeValid(bool useLowCover) const;
  90.         bool                         IsRightEdgeValid(bool useLowCover) const;
  91.  
  92.         void                         GetCoverPoints(bool useLowCover, float peekOverLeft, float peekOverRight, const Vec3& targetPos,
  93.                                                     Vec3& hidePos, Vec3& peekPosLeft, Vec3& peekPosRight, bool& peekLeftClamped, bool& peekRightClamped, bool& coverCompromised) const;
  94.  
  95.         void        GetCoverDistances(bool useLowCover, const Vec3& target, bool& coverCompromised, float& leftEdge, float& rightEdge, float& leftUmbra, float& rightUmbra) const;
  96.  
  97.         float       GetCoverWidth(bool useLowCover);
  98.         bool        IsCoverPathComplete() const                     { return m_pathComplete; }
  99.         void        HurryUpCoverPathGen()                           { m_pathHurryUp = true; }
  100.         float       GetDistanceAlongCoverPath(const Vec3& pt) const { return m_pathDir.Dot(pt - m_pathOrig); }
  101.         float       GetDistanceToCoverPath(const Vec3& pt) const;
  102.         Vec3        ProjectPointOnCoverPath(const Vec3& pt) const   { return m_pathOrig + m_pathDir * (m_pathDir.Dot(pt - m_pathOrig)); }
  103.         const Vec3& GetCoverPathDir() const                         { return m_pathDir; }
  104.         float       GetMaxCoverPathLen() const;
  105.         Vec3        GetPointAlongCoverPath(float distance) const;
  106.         void        GetCoverHeightAlongCoverPath(float distance, const Vec3& target, bool& hasLowCover, bool& hasHighCover) const;
  107.  
  108.         void        DebugDraw();
  109.         void        Serialize(TSerialize ser);
  110.  
  111. private:
  112.         void SetupPathExpand(CPipeUser* pOperand);
  113.         void UpdatePathExpand(CPipeUser* pOperand);
  114.         bool IsSegmentValid(CPipeUser* pOperand, const Vec3& posFrom, const Vec3& posTo);
  115.  
  116.         void SampleCover(CPipeUser* pOperand, float& maxCover, float& maxDepth, const Vec3& startPos, float maxWidth,
  117.                          float sampleDist, float sampleRad, float sampleDepth, std::deque<Vec3>& points, bool pushBack, bool& reachedEdge);
  118.         void SampleCoverRefine(CPipeUser* pOperand, float& maxCover, float& maxDepth, const Vec3& startPos, float maxWidth,
  119.                                float sampleDist, float sampleRad, float sampleDepth, std::deque<Vec3>& points, bool pushBack);
  120.         void SampleLine(CPipeUser* pOperand, float& maxMove, float maxWidth, float sampleDist);
  121.         void SampleLineRefine(CPipeUser* pOperand, float& maxMove, float maxWidth, float sampleDist);
  122.  
  123.         mutable bool                 m_bIsValid;
  124.         bool                         m_isUsingCover;
  125.         Vec3                         m_objectPos;
  126.         Vec3                         m_objectDir;
  127.         float                        m_objectRadius;
  128.         float                        m_objectHeight;
  129.         bool                         m_objectCollidable;
  130.         Vec3                         m_vLastHidePos; // actual position used for last hide
  131.         Vec3                         m_vLastHideDir;
  132.         bool                         m_bIsSmartObject;
  133.         CQueryEvent                  m_HideSmartObject;
  134.         int                          m_useCover;
  135.         EntityId                     m_dynCoverEntityId;
  136.         Vec3                         m_dynCoverEntityPos; // The original position of the dynamic cover entity.
  137.         Vec3                         m_dynCoverPosLocal;  // The original local space position of the cover.
  138.         SHideSpotInfo::EHideSpotType m_hideSpotType;
  139.         string                       m_sAnchorName;
  140.  
  141.         // Cover sampling
  142.         Vec3             m_coverPos;
  143.         float            m_distToCover;
  144.         Vec3             m_pathOrig;
  145.         Vec3             m_pathDir;
  146.         Vec3             m_pathNorm;
  147.         float            m_pathLimitLeft;
  148.         float            m_pathLimitRight;
  149.         float            m_tempCover;
  150.         float            m_tempDepth;
  151.         bool             m_pathComplete;
  152.         bool             m_highCoverValid;
  153.         bool             m_lowCoverValid;
  154.         bool             m_pathHurryUp;
  155.         bool             m_lowLeftEdgeValid;
  156.         bool             m_lowRightEdgeValid;
  157.         bool             m_highLeftEdgeValid;
  158.         bool             m_highRightEdgeValid;
  159.         std::deque<Vec3> m_lowCoverPoints;
  160.         std::deque<Vec3> m_highCoverPoints;
  161.         float            m_lowCoverWidth;
  162.         float            m_highCoverWidth;
  163.  
  164.         float            m_lowLeftEdge;
  165.         float            m_lowRightEdge;
  166.  
  167.         float            m_highLeftEdge;
  168.         float            m_highRightEdge;
  169.         int              m_pathUpdateIter;
  170.         uint32           m_id;
  171. };
  172.  
  173. #endif // __AIHIdeObject_H__
  174.  
downloadAIHideObject.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