BVB Source Codes

CRYENGINE Show CAISystem.h Source code

Return Download CRYENGINE: download CAISystem.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. #ifndef _CAISYSTEM_H_
  4. #define _CAISYSTEM_H_
  5.  
  6. #if _MSC_VER > 1000
  7.         #pragma once
  8. #endif
  9.  
  10. #include <CryAISystem/IAISystem.h>
  11. #include "ObjectContainer.h"
  12. #include "Formation.h"
  13. #include "Graph.h"
  14. #include "PipeManager.h"
  15. #include "AIObject.h"
  16. #include "AICollision.h"
  17. #include "AIGroup.h"
  18. #include "AIQuadTree.h"
  19. #include <CryCore/Containers/MiniQueue.h>
  20. #include "AIRadialOcclusion.h"
  21. #include "AILightManager.h"
  22. #include "AIDynHideObjectManager.h"
  23. #include "Shape.h"
  24. #include "ShapeContainer.h"
  25. #include "Shape2.h"
  26. #include "Navigation.h"
  27. #include "HideSpot.h"
  28. #include "VisionMap.h"
  29. #include "Group/Group.h"
  30. #include "Factions/FactionMap.h"
  31. #include "AIObjectManager.h"
  32. #include "GlobalPerceptionScaleHandler.h"
  33. #include "ClusterDetector.h"
  34. #include <CryAISystem/BehaviorTree/IBehaviorTreeGraft.h>
  35.  
  36. #ifdef CRYAISYSTEM_DEBUG
  37.         #include "AIDbgRecorder.h"
  38.         #include "AIRecorder.h"
  39. #endif //CRYAISYSTEM_DEBUG
  40.  
  41. #define AIFAF_VISIBLE_FROM_REQUESTER 0x0001   // Requires whoever is requesting the anchor to also have a line of sight to it.
  42. //#define AIFAF_VISIBLE_TARGET                                  0x0002  // Requires that there is a line of sight between target and anchor.
  43. #define AIFAF_INCLUDE_DEVALUED       0x0004   // Don't care if the object is devalued.
  44. #define AIFAF_INCLUDE_DISABLED       0x0008   // Don't care if the object is disabled.
  45. #define AIFAF_HAS_FORMATION          0x0010   // Want only formations owners.
  46. #define AIFAF_LEFT_FROM_REFPOINT     0x0020   // Requires that the anchor is left from the target.
  47. #define AIFAF_RIGHT_FROM_REFPOINT    0x0040   // Requires that the anchor is right from the target.
  48. #define AIFAF_INFRONT_OF_REQUESTER   0x0080   // Requires that the anchor is within a 30-degree cone in front of requester.
  49. #define AIFAF_SAME_GROUP_ID          0x0100   // Want same group id.
  50. #define AIFAF_DONT_DEVALUE           0x0200   // Do not devalue the object after having found it.
  51. #define AIFAF_USE_REFPOINT_POS       0x0400   // Use ref point position instead of AI object pos.
  52.  
  53. struct ICoordinationManager;
  54. struct ITacticalPointSystem;
  55. struct AgentPathfindingProperties;
  56. struct IFireCommandDesc;
  57. struct IVisArea;
  58. struct IAISignalExtraData;
  59.  
  60. class CAIActionManager;
  61. class ICentralInterestManager;
  62. class CPerceptionManager;
  63. class CAIHideObject;
  64.  
  65. class CScriptBind_AI;
  66.  
  67. #define AGENT_COVER_CLEARANCE 0.35f
  68.  
  69. const static int NUM_ALERTNESS_COUNTERS = 4;
  70.  
  71. // Listener for path found events.
  72. struct IAIPathFinderListerner
  73. {
  74.         virtual ~IAIPathFinderListerner(){}
  75.         virtual void OnPathResult(int id, const std::vector<unsigned>* pathNodes) = 0;
  76. };
  77.  
  78. enum EGetObstaclesInRadiusFlags
  79. {
  80.         OBSTACLES_COVER      = 0x01,
  81.         OBSTACLES_SOFT_COVER = 0x02,
  82. };
  83.  
  84. enum EPuppetUpdatePriority
  85. {
  86.         AIPUP_VERY_HIGH,
  87.         AIPUP_HIGH,
  88.         AIPUP_MED,
  89.         AIPUP_LOW,
  90. };
  91.  
  92. enum AsyncState
  93. {
  94.         AsyncFailed = 0,
  95.         AsyncReady,
  96.         AsyncInProgress,
  97.         AsyncComplete,
  98. };
  99.  
  100. // Description:
  101. //       Fire command handler descriptor/factory.
  102. struct IFireCommandDesc
  103. {
  104.         virtual ~IFireCommandDesc(){}
  105.         //       Returns the name identifier of the handler.
  106.         virtual const char* GetName() = 0;
  107.         // Summary:
  108.         //       Creates new instance of a fire command handler.
  109.         virtual IFireCommandHandler* Create(IAIActor* pShooter) = 0;
  110.         // Summary:
  111.         //       Deletes the factory.
  112.         virtual void Release() = 0;
  113. };
  114.  
  115. //====================================================================
  116. // CAISystem
  117. //====================================================================
  118. class CAISystem :
  119.         public IAISystem,
  120.         public ISystemEventListener
  121. {
  122. public:
  123.         //-------------------------------------------------------------
  124.  
  125.         /// Flags used by the GetDangerSpots.
  126.         enum EDangerSpots
  127.         {
  128.                 DANGER_DEADBODY       = 0x01, // Include dead bodies.
  129.                 DANGER_EXPLOSIVE      = 0x02, // Include explosives - unexploded grenades.
  130.                 DANGER_EXPLOSION_SPOT = 0x04, // Include recent explosions.
  131.                 DANGER_ALL            = DANGER_DEADBODY | DANGER_EXPLOSIVE,
  132.         };
  133.  
  134.         CAISystem(ISystem* pSystem);
  135.         ~CAISystem();
  136.  
  137.         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  138.         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  139.         //IAISystem/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  140.  
  141.         ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
  142.         //Basic////////////////////////////////////////////////////////////////////////////////////////////////////////
  143.  
  144.         virtual bool Init();
  145.         virtual bool CompleteInit();
  146.  
  147.         virtual void Reload();
  148.         virtual void Reset(EResetReason reason);//TODO this is called by lots of people including destructor, but causes NEW ALLOCATIONS! Needs big refactor!
  149.         virtual void Release();
  150.  
  151.         virtual void DummyFunctionNumberOne(void);
  152.  
  153.         //If disabled most things early out
  154.         virtual void                  Enable(bool enable = true);
  155.         virtual void                  SetActorProxyFactory(IAIActorProxyFactory* pFactory);
  156.         virtual IAIActorProxyFactory* GetActorProxyFactory() const;
  157.         virtual void                  SetGroupProxyFactory(IAIGroupProxyFactory* pFactory);
  158.         virtual IAIGroupProxyFactory* GetGroupProxyFactory() const;
  159.         virtual IAIGroupProxy*        GetAIGroupProxy(int groupID);
  160.  
  161.         //Every frame (multiple time steps per frame possible?)         //TODO find out
  162.         //      currentTime - AI time since game start in seconds (GetCurrentTime)
  163.         //      frameTime - since last update (GetFrameTime)
  164.         virtual void Update(CTimeValue currentTime, float frameTime);
  165.  
  166.         virtual bool RegisterListener(IAISystemListener* pListener);
  167.         virtual bool UnregisterListener(IAISystemListener* pListener);
  168.         void         OnAgentDeath(EntityId deadEntityID, EntityId killerID);
  169.  
  170.         // Registers AI event listener. Only events overlapping the sphere will be sent.
  171.         // Register can be called again to update the listener position, radius and flags.
  172.         // If pointer to the listener is specified it will be used instead of the pointer to entity.
  173.         virtual void                RegisterAIEventListener(IAIEventListener* pListener, const Vec3& pos, float rad, int flags);
  174.         virtual void                UnregisterAIEventListener(IAIEventListener* pListener);
  175.  
  176.         virtual void                Event(int eventT, const char*);
  177.         virtual IAISignalExtraData* CreateSignalExtraData() const;
  178.         virtual void                FreeSignalExtraData(IAISignalExtraData* pData) const;
  179.         virtual void                SendSignal(unsigned char cFilter, int nSignalId, const char* szText, IAIObject* pSenderObject, IAISignalExtraData* pData = NULL, uint32 crcCode = 0);
  180.         virtual void                SendAnonymousSignal(int nSignalId, const char* szText, const Vec3& pos, float fRadius, IAIObject* pSenderObject, IAISignalExtraData* pData = NULL);
  181.         virtual void                OnSystemEvent(ESystemEvent event, UINT_PTR wparam, UINT_PTR lparam);
  182.  
  183.         //Basic////////////////////////////////////////////////////////////////////////////////////////////////////////
  184.         ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
  185.  
  186.         ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
  187.         //Time/Updates/////////////////////////////////////////////////////////////////////////////////////////////////
  188.  
  189.         //Over-ride auto-disable for distant AIs
  190.         virtual bool GetUpdateAllAlways() const;
  191.  
  192.         // Returns the current time (seconds since game began) that AI should be working with -
  193.         // This may be different from the system so that we can support multiple updates per
  194.         // game loop/update.
  195.         ILINE CTimeValue GetFrameStartTime() const
  196.         {
  197.                 return m_frameStartTime;
  198.         }
  199.  
  200.         ILINE float GetFrameStartTimeSeconds() const
  201.         {
  202.                 return m_frameStartTimeSeconds;
  203.         }
  204.  
  205.         // Time interval between this and the last update
  206.         ILINE float GetFrameDeltaTime() const
  207.         {
  208.                 return m_frameDeltaTime;
  209.         }
  210.  
  211.         // returns the basic AI system update interval
  212.         virtual float GetUpdateInterval() const;
  213.  
  214.         // profiling
  215.         virtual int GetAITickCount();
  216.  
  217.         //Time/Updates/////////////////////////////////////////////////////////////////////////////////////////////////
  218.         ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
  219.  
  220.         ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
  221.         //FileIO///////////////////////////////////////////////////////////////////////////////////////////////////////
  222.  
  223.         // save/load
  224.         virtual void Serialize(TSerialize ser);
  225.         virtual void SerializeObjectIDs(TSerialize ser);
  226.  
  227.         //! Set a path for the current level as working folder for level-specific metadata
  228.         virtual void SetLevelPath(const char* sPath);
  229.  
  230.         /// this called before loading (level load/serialization)
  231.         virtual void FlushSystem(bool bDeleteAll = false);
  232.         virtual void FlushSystemNavigation(bool bDeleteAll = false);
  233.  
  234.         virtual void LayerEnabled(const char* layerName, bool enabled, bool serialized);
  235.  
  236.         // reads areas from file. clears the existing areas
  237. #if defined(SEG_WORLD)
  238.         // SEG_WORLD: adds offset to the areas read, and doesn't clear existing areas.
  239.         virtual void ReadAreasFromFile(const char* fileNameAreas, const Vec3& vSegmentOffset);
  240. #else
  241.         virtual void ReadAreasFromFile(const char* fileNameAreas);
  242. #endif
  243.  
  244.         virtual void LoadLevelData(const char* szLevel, const char* szMission, const EAILoadDataFlags loadDataFlags = eAILoadDataFlag_AllSystems);
  245.         virtual void LoadNavigationData(const char* szLevel, const char* szMission, const EAILoadDataFlags loadDataFlags = eAILoadDataFlag_AllSystems);
  246.  
  247.         virtual void OnMissionLoaded();
  248.  
  249.         //FileIO///////////////////////////////////////////////////////////////////////////////////////////////////////
  250.         ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
  251.  
  252.         ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
  253.         //Debugging////////////////////////////////////////////////////////////////////////////////////////////////////
  254.  
  255.         // AI DebugDraw
  256.         virtual IAIDebugRenderer* GetAIDebugRenderer();
  257.         virtual IAIDebugRenderer* GetAINetworkDebugRenderer();
  258.         virtual void              SetAIDebugRenderer(IAIDebugRenderer* pAIDebugRenderer);
  259.         virtual void              SetAINetworkDebugRenderer(IAIDebugRenderer* pAINetworkDebugRenderer);
  260.  
  261.         virtual void              SetAgentDebugTarget(const EntityId id) { m_agentDebugTarget = id; }
  262.         virtual EntityId          GetAgentDebugTarget() const            { return m_agentDebugTarget; }
  263.  
  264.         virtual IAIBubblesSystem* GetAIBubblesSystem();
  265.  
  266.         // debug recorder
  267.         virtual bool IsRecording(const IAIObject* pTarget, IAIRecordable::e_AIDbgEvent event) const;
  268.         virtual void Record(const IAIObject* pTarget, IAIRecordable::e_AIDbgEvent event, const char* pString) const;
  269.         virtual void GetRecorderDebugContext(SAIRecorderDebugContext*& pContext);
  270.         virtual void AddDebugLine(const Vec3& start, const Vec3& end, uint8 r, uint8 g, uint8 b, float time);
  271.         virtual void AddDebugSphere(const Vec3& pos, float radius, uint8 r, uint8 g, uint8 b, float time);
  272.  
  273.         virtual void DebugReportHitDamage(IEntity* pVictim, IEntity* pShooter, float damage, const char* material);
  274.         virtual void DebugReportDeath(IAIObject* pVictim);
  275.  
  276.         // functions to let external systems (e.g. lua) access the AI logging functions.
  277.         // the external system should pass in an identifier (e.g. "<Lua> ")
  278.         virtual void Warning(const char* id, const char* format, ...) const PRINTF_PARAMS(3, 4);
  279.         virtual void Error(const char* id, const char* format, ...) PRINTF_PARAMS(3, 4);
  280.         virtual void LogProgress(const char* id, const char* format, ...) PRINTF_PARAMS(3, 4);
  281.         virtual void LogEvent(const char* id, const char* format, ...) PRINTF_PARAMS(3, 4);
  282.         virtual void LogComment(const char* id, const char* format, ...) PRINTF_PARAMS(3, 4);
  283.  
  284.         // Draws a fake tracer around the player.
  285.         virtual void DebugDrawFakeTracer(const Vec3& pos, const Vec3& dir);
  286.  
  287.         virtual void GetMemoryStatistics(ICrySizer* pSizer);
  288.  
  289.         // debug members ============= DO NOT USE
  290.         virtual void DebugDraw();
  291.  
  292.         //Debugging////////////////////////////////////////////////////////////////////////////////////////////////////
  293.         ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
  294.  
  295.         ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
  296.         //Get Subsystems///////////////////////////////////////////////////////////////////////////////////////////////
  297.         virtual IAIRecorder*                        GetIAIRecorder();
  298.         virtual INavigation*                        GetINavigation();
  299.         virtual IAIPathFinder*                      GetIAIPathFinder();
  300.         virtual IMNMPathfinder*                     GetMNMPathfinder() const;
  301.         virtual ICentralInterestManager*            GetCentralInterestManager(void);
  302.         virtual ICentralInterestManager const*      GetCentralInterestManager(void) const;
  303.         virtual ITacticalPointSystem*               GetTacticalPointSystem(void);
  304.         virtual ICommunicationManager*              GetCommunicationManager() const;
  305.         virtual ICoverSystem*                       GetCoverSystem() const;
  306.         virtual INavigationSystem*                  GetNavigationSystem() const;
  307.         virtual ISelectionTreeManager*              GetSelectionTreeManager() const;
  308.         virtual BehaviorTree::IBehaviorTreeManager* GetIBehaviorTreeManager() const;
  309.         virtual BehaviorTree::IGraftManager*        GetIGraftManager() const;
  310.         virtual ITargetTrackManager*                GetTargetTrackManager() const;
  311.         virtual struct IMovementSystem*             GetMovementSystem() const;
  312.         virtual AIActionSequence::ISequenceManager* GetSequenceManager() const;
  313.         virtual IClusterDetector*                   GetClusterDetector() const;
  314.  
  315.         virtual ISmartObjectManager*                GetSmartObjectManager();
  316.         virtual IAIObjectManager*                   GetAIObjectManager();
  317.         //Get Subsystems///////////////////////////////////////////////////////////////////////////////////////////////
  318.         ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
  319.  
  320.         ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
  321.         //AI Actions///////////////////////////////////////////////////////////////////////////////////////////////////
  322.         virtual IAIActionManager* GetAIActionManager();
  323.         //AI Actions///////////////////////////////////////////////////////////////////////////////////////////////////
  324.         ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
  325.  
  326.         ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
  327.         //Leader/Formations////////////////////////////////////////////////////////////////////////////////////////////
  328.         virtual void       EnumerateFormationNames(unsigned int maxNames, const char** names, unsigned int* nameCount) const;
  329.         virtual int        GetGroupCount(int nGroupID, int flags = GROUP_ALL, int type = 0);
  330.         virtual IAIObject* GetGroupMember(int groupID, int index, int flags = GROUP_ALL, int type = 0);
  331.         //Leader/Formations////////////////////////////////////////////////////////////////////////////////////////////
  332.         ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
  333.  
  334.         ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
  335.         //Goal Pipes///////////////////////////////////////////////////////////////////////////////////////////////////
  336.         //TODO: get rid of this; => it too many confusing uses to remove just yet
  337.         virtual int AllocGoalPipeId() const;
  338.         //Goal Pipes///////////////////////////////////////////////////////////////////////////////////////////////////
  339.         ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
  340.  
  341.         ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
  342.         //Navigation / Pathfinding/////////////////////////////////////////////////////////////////////////////////////
  343.         virtual bool CreateNavigationShape(const SNavigationShapeParams& params);
  344.         virtual void DeleteNavigationShape(const char* szPathName);
  345.         virtual bool DoesNavigationShapeExists(const char* szName, EnumAreaType areaType, bool road = false);
  346.         virtual void EnableGenericShape(const char* shapeName, bool state);
  347.  
  348.         const char*  GetEnclosingGenericShapeOfType(const Vec3& pos, int type, bool checkHeight);
  349.         bool         IsPointInsideGenericShape(const Vec3& pos, const char* shapeName, bool checkHeight);
  350.         float        DistanceToGenericShape(const Vec3& pos, const char* shapeName, bool checkHeight);
  351.         bool         ConstrainInsideGenericShape(Vec3& pos, const char* shapeName, bool checkHeight);
  352.         const char*  CreateTemporaryGenericShape(Vec3* points, int npts, float height, int type);
  353.  
  354.         // Pathfinding properties
  355.         virtual void                              AssignPFPropertiesToPathType(const string& sPathType, const AgentPathfindingProperties& properties);
  356.         virtual const AgentPathfindingProperties* GetPFPropertiesOfPathType(const string& sPathType);
  357.         virtual string                            GetPathTypeNames();
  358.  
  359.         /// Register a spherical region that causes damage (so should be avoided in pathfinding). pID is just
  360.         /// a unique identifying - so if this is called multiple times with the same pID then the damage region
  361.         /// will simply be moved. If radius <= 0 then the region is disabled.
  362.         virtual void RegisterDamageRegion(const void* pID, const Sphere& sphere);
  363.  
  364.         //Navigation / Pathfinding/////////////////////////////////////////////////////////////////////////////////////
  365.         ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
  366.  
  367.         ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
  368.         //Hide spots///////////////////////////////////////////////////////////////////////////////////////////////////
  369.  
  370.         // Returns specified number of nearest hidespots. It considers the hidespots in graph and anchors.
  371.         // Any of the pointers to return values can be null. Returns number of hidespots found.
  372.         virtual unsigned int GetHideSpotsInRange(IAIObject* requester, const Vec3& reqPos,
  373.                                                  const Vec3& hideFrom, float minRange, float maxRange, bool collidableOnly, bool validatedOnly,
  374.                                                  unsigned int maxPts, Vec3* coverPos, Vec3* coverObjPos, Vec3* coverObjDir, float* coverRad, bool* coverCollidable);
  375.         // Returns a point which is a valid distance away from a wall in front of the point.
  376.         virtual void AdjustDirectionalCoverPosition(Vec3& pos, const Vec3& dir, float agentRadius, float testHeight);
  377.  
  378.         //Hide spots///////////////////////////////////////////////////////////////////////////////////////////////////
  379.         ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
  380.  
  381.         ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
  382.         //Perception///////////////////////////////////////////////////////////////////////////////////////////////////
  383.  
  384.         //TODO PerceptionManager://Some stuff in this section maps to that..
  385.  
  386.         // current global AI alertness value (what's the most alerted puppet)
  387.         virtual int          GetAlertness() const;
  388.         virtual int          GetAlertness(const IAIAlertnessPredicate& alertnessPredicate);
  389.         virtual void         SetAssesmentMultiplier(unsigned short type, float fMultiplier);
  390.         virtual void         SetFactionThreatMultiplier(uint8 factionID, float fMultiplier);
  391.         virtual void         SetPerceptionDistLookUp(float* pLookUpTable, int tableSize); //look up table to be used when calculating visual time-out increment
  392.         // Global perception scale handler functionalities
  393.         virtual void         UpdateGlobalPerceptionScale(const float visualScale, const float audioScale, EAIFilterType filterType = eAIFT_All, const char* factionName = NULL);
  394.         virtual float        GetGlobalVisualScale(const IAIObject* pAIObject) const;
  395.         virtual float        GetGlobalAudioScale(const IAIObject* pAIObject) const;
  396.         virtual void         DisableGlobalPerceptionScaling();
  397.         virtual void         RegisterGlobalPerceptionListener(IAIGlobalPerceptionListener* pListner);
  398.         virtual void         UnregisterGlobalPerceptionlistener(IAIGlobalPerceptionListener* pListner);
  399.         /// Fills the array with possible dangers, returns number of dangers.
  400.         virtual unsigned int GetDangerSpots(const IAIObject* requester, float range, Vec3* positions, unsigned int* types, unsigned int n, unsigned int flags);
  401.         virtual void         RegisterStimulus(const SAIStimulus& stim);
  402.         virtual void         IgnoreStimulusFrom(EntityId sourceId, EAIStimulusType type, float time);
  403.         virtual void         DynOmniLightEvent(const Vec3& pos, float radius, EAILightEventType type, EntityId shooterId, float time = 5.0f);
  404.         virtual void         DynSpotLightEvent(const Vec3& pos, const Vec3& dir, float radius, float fov, EAILightEventType type, EntityId shooterId, float time = 5.0f);
  405.         virtual IVisionMap*  GetVisionMap()  { return gAIEnv.pVisionMap; }
  406.         virtual IFactionMap& GetFactionMap() { return *gAIEnv.pFactionMap; }
  407.  
  408.         //Perception///////////////////////////////////////////////////////////////////////////////////////////////////
  409.         ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
  410.  
  411.         ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
  412.         //WTF are these?///////////////////////////////////////////////////////////////////////////////////////////////
  413.         virtual IAIObject*           GetBeacon(unsigned short nGroupID);
  414.         virtual void                 UpdateBeacon(unsigned short nGroupID, const Vec3& vPos, IAIObject* pOwner = 0);
  415.  
  416.         virtual IFireCommandHandler* CreateFirecommandHandler(const char* name, IAIActor* pShooter);
  417.  
  418.         virtual bool                 ParseTables(int firstTable, bool parseMovementAbility, IFunctionHandler* pH, AIObjectParams& aiParams, bool& updateAlways);
  419.  
  420.         void                         AddCombatClass(int combatClass, float* pScalesVector, int size, const char* szCustomSignal);
  421.         float                        ProcessBalancedDamage(IEntity* pShooterEntity, IEntity* pTargetEntity, float damage, const char* damageType);
  422.         void                         NotifyDeath(IAIObject* pVictim);
  423.  
  424.         // !!! added to resolve merge conflict: to be removed in dev/c2 !!!
  425.         virtual float GetFrameStartTimeSecondsVirtual() const
  426.         {
  427.                 return GetFrameStartTimeSeconds();
  428.         }
  429.  
  430.         //WTF are these?///////////////////////////////////////////////////////////////////////////////////////////////
  431.         ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
  432.  
  433.         //IAISystem/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  434.         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  435.         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  436.  
  437.         //Light frame profiler for AI support
  438.         // Add nTicks to the number of Ticks spend this frame in particle functions
  439.         virtual void AddFrameTicks(uint64 nTicks) { m_nFrameTicks += nTicks; }
  440.  
  441.         // Reset Ticks Counter
  442.         virtual void ResetFrameTicks() { m_nFrameTicks = 0; }
  443.  
  444.         // Get number of Ticks accumulated over this frame
  445.         virtual uint64 NumFrameTicks() const { return m_nFrameTicks; }
  446.  
  447.         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  448.         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  449.         //CAISystem/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  450.  
  451.         // CActiveAction needs to access action manager
  452.         CPerceptionManager*      GetPerceptionManager();
  453.         CAILightManager*         GetLightManager();
  454.         CAIDynHideObjectManager* GetDynHideObjectManager();
  455.  
  456.         bool                     InitSmartObjects();
  457.  
  458.         typedef std::vector<std::pair<string, const SpecialArea*>> VolumeRegions;
  459.  
  460.         /// Returns true if all the links leading out of the node have radius < fRadius
  461.         bool ExitNodeImpossible(CGraphLinkManager& linkManager, const GraphNode* pNode, float fRadius) const;
  462.  
  463.         /// Returns true if all the links leading into the node have radius < fRadius
  464.         bool EnterNodeImpossible(CGraphNodeManager& nodeManager, CGraphLinkManager& linkManager, const GraphNode* pNode, float fRadius) const;
  465.  
  466.         void InvalidatePathsThroughArea(const ListPositions& areaShape);
  467.  
  468.         typedef VectorSet<CWeakRef<CAIActor>> AIActorSet;
  469.         typedef std::vector<CAIActor*>        AIActorVector;
  470.  
  471.         bool       GetNearestPunchableObjectPosition(IAIObject* pRef, const Vec3& searchPos, float searchRad, const Vec3& targetPos, float minSize, float maxSize, float minMass, float maxMass, Vec3& posOut, Vec3& dirOut, IEntity** objEntOut);
  472.         void       DumpStateOf(IAIObject* pObject);
  473.         IAIObject* GetBehindObjectInRange(IAIObject* pRef, unsigned short nType, float fRadiusMin, float fRadiusMax);
  474.         IAIObject* GetRandomObjectInRange(IAIObject* pRef, unsigned short nType, float fRadiusMin, float fRadiusMax, bool bFaceAttTarget = false);
  475.         IAIObject* GetNearestObjectOfTypeInRange(const Vec3& pos, unsigned int type, float fRadiusMin, float fRadiusMax, IAIObject* pSkip = NULL, int nOption = 0);
  476.         IAIObject* GetNearestObjectOfTypeInRange(IAIObject* pObject, unsigned int type, float fRadiusMin, float fRadiusMax, int nOption = 0);
  477.  
  478.         //// Iterates over AI objects within specified shape.
  479.         //// Parameter 'name' specify the enclosing shape and parameter 'checkHeight' specifies if hte height of the shape is taken into account too,
  480.         //// for other parameters see GetFirstAIObject.
  481.         IAIObjectIter* GetFirstAIObjectInShape(EGetFirstFilter filter, short n, const char* shapeName, bool checkHeight);
  482.         IAIObject*     GetNearestToObjectInRange(IAIObject* pRef, unsigned short nType, float fRadiusMin, float fRadiusMax, float inCone = -1, bool bFaceAttTarget = false, bool bSeesAttTarget = false, bool bDevalue = true);
  483.  
  484.         //// Devalues an AI object for the refence object only or for whole group.
  485.         void                  Devalue(IAIObject* pRef, IAIObject* pObject, bool group, float fDevalueTime = 20.f);
  486.  
  487.         CAIObject*            GetPlayer() const;
  488.  
  489.         void                  NotifyEnableState(CAIActor* pAIActor, bool state);
  490.         EPuppetUpdatePriority CalcPuppetUpdatePriority(CPuppet* pPuppet) const;
  491.  
  492.         //// non-virtual, accessed from CAIObject.
  493.         //// notifies that AIObject has changed its position, which is important for smart objects
  494.         void                                   NotifyAIObjectMoved(IEntity* pEntity, SEntityEvent event);
  495.         virtual void                           NotifyTargetDead(IAIObject* pDeadObject);
  496.  
  497.         virtual std::shared_ptr<IPathFollower> CreateAndReturnNewDefaultPathFollower(const PathFollowerParams& params, const IPathObstacles& pathObstacleObject);
  498.  
  499.         const AIActorSet& GetEnabledAIActorSet() const;
  500.  
  501.         void              AddToFaction(CAIObject* pObject, uint8 factionID);
  502.  
  503.         IAIObject*        GetLeaderAIObject(int iGroupId);
  504.         IAIObject*        GetLeaderAIObject(IAIObject* pObject);
  505.         IAIGroup*         GetIAIGroup(int groupid);
  506.         void              SetLeader(IAIObject* pObject);
  507.         CLeader*          GetLeader(int nGroupID);
  508.         CLeader*          GetLeader(const CAIActor* pSoldier);
  509.         CLeader*          CreateLeader(int nGroupID);
  510.         CAIGroup*         GetAIGroup(int nGroupID);
  511.         // removes specified object from group
  512.         void              RemoveFromGroup(int nGroupID, CAIObject* pObject);
  513.         // adds an object to a group
  514.         void              AddToGroup(CAIActor* pObject, int nGroupId = -1);
  515.         int               GetBeaconGroupId(CAIObject* pBeacon);
  516.         void              UpdateGroupStatus(int groupId);
  517.  
  518.         CFormation*       GetFormation(CFormation::TFormationID id);
  519.         bool              ScaleFormation(IAIObject* pOwner, float fScale);
  520.         bool              SetFormationUpdate(IAIObject* pOwner, bool bUpdate);
  521.         void              AddFormationPoint(const char* name, const FormationNode& nodeDescriptor);
  522.         IAIObject*        GetFormationPoint(IAIObject* pObject);
  523.         int               GetFormationPointClass(const char* descriptorName, int position);
  524.         bool              ChangeFormation(IAIObject* pOwner, const char* szFormationName, float fScale);
  525.         void              CreateFormationDescriptor(const char* name);
  526.         void              FreeFormationPoint(CWeakRef<CAIObject> refOwner);
  527.         bool              IsFormationDescriptorExistent(const char* name);
  528.         CFormation*       CreateFormation(CWeakRef<CAIObject> refOwner, const char* szFormationName, Vec3 vTargetPos = ZERO);
  529.         string            GetFormationNameFromCRC32(unsigned int nCrc32ForFormationName) const;
  530.         void              ReleaseFormation(CWeakRef<CAIObject> refOwner, bool bDelete);
  531.         void              ReleaseFormationPoint(CAIObject* pReserved);
  532.         // changes the formation's scale factor for the given group id
  533.         bool              SameFormation(const CPuppet* pHuman, const CAIVehicle* pVehicle);
  534.  
  535.         void              FlushAllAreas();
  536.  
  537.         // offsets all AI areas when the segmented world shifts.
  538.         void            OffsetAllAreas(const Vec3& additionalOffset);
  539.  
  540.         SShape*         GetGenericShapeOfName(const char* shapeName);
  541.         const ShapeMap& GetGenericShapes() const;
  542.  
  543.         /// Indicates if a human would be visible if placed at the specified position
  544.         /// If fullCheck is false then only a camera frustum check will be done. If true
  545.         /// then more precise (perhaps expensive) checking will be done.
  546.         bool            WouldHumanBeVisible(const Vec3& footPos, bool fullCheck) const;
  547.  
  548.         const ShapeMap& GetOcclusionPlanes() const;
  549.  
  550.         bool            CheckPointsVisibility(const Vec3& from, const Vec3& to, float rayLength, IPhysicalEntity* pSkipEnt = 0, IPhysicalEntity* pSkipEntAux = 0);
  551.         bool            CheckObjectsVisibility(const IAIObject* pObj1, const IAIObject* pObj2, float rayLength);
  552.         float           GetVisPerceptionDistScale(float distRatio); //distRatio (0-1) 1-at sight range
  553.         float           GetRayPerceptionModifier(const Vec3& start, const Vec3& end, const char* actorName);
  554.  
  555.         // returns value in range [0, 1]
  556.         // calculate how much targetPos is obstructed by water
  557.         // takes into account water depth and density
  558.         float GetWaterOcclusionValue(const Vec3& targetPos) const;
  559.  
  560.         bool  CheckVisibilityToBody(CAIActor* pObserver, CAIActor* pBody, float& closestDistSq, IPhysicalEntity* pSkipEnt = 0);
  561.  
  562.         /// Returns positions of currently occupied hide point objects excluding the requesters hide spot.
  563.         void GetOccupiedHideObjectPositions(const CPipeUser* pRequester, std::vector<Vec3>& hideObjectPositions);
  564.  
  565.         /// Finds all hidespots (and their path range) within path range of startPos, along with the navigation graph nodes traversed.
  566.         /// Each hidespot contains info about where it came from. If you want smart-object hidespots you need to pass in an entity
  567.         /// so it can be checked to see if it could use the smart object. pLastNavNode/pLastHideNode are just used as a hint.
  568.         /// Smart Objects are only considered if pRequester != 0
  569.         MultimapRangeHideSpots& GetHideSpotsInRange(MultimapRangeHideSpots& result, MapConstNodesDistance& traversedNodes, const Vec3& startPos, float maxDist,
  570.                                                     IAISystem::tNavCapMask navCapMask, float passRadius, bool skipNavigationTest,
  571.                                                     IEntity* pSmartObjectUserEntity = 0, unsigned lastNavNodeIndex = 0, const class CAIObject* pRequester = 0);
  572.  
  573.         bool IsHideSpotOccupied(CPipeUser* pRequester, const Vec3& pos) const;
  574.  
  575.         void AdjustOmniDirectionalCoverPosition(Vec3& pos, Vec3& dir, float hideRadius, float agentRadius, const Vec3& hideFrom, const bool hideBehind = true);
  576.  
  577.         //combat classes scale
  578.         float GetCombatClassScale(int shooterClass, int targetClass);
  579.  
  580.         typedef std::map<const void*, Sphere> TDamageRegions;
  581.         /// Returns the regions game code has flagged as causing damage
  582.         const TDamageRegions& GetDamageRegions() const;
  583.  
  584.         static void           ReloadConsoleCommand(IConsoleCmdArgs*);
  585.         static void           CheckGoalpipes(IConsoleCmdArgs*);
  586.         static void           DumpCodeCoverageCheckpoints(IConsoleCmdArgs* pArgs);
  587.         static void           StartAIRecorder(IConsoleCmdArgs*);
  588.         static void           StopAIRecorder(IConsoleCmdArgs*);
  589.  
  590.         // Clear out AI system for clean script reload
  591.         void ClearForReload(void);
  592.  
  593.         void SetupAIEnvironment();
  594.         void SetAIHacksConfiguration();
  595.  
  596.         /// Our own internal serialisation - just serialise our state (but not the things
  597.         /// we own that are capable of serialising themselves)
  598.         void SerializeInternal(TSerialize ser);
  599.  
  600.         void SingleDryUpdate(CAIActor* pAIActor);
  601.  
  602.         void UpdateAmbientFire();
  603.         void UpdateExpensiveAccessoryQuota();
  604.         void UpdateAuxSignalsMap();
  605.         void UpdateCollisionAvoidance(const AIActorVector& agents, float updateTime);
  606.  
  607.         void CheckVisibilityBodiesOfType(unsigned short int aiObjectType);
  608.         int  RayOcclusionPlaneIntersection(const Vec3& start, const Vec3& end);
  609.         int  RayObstructionSphereIntersection(const Vec3& start, const Vec3& end);
  610.  
  611.         // just steps through objects - for debugging
  612.         void         DebugOutputObjects(const char* txt) const;
  613.  
  614.         virtual bool IsEnabled() const;
  615.  
  616.         void         UnregisterAIActor(CWeakRef<CAIActor> destroyedObject);
  617.  
  618.         ///////////////////////////////////////////////////
  619.         IAIActorProxyFactory* m_actorProxyFactory;
  620.         IAIGroupProxyFactory* m_groupProxyFactory;
  621.         CAIObjectManager      m_AIObjectManager;
  622.         CPipeManager          m_PipeManager;
  623.         CGraph*               m_pGraph;
  624.         CNavigation*          m_pNavigation;
  625.         CAIActionManager*     m_pAIActionManager;
  626.         CSmartObjectManager*  m_pSmartObjectManager;
  627.         bool                  m_bUpdateSmartObjects;
  628.         bool                  m_IsEnabled;//TODO eventually find how to axe this!
  629.         ///////////////////////////////////////////////////
  630.  
  631.         std::vector<short>      m_priorityObjectTypes;
  632.         std::vector<CAIObject*> m_priorityTargets;
  633.  
  634.         AIObjects               m_mapGroups;
  635.         AIObjects               m_mapFaction;
  636.  
  637.         // This map stores the AI group info.
  638.         typedef std::map<int, CAIGroup*> AIGroupMap;
  639.         AIGroupMap m_mapAIGroups;
  640.  
  641.         //AIObject Related Data structs:
  642.         AIActorSet m_enabledAIActorsSet;  // Set of enabled AI Actors
  643.         AIActorSet m_disabledAIActorsSet; // Set of disabled AI Actors
  644.         float      m_enabledActorsUpdateError;
  645.         int        m_enabledActorsUpdateHead;
  646.         int        m_totalActorsUpdateCount;
  647.         float      m_disabledActorsUpdateError;
  648.         int        m_disabledActorsHead;
  649.         bool       m_iteratingActorSet;
  650.  
  651.         typedef std::map<tAIObjectID, CAIHideObject> DebugHideObjectMap;
  652.         DebugHideObjectMap m_DebugHideObjects;
  653.  
  654.         struct BeaconStruct
  655.         {
  656.                 CCountedRef<CAIObject> refBeacon;
  657.                 CWeakRef<CAIObject>    refOwner;
  658.         };
  659.         typedef std::map<unsigned short, BeaconStruct> BeaconMap;
  660.         BeaconMap m_mapBeacons;
  661.  
  662.         typedef std::map<CWeakRef<CAIObject>, CFormation*> FormationMap;  // (MATT) Could be a pipeuser or such? {2009/03/18}
  663.         FormationMap           m_mapActiveFormations;
  664.         typedef std::map<string, CFormationDescriptor>     FormationDescriptorMap;
  665.         FormationDescriptorMap m_mapFormationDescriptors;
  666.  
  667.         //AIObject Related Data structs:
  668.         ///////////////////////////////////////////////////////////////////////////////////
  669.  
  670.         ////////////////////////////////////////////////////////////////////
  671.         //Subsystems
  672.         CAILightManager         m_lightManager;
  673.         CAIDynHideObjectManager m_dynHideObjectManager;
  674.         SAIRecorderDebugContext m_recorderDebugContext;
  675.         //Subsystems
  676.         ////////////////////////////////////////////////////////////////////
  677.  
  678.         ////////////////////////////////////////////////////////////////////
  679.         //pathfinding data structures
  680.         typedef std::map<string, AgentPathfindingProperties> PFPropertiesMap;
  681.         PFPropertiesMap mapPFProperties;
  682.         ShapeMap        m_mapOcclusionPlanes;
  683.         ShapeMap        m_mapGenericShapes;
  684.         ////////////////////////////////////////////////////////////////////
  685.  
  686.         ////////////////////////////////////////////////////////////////////
  687.         //scripting data structures
  688.         CScriptBind_AI*                     m_pScriptAI;
  689.  
  690.         std::vector<const IPhysicalEntity*> m_walkabilityPhysicalEntities;
  691.         IGeometry*                          m_walkabilityGeometryBox;
  692.  
  693.         ////////////////////////////////////////////////////////////////////
  694.         //system listeners
  695.         typedef VectorSet<IAISystemListener*> SystemListenerSet;
  696.         SystemListenerSet m_setSystemListeners;
  697.         //system listeners
  698.         ////////////////////////////////////////////////////////////////////
  699.  
  700.         typedef std::map<int, float> MapMultipliers;
  701.         MapMultipliers m_mapMultipliers;
  702.         MapMultipliers m_mapFactionThreatMultipliers;
  703.  
  704.         //<<FIXME>> just used for profiling:
  705.         //typedef std::map<tAIObjectID,float> TimingMap;
  706.         //TimingMap m_mapDEBUGTiming;
  707.  
  708.         //typedef std::map<string,float> NamedTimingMap;
  709.         //NamedTimingMap m_mapDEBUGTimingGOALS;
  710.  
  711.         int m_AlertnessCounters[NUM_ALERTNESS_COUNTERS];
  712.  
  713.         // (MATT) For now I bloat CAISystem with this, but it should move into some new struct of Environment.
  714.         // Stores level path for metadata - i.e. the code coverage data files {2009/02/17}
  715.         string                         m_sWorkingFolder;
  716.  
  717.         float                          m_DEBUG_screenFlash;
  718.  
  719.         bool                           m_bCodeCoverageFailed;
  720.  
  721.         unsigned int                   m_nTickCount;
  722.         bool                           m_bInitialized;
  723.  
  724.         IVisArea*                      m_pAreaList[100];
  725.  
  726.         float                          m_frameDeltaTime;
  727.         float                          m_frameStartTimeSeconds;
  728.         CTimeValue                     m_fLastPuppetUpdateTime;
  729.         CTimeValue                     m_frameStartTime;
  730.         CTimeValue                     m_lastVisBroadPhaseTime;
  731.         CTimeValue                     m_lastAmbientFireUpdateTime;
  732.         CTimeValue                     m_lastExpensiveAccessoryUpdateTime;
  733.         CTimeValue                     m_lastGroupUpdateTime;
  734.  
  735.         PerceptionModifierShapeMap     m_mapPerceptionModifiers;
  736.  
  737.         std::vector<IFireCommandDesc*> m_firecommandDescriptors;
  738.  
  739.         TDamageRegions                 m_damageRegions;
  740.  
  741.         struct SAIDelayedExpAccessoryUpdate
  742.         {
  743.                 SAIDelayedExpAccessoryUpdate(CPuppet* pPuppet, int timeMs, bool state)
  744.                         : pPuppet(pPuppet)
  745.                         , timeMs(timeMs)
  746.                         , state(state)
  747.                 {
  748.                 }
  749.                 CPuppet* pPuppet;
  750.                 int      timeMs;
  751.                 bool     state;
  752.         };
  753.         std::vector<SAIDelayedExpAccessoryUpdate> m_delayedExpAccessoryUpdates;
  754.  
  755.         struct AuxSignalDesc
  756.         {
  757.                 float  fTimeout;
  758.                 string strMessage;
  759.                 void   Serialize(TSerialize ser)
  760.                 {
  761.                         ser.Value("AuxSignalDescTimeOut", fTimeout);
  762.                         ser.Value("AuxSignalDescMessage", strMessage);
  763.                 }
  764.         };
  765.         typedef std::multimap<short, AuxSignalDesc> MapSignalStrings;
  766.         MapSignalStrings m_mapAuxSignalsFired;
  767.  
  768.         // combat classes
  769.         // vector of target selection scale multipliers
  770.         struct SCombatClassDesc
  771.         {
  772.                 std::vector<float> mods;
  773.                 string             customSignal;
  774.         };
  775.         std::vector<SCombatClassDesc> m_CombatClasses;
  776.  
  777.         class AILinearLUT
  778.         {
  779.                 int    m_size;
  780.                 float* m_pData;
  781.  
  782.         public:
  783.                 AILinearLUT() : m_size(0), m_pData(0) {}
  784.                 ~AILinearLUT()
  785.                 {
  786.                         if (m_pData)
  787.                                 delete[] m_pData;
  788.                 }
  789.  
  790.                 // Returns the size of the table.
  791.                 int   GetSize() const             { return m_size; }
  792.                 // Returns the value is specified sample.
  793.                 float GetSampleValue(int i) const { return m_pData[i]; }
  794.  
  795.                 /// Set the lookup table from a array of floats.
  796.                 void Set(float* values, int n)
  797.                 {
  798.                         delete[] m_pData;
  799.                         m_size = n;
  800.                         m_pData = new float[n];
  801.                         for (int i = 0; i < n; ++i) m_pData[i] = values[i];
  802.                 }
  803.  
  804.                 // Returns linearly interpolated value, t in range [0..1]
  805.                 float GetValue(float t) const
  806.                 {
  807.                         const int last = m_size - 1;
  808.  
  809.                         // Convert 't' to a sample.
  810.                         t *= (float)last;
  811.                         const int n = (int)floorf(t);
  812.  
  813.                         // Check for out of range cases.
  814.                         if (n < 0) return m_pData[0];
  815.                         if (n >= last) return m_pData[last];
  816.  
  817.                         // Linear interpolation between the two adjacent samples.
  818.                         const float a = t - (float)n;
  819.                         return m_pData[n] + (m_pData[n + 1] - m_pData[n]) * a;
  820.                 }
  821.         };
  822.  
  823.         AILinearLUT m_VisDistLookUp;
  824.  
  825.         ////////////////////////////////////////////////////////////////////
  826.         //Debugging / Logging subsystems
  827.  
  828. #ifdef CRYAISYSTEM_DEBUG
  829.         CAIDbgRecorder m_DbgRecorder;
  830.         CAIRecorder    m_Recorder;
  831.  
  832.         struct SPerceptionDebugLine
  833.         {
  834.                 SPerceptionDebugLine(const char* name_, const Vec3& start_, const Vec3& end_, const ColorB& color_, float time_, float thickness_)
  835.                         : start(start_)
  836.                         , end(end_)
  837.                         , color(color_)
  838.                         , time(time_)
  839.                         , thickness(thickness_)
  840.                 {
  841.                         cry_strcpy(name, name_);
  842.                 }
  843.  
  844.                 Vec3   start, end;
  845.                 ColorB color;
  846.                 float  time;
  847.                 float  thickness;
  848.                 char   name[64];
  849.         };
  850.         std::list<SPerceptionDebugLine> m_lstDebugPerceptionLines;
  851.  
  852.         struct SDebugFakeTracer
  853.         {
  854.                 SDebugFakeTracer(const Vec3& p0, const Vec3& p1, float a, float t) : p0(p0), p1(p1), a(a), t(t), tmax(t) {}
  855.                 Vec3  p0, p1;
  856.                 float a;
  857.                 float t, tmax;
  858.         };
  859.         std::vector<SDebugFakeTracer> m_DEBUG_fakeTracers;
  860.  
  861.         struct SDebugFakeDamageInd
  862.         {
  863.                 SDebugFakeDamageInd(const Vec3& pos, float t) : p(pos), t(t), tmax(t) {}
  864.                 std::vector<Vec3> verts;
  865.                 Vec3              p;
  866.                 float             t, tmax;
  867.         };
  868.         std::vector<SDebugFakeDamageInd> m_DEBUG_fakeDamageInd;
  869.  
  870.         struct SDebugFakeHitEffect
  871.         {
  872.                 SDebugFakeHitEffect() : r(.0f), t(.0f), tmax(.0f) {}
  873.                 SDebugFakeHitEffect(const Vec3& p, const Vec3& n, float r, float t, ColorB c) : p(p), n(n), r(r), t(t), tmax(t), c(c) {}
  874.                 Vec3   p, n;
  875.                 float  r, t, tmax;
  876.                 ColorB c;
  877.         };
  878.         std::vector<SDebugFakeHitEffect> m_DEBUG_fakeHitEffect;
  879.  
  880.         void UpdateDebugStuff();
  881.  
  882.         void DebugDrawEnabledActors();
  883.         void DebugDrawEnabledPlayers() const;
  884.         void DebugDrawUpdate() const;
  885.         void DebugDrawFakeTracers() const;
  886.         void DebugDrawFakeHitEffects() const;
  887.         void DebugDrawFakeDamageInd() const;
  888.         void DebugDrawPlayerRanges() const;
  889.         void DebugDrawPerceptionIndicators();
  890.         void DebugDrawPerceptionModifiers();
  891.         void DebugDrawTargetTracks() const;
  892.         void DebugDrawDebugAgent();
  893.         void DebugDrawCodeCoverage() const;
  894.         void DebugDrawPerceptionManager();
  895.         void DebugDrawNavigation() const;
  896.         void DebugDrawGraph(int debugDrawVal) const;
  897.         void DebugDrawLightManager();
  898.         void DebugDrawP0AndP1() const;
  899.         void DebugDrawPuppetPaths();
  900.         void DebugDrawCheckCapsules() const;
  901.         void DebugDrawCheckRay() const;
  902.         void DebugDrawCheckWalkability();
  903.         void DebugDrawCheckWalkabilityTime() const;
  904.         void DebugDrawCheckFloorPos() const;
  905.         void DebugDrawCheckGravity() const;
  906.         void DebugDrawGetTeleportPos() const;
  907.         void DebugDrawDebugShapes();
  908.         void DebugDrawGroupTactic();
  909.         void DebugDrawDamageParts() const;
  910.         void DebugDrawStanceSize() const;
  911.         void DebugDrawForceAGAction() const;
  912.         void DebugDrawForceAGSignal() const;
  913.         void DebugDrawForceStance() const;
  914.         void DebugDrawForcePosture() const;
  915.         void DebugDrawPlayerActions() const;
  916.         void DebugDrawPath();
  917.         void DebugDrawPathAdjustments() const;
  918.         void DebugDrawPathSingle(const CPipeUser* pPipeUser) const;
  919.         void DebugDrawAgents() const;
  920.         void DebugDrawAgent(CAIObject* pAgent) const;
  921.         void DebugDrawStatsTarget(const char* pName);
  922.         void DebugDrawBehaviorSelection(const char* agentName);
  923.         void DebugDrawFormations() const;
  924.         void DebugDrawGraph(CGraph* pGraph, const std::vector<Vec3>* focusPositions = 0, float radius = 0.0f) const;
  925.         void DebugDrawGraphErrors(CGraph* pGraph) const;
  926.         void DebugDrawType() const;
  927.         void DebugDrawTypeSingle(CAIObject* pAIObj) const;
  928.         void DebugDrawPendingEvents(CPuppet* pPuppet, int xPos, int yPos) const;
  929.         void DebugDrawTargetsList() const;
  930.         void DebugDrawTargetUnit(CAIObject* pAIObj) const;
  931.         void DebugDrawStatsList() const;
  932.         void DebugDrawLocate() const;
  933.         void DebugDrawLocateUnit(CAIObject* pAIObj) const;
  934.         void DebugDrawSteepSlopes();
  935.         void DebugDrawVegetationCollision();
  936.         void DebugDrawGroups();
  937.         void DebugDrawOneGroup(float x, float& y, float& w, float fontSize, short groupID, const ColorB& textColor,
  938.                                const ColorB& worldColor, bool drawWorld);
  939.         void DebugDrawHideSpots();
  940.         void DebugDrawDynamicHideObjects();
  941.         void DebugDrawMyHideSpot(CAIObject* pAIObj) const;
  942.         void DebugDrawSelectedHideSpots() const;
  943.         void DebugDrawCrowdControl();
  944.         void DebugDrawRadar();
  945.         void DebugDrawDistanceLUT();
  946.         void DrawRadarPath(CPipeUser* pPipeUser, const Matrix34& world, const Matrix34& screen);
  947.         void DebugDrawRecorderRange() const;
  948.         void DebugDrawShooting() const;
  949.         void DebugDrawAreas() const;
  950.         void DebugDrawAmbientFire() const;
  951.         void DebugDrawInterestSystem(int iLevel) const;
  952.         void DebugDrawExpensiveAccessoryQuota() const;
  953.         void DebugDrawDamageControlGraph() const;
  954.         void DebugDrawAdaptiveUrgency() const;
  955.         enum EDrawUpdateMode
  956.         {
  957.                 DRAWUPDATE_NONE = 0,
  958.                 DRAWUPDATE_NORMAL,
  959.                 DRAWUPDATE_WARNINGS_ONLY,
  960.         };
  961.         bool DebugDrawUpdateUnit(CAIActor* pTargetAIActor, int row, EDrawUpdateMode mode) const;
  962.         void DebugDrawTacticalPoints();
  963.  
  964.         void DEBUG_AddFakeDamageIndicator(CAIActor* pShooter, float t);
  965.  
  966.         void DebugDrawSelectedTargets();
  967.  
  968.         struct SDebugLine
  969.         {
  970.                 SDebugLine(const Vec3& start_, const Vec3& end_, const ColorB& color_, float time_, float thickness_)
  971.                         : start(start_)
  972.                         , end(end_)
  973.                         , color(color_)
  974.                         , time(time_)
  975.                         , thickness(thickness_)
  976.                 {}
  977.                 Vec3   start, end;
  978.                 ColorB color;
  979.                 float  time;
  980.                 float  thickness;
  981.         };
  982.         std::vector<SDebugLine> m_vecDebugLines;
  983.         Vec3                    m_lastStatsTargetTrajectoryPoint;
  984.         std::list<SDebugLine>   m_lstStatsTargetTrajectory;
  985.  
  986.         struct SDebugBox
  987.         {
  988.                 SDebugBox(const Vec3& pos_, const OBB& obb_, const ColorB& color_, float time_)
  989.                         : pos(pos_)
  990.                         , obb(obb_)
  991.                         , color(color_)
  992.                         , time(time_)
  993.                 {}
  994.                 Vec3   pos;
  995.                 OBB    obb;
  996.                 ColorB color;
  997.                 float  time;
  998.         };
  999.         std::vector<SDebugBox> m_vecDebugBoxes;
  1000.  
  1001.         struct SDebugSphere
  1002.         {
  1003.                 SDebugSphere(const Vec3& pos_, float radius_, const ColorB& color_, float time_)
  1004.                         : pos(pos_)
  1005.                         , radius(radius_)
  1006.                         , color(color_)
  1007.                         , time(time_)
  1008.                 {}
  1009.                 Vec3   pos;
  1010.                 float  radius;
  1011.                 ColorB color;
  1012.                 float  time;
  1013.         };
  1014.         std::vector<SDebugSphere> m_vecDebugSpheres;
  1015.  
  1016.         struct SDebugCylinder
  1017.         {
  1018.                 SDebugCylinder(const Vec3& pos_, const Vec3& dir_, float radius_, float height_, const ColorB& color_, float time_)
  1019.                         : pos(pos_)
  1020.                         , dir(dir_)
  1021.                         , height(height_)
  1022.                         , radius(radius_)
  1023.                         , color(color_)
  1024.                         , time(time_)
  1025.                 {}
  1026.                 Vec3   pos;
  1027.                 Vec3   dir;
  1028.                 float  radius;
  1029.                 float  height;
  1030.                 ColorB color;
  1031.                 float  time;
  1032.         };
  1033.         std::vector<SDebugCylinder> m_vecDebugCylinders;
  1034.  
  1035.         struct SDebugCone
  1036.         {
  1037.                 SDebugCone(const Vec3& pos_, const Vec3& dir_, float radius_, float height_, const ColorB& color_, float time_)
  1038.                         : pos(pos_)
  1039.                         , dir(dir_)
  1040.                         , height(height_)
  1041.                         , radius(radius_)
  1042.                         , color(color_)
  1043.                         , time(time_)
  1044.                 {}
  1045.                 Vec3   pos;
  1046.                 Vec3   dir;
  1047.                 float  radius;
  1048.                 float  height;
  1049.                 ColorB color;
  1050.                 float  time;
  1051.         };
  1052.         std::vector<SDebugCone> m_vecDebugCones;
  1053.  
  1054.         void DrawDebugShape(const SDebugLine&);
  1055.         void DrawDebugShape(const SDebugBox&);
  1056.         void DrawDebugShape(const SDebugSphere&);
  1057.         void DrawDebugShape(const SDebugCylinder&);
  1058.         void DrawDebugShape(const SDebugCone&);
  1059.         template<typename ShapeContainer>
  1060.         void DrawDebugShapes(ShapeContainer& shapes, float dt);
  1061.  
  1062.         void AddDebugLine(const Vec3& start, const Vec3& end, const ColorB& color, float time, float thickness = 1.0f);
  1063.  
  1064.         void AddDebugBox(const Vec3& pos, const OBB& obb, uint8 r, uint8 g, uint8 b, float time);
  1065.         void AddDebugCylinder(const Vec3& pos, const Vec3& dir, float radius, float length, const ColorB& color, float time);
  1066.         void AddDebugCone(const Vec3& pos, const Vec3& dir, float radius, float length, const ColorB& color, float time);
  1067.  
  1068.         void AddPerceptionDebugLine(const char* tag, const Vec3& start, const Vec3& end, uint8 r, uint8 g, uint8 b, float time, float thickness);
  1069.  
  1070. #endif //CRYAISYSTEM_DEBUG
  1071.  
  1072.         // returns fLeft > fRight
  1073.         static bool CompareFloatsFPUBugWorkaround(float fLeft, float fRight);
  1074.  
  1075. private:
  1076.         void        ResetAIActorSets(bool clearSets);
  1077.  
  1078.         void        DetachFromTerritoryAllAIObjectsOfType(const char* szTerritoryName, unsigned short int nType);
  1079.  
  1080.         void        UpdateCollisionAvoidanceRadiusIncrement(CAIActor* actor, float updateTime);
  1081.         inline bool IsParticipatingInCollisionAvoidance(CAIActor* actor) const;
  1082.  
  1083.         void        LoadCover(const char* szLevel, const char* szMission);
  1084.         void        LoadMNM(const char* szLevel, const char* szMission, bool afterExporting);
  1085.  
  1086.         //Debugging / Logging subsystems
  1087.         ////////////////////////////////////////////////////////////////////
  1088.  
  1089. private:
  1090.         void RegisterFirecommandHandler(IFireCommandDesc* desc);
  1091.  
  1092.         void CallReloadTPSQueriesScript();
  1093.  
  1094.         CGlobalPerceptionScaleHandler m_globalPerceptionScale;
  1095.  
  1096.         //CAISystem/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  1097.         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  1098.         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  1099.  
  1100.         uint64        m_nFrameTicks; // counter for light ai system profiler
  1101.  
  1102.         AIActorVector m_tmpFullUpdates;
  1103.         AIActorVector m_tmpDryUpdates;
  1104.         AIActorVector m_tmpAllUpdates;
  1105.  
  1106.         EntityId      m_agentDebugTarget;
  1107. };
  1108.  
  1109. #endif // _CAISYSTEM_H_
  1110.  
downloadCAISystem.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