BVB Source Codes

CRYENGINE Show AIObject.h Source code

Return Download CRYENGINE: download AIObject.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. #ifndef AIOBJECT_H
  4. #define AIOBJECT_H
  5.  
  6. #if _MSC_VER > 1000
  7.         #pragma once
  8. #endif // _MSC_VER > 1000
  9.  
  10. #include "AStarSolver.h"
  11. #include <CryPhysics/IPhysics.h>
  12. #include <CryAISystem/IAIObject.h>
  13. #include "Reference.h"
  14.  
  15. #ifdef CRYAISYSTEM_DEBUG
  16.         #include "AIRecorder.h"
  17. #endif //CRYAISYSTEM_DEBUG
  18.  
  19. #include <VisionMap.h>
  20.  
  21. struct GraphNode;
  22. class CFormation;
  23. class CRecorderUnit;
  24.  
  25. /*! Basic ai object class. Defines a framework that all puppets and points of interest
  26.    later follow.
  27.  */
  28. class CAIObject :
  29.         public IAIObject
  30. #ifdef CRYAISYSTEM_DEBUG
  31.         , public CRecordable
  32. #endif //CRYAISYSTEM_DEBUG
  33. {
  34.         // only allow these classes to create AI objects.
  35.         //      TODO: ideally only one place where objects are created
  36.         friend class CAIObjectManager;
  37.         friend struct SAIObjectCreationHelper;
  38. protected:
  39.         CAIObject();
  40.         virtual ~CAIObject();
  41.  
  42. public:
  43.         //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  44.         //IAIObject interfaces//////////////////////////////////////////////////////////////////////////////////////////////
  45.  
  46.         ////////////////////////////////////////////////////////////////////////////////////////
  47.         //Startup/shutdown//////////////////////////////////////////////////////////////////////
  48.         virtual void Reset(EObjectResetType type) override;
  49.         virtual void Release() override;
  50.  
  51.         // "true" if method Update(EObjectUpdate type) has been invoked AT LEAST once
  52.         virtual bool IsUpdatedOnce() const override;
  53.  
  54.         virtual bool IsEnabled() const override;
  55.         virtual void Event(unsigned short, SAIEVENT* pEvent) override;
  56.         virtual void EntityEvent(const SEntityEvent& event) override;
  57.         //Startup/shutdown//////////////////////////////////////////////////////////////////////
  58.         ////////////////////////////////////////////////////////////////////////////////////////
  59.  
  60.         ////////////////////////////////////////////////////////////////////////////////////////
  61.         //Basic properties//////////////////////////////////////////////////////////////////////
  62.         virtual tAIObjectID     GetAIObjectID() const override;
  63.  
  64.         virtual const VisionID& GetVisionID() const override;
  65.         virtual void            SetObservable(bool observable) override;
  66.         virtual bool            IsObservable() const override;
  67.  
  68.         virtual void            GetObservablePositions(ObservableParams& observableParams) const override;
  69.         virtual uint32          GetObservableTypeMask() const;
  70.         virtual void            GetPhysicalSkipEntities(PhysSkipList& skipList) const;
  71.         void                    UpdateObservableSkipList() const;
  72.  
  73.         virtual void            SetName(const char* pName) override;
  74.         virtual const char*     GetName() const override;
  75.  
  76.         virtual unsigned short  GetAIType() const override;
  77.         virtual ESubType        GetSubType() const override;
  78.         virtual void            SetType(unsigned short type) override;
  79.  
  80.         virtual void            SetPos(const Vec3& pos, const Vec3& dirForw = Vec3Constants<float>::fVec3_OneX) override;
  81.         virtual const Vec3& GetPos() const override;
  82.         virtual const Vec3  GetPosInNavigationMesh(const uint32 agentTypeID) const override;
  83.  
  84.         virtual void        SetRadius(float fRadius) override;
  85.         virtual float       GetRadius() const override;
  86.  
  87.         //Body direction here should be animated character body direction, with a fall back to entity direction.
  88.         virtual const Vec3&        GetBodyDir() const override;
  89.         virtual void               SetBodyDir(const Vec3& dir) override;
  90.  
  91.         virtual const Vec3&        GetViewDir() const override;
  92.         virtual void               SetViewDir(const Vec3& dir) override;
  93.         virtual EFieldOfViewResult IsPointInFOV(const Vec3& pos, float distanceScale = 1.0f) const override;
  94.  
  95.         virtual const Vec3& GetEntityDir() const override;
  96.         virtual void        SetEntityDir(const Vec3& dir) override;
  97.  
  98.         virtual const Vec3& GetMoveDir() const override;
  99.         virtual void        SetMoveDir(const Vec3& dir) override;
  100.         virtual Vec3        GetVelocity() const override;
  101.  
  102.         virtual size_t      GetNavNodeIndex() const;
  103.         //Basic properties//////////////////////////////////////////////////////////////////////
  104.         ////////////////////////////////////////////////////////////////////////////////////////
  105.  
  106.         ////////////////////////////////////////////////////////////////////////////////////////
  107.         //Serialize/////////////////////////////////////////////////////////////////////////////
  108.         //Tell AI what entity owns this so can sort out linking during save/load
  109.         virtual void     SetEntityID(unsigned ID) override;
  110.         virtual unsigned GetEntityID() const override;
  111.         virtual IEntity* GetEntity() const override;
  112.  
  113.         virtual void     Serialize(TSerialize ser) override;
  114.         virtual void     PostSerialize() override {};
  115.  
  116.         bool             ShouldSerialize() const;
  117.         void             SetShouldSerialize(bool ser) { m_serialize = ser; }
  118.  
  119.         //Serialize/////////////////////////////////////////////////////////////////////////////
  120.         ////////////////////////////////////////////////////////////////////////////////////////
  121.  
  122.         ////////////////////////////////////////////////////////////////////////////////////////
  123.         //Starting to assume WAY to many conflicting things about possible derived classes//////
  124.  
  125.         //Returns position weapon fires from
  126.         void                 SetFirePos(const Vec3& pos);
  127.         virtual const Vec3&  GetFirePos() const override;
  128.         virtual IBlackBoard* GetBlackBoard() override { return NULL; }
  129.  
  130.         virtual uint8        GetFactionID() const override;
  131.         virtual void         SetFactionID(uint8 factionID) override;
  132.  
  133.         virtual void         SetGroupId(int id) override;
  134.         virtual int          GetGroupId() const override;
  135.         virtual bool         IsHostile(const IAIObject* pOther, bool bUsingAIIgnorePlayer = true) const override;
  136.         virtual void         SetThreateningForHostileFactions(const bool threatening) override;
  137.         virtual bool         IsThreateningForHostileFactions() const override;
  138.  
  139.         virtual bool         IsTargetable() const;
  140.  
  141.         // Returns the EntityId to be used by the perception manager when this AIObject is perceived by another.
  142.         virtual EntityId       GetPerceivedEntityID() const;
  143.  
  144.         virtual void           SetProxy(IAIActorProxy* proxy);
  145.         virtual IAIActorProxy* GetProxy() const override;
  146.  
  147.         //Starting to assume WAY to many conflicting things about possible derived classes//////
  148.         ////////////////////////////////////////////////////////////////////////////////////////
  149.  
  150.         ////////////////////////////////////////////////////////////////////////////////////////
  151.         //Formations////////////////////////////////////////////////////////////////////////////
  152.         virtual bool        CreateFormation(const unsigned int nCrc32ForFormationName, Vec3 vTargetPos = ZERO) override;
  153.         virtual bool        CreateFormation(const char* szName, Vec3 vTargetPos = ZERO) override;
  154.         virtual bool        HasFormation() override;
  155.         virtual bool        ReleaseFormation() override;
  156.  
  157.         virtual void        CreateGroupFormation(IAIObject* pLeader) override            {}
  158.         virtual void        SetFormationPos(const Vec2& v2RelPos) override               {}
  159.         virtual void        SetFormationLookingPoint(const Vec3& v3RelPos) override      {}
  160.         virtual void        SetFormationAngleThreshold(float fThresholdDegrees) override {}
  161.         virtual const Vec3& GetFormationPos() override                                   { return Vec3Constants<float>::fVec3_Zero; }
  162.         virtual const Vec3  GetFormationVelocity() override;
  163.         virtual const Vec3& GetFormationLookingPoint() override                          { return Vec3Constants<float>::fVec3_Zero; }
  164.         //Sets a randomly rotating range for the AIObject's formation sight directions.
  165.         virtual void        SetFormationUpdateSight(float range, float minTime, float maxTime) override;
  166.         //Formations////////////////////////////////////////////////////////////////////////////
  167.         ////////////////////////////////////////////////////////////////////////////////////////
  168.  
  169.         //IAIObject interfaces//////////////////////////////////////////////////////////////////////////////////////////////
  170.         //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  171.  
  172.         //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  173.         //IAIRecordable interfaces////////////////////////////////////////////////////////////////////////////////////////
  174.         virtual void            RecordEvent(IAIRecordable::e_AIDbgEvent event, const IAIRecordable::RecorderEventData* pEventData = NULL) override {}
  175.         virtual void            RecordSnapshot() override                                                                                          {}
  176.         virtual IAIDebugRecord* GetAIDebugRecord() override;
  177.  
  178. #ifdef CRYAISYSTEM_DEBUG
  179.         CRecorderUnit* CreateAIDebugRecord();
  180. #endif //CRYAISYSTEM_DEBUG
  181.         //IAIRecordable interfaces////////////////////////////////////////////////////////////////////////////////////////
  182.         //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  183.  
  184.         //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  185.         //CAIObject interfaces////////////////////////////////////////////////////////////////////////////////////////////
  186.  
  187.         ////////////////////////////////////////////////////////////////////////////////////////
  188.         //Original Virtuals/////////////////////////////////////////////////////////////////////
  189.         virtual IPhysicalEntity*    GetPhysics(bool wantCharacterPhysics = false) const;
  190.  
  191.         virtual void                SetFireDir(const Vec3& dir);
  192.         virtual const Vec3&         GetFireDir() const;
  193.         virtual const Vec3&         GetShootAtPos() const  { return m_vPosition; } ///< Returns the position to shoot (bbox middle for tank, etc)
  194.  
  195.         virtual CWeakRef<CAIObject> GetAssociation() const { return m_refAssociation; }
  196.         virtual void                SetAssociation(CWeakRef<CAIObject> refAssociation);
  197.  
  198.         virtual void                OnObjectRemoved(CAIObject* pObject) {}
  199.         //Original Virtuals/////////////////////////////////////////////////////////////////////
  200.         ////////////////////////////////////////////////////////////////////////////////////////
  201.  
  202.         ////////////////////////////////////////////////////////////////////////////////////////
  203.         //local level///////////////////////////////////////////////////////////////////////////
  204.         const Vec3&           GetLastPosition() { return m_vLastPosition; }
  205.         Vec3                  GetPhysicsPos() const;
  206.         void                  SetExpectedPhysicsPos(const Vec3& pos) override;
  207.  
  208.         const char*           GetEventName(unsigned short eType) const;
  209.  
  210.         void                  SetSubType(ESubType type);
  211.         inline unsigned short GetType() const { return m_nObjectType; } // used internally to inline the function calls
  212.         //local level///////////////////////////////////////////////////////////////////////////
  213.         ////////////////////////////////////////////////////////////////////////////////////////
  214.  
  215.         ////////////////////////////////////////////////////////////////////////////////////////
  216.         //ObjectContainer/WeakRef stuff/////////////////////////////////////////////////////////
  217.         void SetSelfReference(CWeakRef<CAIObject> ref)
  218.         {
  219.                 // Should only ever have to call once
  220.                 // Should never be invalid
  221.                 // Is serialized like any other reference
  222.                 assert(m_refThis.IsNil());
  223.                 m_refThis = ref;
  224.         }
  225.  
  226.         CWeakRef<CAIObject> GetSelfReference() const
  227.         {
  228.                 assert(!m_refThis.IsNil());
  229.                 return m_refThis;
  230.         }
  231.  
  232.         bool HasSelfReference() const
  233.         {
  234.                 return m_refThis.IsSet();
  235.         }
  236.         //ObjectContainer/WeakRef stuff/////////////////////////////////////////////////////////
  237.         ////////////////////////////////////////////////////////////////////////////////////////
  238.  
  239.         //CAIObject interfaces////////////////////////////////////////////////////////////////////////////////////////////
  240.         //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  241.  
  242. protected:
  243.         void SetVisionID(const VisionID& visionID);
  244.  
  245.         bool     m_bEnabled;
  246.         uint16   m_nObjectType;   //    type would be Dummy
  247.         ESubType m_objectSubType; //    subType would be soundDummy, formationPoint, etc
  248.         int      m_groupId;
  249.         float    m_fRadius;
  250.  
  251.         EntityId m_entityID;
  252.  
  253. private:
  254.         CWeakRef<CAIObject> m_refThis;
  255.  
  256.         Vec3                m_vPosition;
  257.         Vec3                m_vEntityDir;
  258.         Vec3                m_vBodyDir; // direction of AI body, animated body direction if available
  259.         Vec3                m_vMoveDir; // last move direction of the entity
  260.         Vec3                m_vView;    // view direction (where my head is looking at, tank turret turned, etc)
  261.  
  262. protected:
  263.         mutable size_t m_lastNavNodeIndex;
  264.  
  265. public:
  266.         bool         m_bUpdatedOnce;
  267.         mutable bool m_bTouched;      // this gets frequent write access.
  268.  
  269.         // please add a new variable below, the section above is optimized for memory caches.
  270.  
  271.         Vec3        m_vLastPosition;
  272.         CFormation* m_pFormation;
  273.  
  274. private:
  275.  
  276.         Vec3     m_vFirePosition;
  277.         Vec3     m_vFireDir;
  278.  
  279.         Vec3     m_vExpectedPhysicsPos;       // Where the AIObject is expected to be next frame (only valid when m_expectedPhysicsPosFrameId == current frameID)
  280.         int      m_expectedPhysicsPosFrameId; // Timestamp of m_vExpectedPhysicsPos
  281.  
  282.         VisionID m_visionID;
  283.         uint8    m_factionID;
  284.         bool     m_isThreateningForHostileFactions;
  285.         bool     m_observable;
  286.  
  287.         bool                m_serialize;
  288.  
  289.         string              m_name;
  290. protected:
  291.         CWeakRef<CAIObject> m_refAssociation;
  292. };
  293.  
  294. #endif
  295.  
downloadAIObject.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