BVB Source Codes

CRYENGINE Show TargetTrack.h Source code

Return Download CRYENGINE: download TargetTrack.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: Maintains an interest level of an agent's perception on a
  8.         target, used for determining the agent's target
  9.  
  10.    -------------------------------------------------------------------------
  11.    History:
  12.    - 02:01:2010: Created by Kevin Kirst
  13.  
  14. *************************************************************************/
  15.  
  16. #ifndef __TARGET_TRACK_H__
  17. #define __TARGET_TRACK_H__
  18.  
  19. #include "TargetTrackCommon.h"
  20. #include <CryAISystem/ITargetTrackManager.h>
  21.  
  22. class CDebugDrawContext;
  23.  
  24. class CTargetTrack : public ITargetTrack
  25. {
  26. public:
  27.         CTargetTrack();
  28.         ~CTargetTrack();
  29.  
  30.         CWeakRef<CAIObject> GetAIObject() const     { return m_object; }
  31.         CWeakRef<CAIObject> GetAIGroupOwner() const { return m_groupOwner; }
  32.  
  33.         // Returns the AI objectID of what should be targeted
  34.         CWeakRef<CAIObject> GetAITarget() const;
  35.  
  36.         // TODO Consider using a struct to house this info to minimize virtual table footprint
  37.         virtual const Vec3&          GetTargetPos() const       { return m_vTargetPos; }
  38.         virtual const Vec3&          GetTargetDir() const       { return m_vTargetDir; }
  39.         virtual float                GetTrackValue() const      { return m_fTrackValue; }
  40.         virtual float                GetFirstVisualTime() const { return m_fFirstVisualTime; }
  41.         virtual EAITargetType        GetTargetType() const      { return m_eTargetType; }
  42.         virtual EAITargetContextType GetTargetContext() const   { return m_eTargetContextType; }
  43.         virtual EAITargetThreat      GetTargetThreat() const    { return m_eTargetThreat; }
  44.  
  45.         virtual float                GetHighestEnvelopeValue() const;
  46.         virtual float                GetUpdateInterval() const;
  47.  
  48.         void                         Init(tAIObjectID aiGroupOwnerId, tAIObjectID aiObjectId, uint32 uConfigHash);
  49.         void                         ResetForPool();
  50.         void                         Serialize(TSerialize ser);
  51.  
  52.         bool                         Update(float fCurrTime, TargetTrackHelpers::ITargetTrackConfigProxy* pConfigProxy);
  53.  
  54.         // Invoke a stimulus on the track
  55.         bool InvokeStimulus(const TargetTrackHelpers::STargetTrackStimulusEvent& stimulusEvent, uint32 uStimulusNameHash);
  56.  
  57.         // Create/update the pulse for the given stimulus
  58.         bool        TriggerPulse(uint32 uStimulusNameHash, uint32 uPulseNameHash);
  59.  
  60.         inline bool operator<(const CTargetTrack& other) const
  61.         {
  62.                 //if (m_eTargetType != other.m_eTargetType)
  63.                 if (m_eTargetThreat != other.m_eTargetThreat)
  64.                         return m_eTargetThreat > other.m_eTargetThreat;
  65.                 return m_fTrackValue > other.m_fTrackValue;
  66.         }
  67.  
  68. #ifdef TARGET_TRACK_DEBUG
  69.         // Debugging
  70.         void   SetLastDebugDrawTime(float fTime) const     { m_fLastDebugDrawTime = fTime; }
  71.         float  GetLastDebugDrawTime() const                { return m_fLastDebugDrawTime; }
  72.         void   SetDebugGraphIndex(uint32 uDebugGraphIndex) { m_uDebugGraphIndex = uDebugGraphIndex; }
  73.         uint32 GetDebugGraphIndex() const                  { return m_uDebugGraphIndex; }
  74.         void   DebugDraw(CDebugDrawContext& dc, int iIndex, float& fColumnX, float& fColumnY, TargetTrackHelpers::ITargetTrackConfigProxy* pConfigProxy) const;
  75. #endif //TARGET_TRACK_DEBUG
  76.  
  77.         // Stimuli invocation - records the last time a stimulus was invoked
  78.         struct SStimulusInvocation
  79.         {
  80.                 // Pulse triggers
  81.                 struct SPulseTrigger
  82.                 {
  83.                         uint32       uPulseNameHash;
  84.                         float        fTriggerTime;
  85.                         mutable bool bObsolete;
  86.  
  87.                         SPulseTrigger()
  88.                                 : uPulseNameHash(0)
  89.                                 , fTriggerTime(0.0f)
  90.                                 , bObsolete(false)
  91.                         {
  92.                         }
  93.  
  94.                         SPulseTrigger(uint32 hash)
  95.                                 : uPulseNameHash(hash)
  96.                                 , fTriggerTime(0.0f)
  97.                                 , bObsolete(false)
  98.                         {
  99.                         }
  100.  
  101.                         static bool IsObsolete(const SPulseTrigger& pulseTrigger)
  102.                         {
  103.                                 return pulseTrigger.bObsolete;
  104.                         }
  105.  
  106.                         void Serialize(TSerialize ser);
  107.                 };
  108.                 typedef std::vector<SPulseTrigger> TPulseTriggersContainer;
  109.                 TPulseTriggersContainer                  m_pulseTriggers;
  110.  
  111.                 Vec3                                     m_vLastPos;
  112.                 Vec3                                     m_vLastDir;
  113.                 TargetTrackHelpers::SEnvelopeData        m_envelopeData;
  114.                 EAITargetThreat                          m_eTargetThreat;
  115.                 EAITargetContextType                     m_eTargetContextType;
  116.                 TargetTrackHelpers::EAIEventStimulusType m_eStimulusType;
  117.                 bool                                     m_bMustRun;
  118.  
  119.                 SStimulusInvocation()
  120.                         : m_vLastPos(ZERO)
  121.                         , m_vLastDir(ZERO)
  122.                         , m_eTargetThreat(AITHREAT_NONE)
  123.                         , m_eTargetContextType(AITARGET_CONTEXT_UNKNOWN)
  124.                         , m_eStimulusType(TargetTrackHelpers::eEST_Generic)
  125.                         , m_bMustRun(false)
  126.                 {
  127.                 }
  128.  
  129.                 bool IsRunning(float fUpdateInterval) const;
  130.                 void Serialize(TSerialize ser);
  131.         };
  132.  
  133.         typedef VectorMap<uint32, SStimulusInvocation> TStimuliInvocationContainer;
  134.  
  135.         TStimuliInvocationContainer& GetInvocations() { return m_StimuliInvocations; }
  136.  
  137. private:
  138.         // Stimulus data - used for passing information about stimuli without needing to recalculate
  139.         struct SStimData
  140.         {
  141.                 float envelopeValue;
  142.         };
  143.  
  144. #ifdef TARGET_TRACK_DOTARGETTHREAT
  145.         void ModifyTargetThreat(TargetTrackHelpers::ITargetTrackConfigProxy* pConfigProxy);
  146. #endif //TARGET_TRACK_DOTARGETTHREAT
  147.  
  148. #ifdef TARGET_TRACK_DOTARGETTYPE
  149.         bool UpdateTargetType(EAITargetType& outTargetType, EAITargetThreat eTargetThreat, const SStimulusInvocation& invoke);
  150. #endif //TARGET_TRACK_DOTARGETTYPE
  151.  
  152.         // Update helpers for stimulus invocations
  153.         void UpdateStimulusInvoke(SStimulusInvocation& invoke, const TargetTrackHelpers::STargetTrackStimulusEvent& stimulusEvent) const;
  154.         void UpdateStimulusPulse(SStimulusInvocation& invoke, uint32 uPulseNameHash) const;
  155.         void UpdatePulseValue(SStimulusInvocation::SPulseTrigger& pulseTrigger) const;
  156.  
  157.         // Helpers to calculate the current value of a stimulus invocation
  158.         float UpdateStimulusValue(float fCurrTime, SStimulusInvocation& invoke, const TargetTrackHelpers::STargetTrackStimulusConfig* pStimulusConfig, TargetTrackHelpers::ITargetTrackConfigProxy* pConfigProxy, SStimData& stimData);
  159.         float GetStimulusEnvelopeValue(float fCurrTime, const SStimulusInvocation& invoke, const TargetTrackHelpers::STargetTrackStimulusConfig* pStimulusConfig) const;
  160.         float GetStimulusPulseValue(float fCurrTime, const SStimulusInvocation& invoke, const TargetTrackHelpers::STargetTrackStimulusConfig* pStimulusConfig) const;
  161.         float GetStimulusModifierValue(const SStimulusInvocation& invoke, TargetTrackHelpers::ITargetTrackConfigProxy* pConfigProxy, const TargetTrackHelpers::STargetTrackStimulusConfig* pStimulusConfig) const;
  162.         float GetStimulusTotalValue(float fCurrTime, float fEnvelopeValue, float fPulseValue, float fModValue) const;
  163.  
  164.         TStimuliInvocationContainer m_StimuliInvocations;
  165.  
  166.         Vec3                        m_vTargetPos;
  167.         Vec3                        m_vTargetDir;
  168.         EAITargetType               m_eTargetType;
  169.         EAITargetContextType        m_eTargetContextType;
  170.         EAITargetThreat             m_eTargetThreat;
  171.         CWeakRef<CAIObject>         m_groupOwner;
  172.         CWeakRef<CAIObject>         m_object;
  173.         uint32                      m_uConfigHash;
  174.         int                         m_iLastUpdateFrame;
  175.         float                       m_fTrackValue;
  176.         float                       m_fFirstVisualTime;
  177.         float                       m_fLastVisualTime;
  178.         float                       m_fThreatRatio;
  179.  
  180. #ifdef TARGET_TRACK_DEBUG
  181.         // Debugging
  182.         mutable float m_fLastDebugDrawTime;
  183.         uint32        m_uDebugGraphIndex;
  184. #endif //TARGET_TRACK_DEBUG
  185. };
  186.  
  187. #endif //__TARGET_TRACK_H__
  188.  
downloadTargetTrack.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