BVB Source Codes

CRYENGINE Show AIProxy.h Source code

Return Download CRYENGINE: download AIProxy.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. /********************************************************************
  4.    CryGame Source File.
  5.    -------------------------------------------------------------------------
  6.    File name:   AIProxy.h
  7.    Version:     v1.00
  8.    Description:
  9.  
  10.    -------------------------------------------------------------------------
  11.    History:
  12.    - 7:10:2004   18:54 : Created by Kirill Bulatsev
  13.    - 2 Mar 2009                         : Evgeny Adamenkov: Removed parameter of type IRenderer in DebugDraw
  14.  
  15.  *********************************************************************/
  16.  
  17. #ifndef __AIProxy_H__
  18. #define __AIProxy_H__
  19.  
  20. #pragma once
  21.  
  22. #include <CryAISystem/IAIActorProxy.h>
  23. #include "IWeapon.h"
  24. #include "IGameObject.h"
  25.  
  26. struct IAISignalExtraData;
  27. struct IEntity;
  28. class CAIHandler;
  29. class CommunicationHandler;
  30.  
  31. //! AIProxy listener
  32. struct IAIProxyListener
  33. {
  34.         virtual ~IAIProxyListener() {}
  35.         virtual void OnAIProxyEnabled(bool bEnabled) = 0;
  36. };
  37.  
  38. struct IFireController
  39. {
  40.         virtual ~IFireController(){}
  41.         virtual bool RequestFire(bool bFire) = 0;
  42.         virtual void UpdateTargetPosAI(const Vec3& pos) = 0;
  43. };
  44.  
  45. class CAIProxy
  46.         : public IAIActorProxy
  47.           , public IWeaponEventListener
  48. {
  49.         friend class CAIProxyManager;
  50.  
  51. public:
  52.         //------------------  IWeaponEventListener
  53.         virtual void OnShoot(IWeapon* pWeapon, EntityId shooterId, EntityId ammoId, IEntityClass* pAmmoType,
  54.                              const Vec3& pos, const Vec3& dir, const Vec3& vel);
  55.         virtual void OnStartFire(IWeapon* pWeapon, EntityId shooterId)                            {};
  56.         virtual void OnFireModeChanged(IWeapon* pWeapon, int currentFireMode)                     {};
  57.         virtual void OnStopFire(IWeapon* pWeapon, EntityId shooterId)                             {};
  58.         virtual void OnStartReload(IWeapon* pWeapon, EntityId shooterId, IEntityClass* pAmmoType) {};
  59.         virtual void OnEndReload(IWeapon* pWeapon, EntityId shooterId, IEntityClass* pAmmoType)   {};
  60.         virtual void OnSetAmmoCount(IWeapon* pWeapon, EntityId shooterId)                         {};
  61.         virtual void OnOutOfAmmo(IWeapon* pWeapon, IEntityClass* pAmmoType)                       {};
  62.         virtual void OnReadyToFire(IWeapon* pWeapon)                                              {};
  63.         virtual void OnPickedUp(IWeapon* pWeapon, EntityId actorId, bool destroyed)               {};
  64.         virtual void OnDropped(IWeapon* pWeapon, EntityId actorId);
  65.         virtual void OnMelee(IWeapon* pWeapon, EntityId shooterId);
  66.         virtual void OnStartTargetting(IWeapon* pWeapon) {}
  67.         virtual void OnStopTargetting(IWeapon* pWeapon)  {}
  68.         virtual void OnSelected(IWeapon* pWeapon, bool selected);
  69.         virtual void OnEndBurst(IWeapon* pWeapon, EntityId shooterId);
  70.         //------------------  ~IWeaponEventListener
  71.  
  72.         //------------------  IAIActorProxy
  73.         virtual int                      Update(SOBJECTSTATE& state, bool bFullUpdate);
  74.         virtual bool                     CheckUpdateStatus();
  75.         virtual void                     EnableUpdate(bool enable);
  76.         virtual bool                     IsEnabled() const;
  77.         virtual int                      GetAlertnessState() const;
  78.         virtual void                     SetAlertnessState(int alertness);
  79.         virtual bool                     IsCurrentBehaviorExclusive() const;
  80. #ifdef USE_DEPRECATED_AI_CHARACTER_SYSTEM
  81.         virtual bool                     SetCharacter(const char* character, const char* behaviour = NULL);
  82.         virtual const char*              GetCharacter();
  83. #endif
  84.         virtual void                     QueryBodyInfo(SAIBodyInfo& bodyInfo);
  85.         virtual bool                     QueryBodyInfo(const SAIBodyInfoQuery& query, SAIBodyInfo& bodyInfo);
  86.         virtual void                     QueryWeaponInfo(SAIWeaponInfo& weaponInfo);
  87.         virtual EntityId                 GetLinkedDriverEntityId();
  88.         virtual bool                     IsDriver();
  89.         virtual EntityId                 GetLinkedVehicleEntityId();
  90.         virtual bool                     GetLinkedVehicleVisionHelper(Vec3& outHelperPos) const;
  91.         virtual void                     Reset(EObjectResetType type);
  92.  
  93.         virtual IAICommunicationHandler* GetCommunicationHandler();
  94.  
  95.         virtual bool                     BecomeAggressiveToAgent(EntityId agentID);
  96.  
  97.         // This will internally keep a counter to allow stacking of such commands
  98.         virtual void                      SetForcedExecute(bool forced);
  99.         virtual bool                      IsForcedExecute() const;
  100.  
  101.         virtual void                      Serialize(TSerialize ser);
  102.         virtual IPhysicalEntity*          GetPhysics(bool wantCharacterPhysics = false);
  103.         virtual void                      DebugDraw(int iParam = 0);
  104.         virtual void                      GetWorldBoundingRect(Vec3& FL, Vec3& FR, Vec3& BL, Vec3& BR, float extra = 0) const;
  105.         virtual bool                      SetAGInput(EAIAGInput input, const char* value, const bool isUrgent = false);
  106.         virtual bool                      ResetAGInput(EAIAGInput input);
  107.         virtual bool                      IsSignalAnimationPlayed(const char* value);
  108.         virtual bool                      IsActionAnimationStarted(const char* value);
  109.         virtual bool                      IsAnimationBlockingMovement() const;
  110.         virtual EActorTargetPhase         GetActorTargetPhase() const;
  111.         virtual void                      PlayAnimationAction(const struct IAIAction* pAction, int goalPipeId);
  112.         virtual void                      AnimationActionDone(bool succeeded);
  113.         virtual bool                      IsPlayingSmartObjectAction() const;
  114.         virtual int                       GetAndResetShotBulletCount() { int ret = m_shotBulletCount; m_shotBulletCount = 0; return ret; } // Only used in firecommand
  115.         virtual void                      EnableWeaponListener(const EntityId weaponId, bool needsSignal);
  116.         virtual void                      UpdateMind(SOBJECTSTATE& state);
  117.         virtual bool                      IsDead() const;
  118.         virtual float                     GetActorHealth() const;
  119.         virtual float                     GetActorMaxHealth() const;
  120.         virtual int                       GetActorArmor() const;
  121.         virtual int                       GetActorMaxArmor() const;
  122.         virtual bool                      GetActorIsFallen() const;
  123.         virtual IWeapon*                  QueryCurrentWeapon(EntityId& currentWeaponId);
  124.         virtual IWeapon*                  GetCurrentWeapon(EntityId& currentWeaponId) const;
  125.         virtual const AIWeaponDescriptor& GetCurrentWeaponDescriptor() const;
  126.         virtual IWeapon*                  GetSecWeapon(const ERequestedGrenadeType prefGrenadeType = eRGT_ANY, ERequestedGrenadeType* pReturnedGrenadeType = NULL, EntityId* const pSecondaryWeaponId = NULL) const;
  127.         virtual bool                      GetSecWeaponDescriptor(AIWeaponDescriptor& outDescriptor, ERequestedGrenadeType prefGrenadeType = eRGT_ANY) const;
  128.         virtual void                      SetUseSecondaryVehicleWeapon(bool bUseSecondary);
  129.         virtual bool                      IsUsingSecondaryVehicleWeapon() const { return m_UseSecondaryVehicleWeapon; }
  130.         virtual IEntity*                  GetGrabbedEntity() const;
  131.         virtual bool                      IsUpdateAlways() const                { return m_UpdateAlways; }
  132.         virtual bool                      IfShouldUpdate()                      { return m_pGameObject->ShouldUpdate(); }
  133.         virtual bool                      IsAutoDeactivated() const             { return m_autoDeactivated; };
  134.         virtual void                      NotifyAutoDeactivated()               { m_autoDeactivated = true; };
  135.  
  136.         virtual const char*               GetVoiceLibraryName(const bool useForcedDefaultName = false) const;
  137.         virtual const char*               GetCommunicationConfigName() const;
  138.         virtual const float               GetFmodCharacterTypeParam() const;
  139.         virtual const char*               GetBehaviorSelectionTreeName() const;
  140.         virtual const char*               GetNavigationTypeName() const;
  141.  
  142.         virtual bool                      PredictProjectileHit(float vel, Vec3& posOut, Vec3& dirOut, float& speedOut, Vec3* pTrajectoryPositions = 0, unsigned int* trajectorySizeInOut = 0, Vec3* pTrajectoryVelocities = 0);
  143.         virtual bool                      PredictProjectileHit(const Vec3& throwDir, float vel, Vec3& posOut, float& speedOut, ERequestedGrenadeType prefGrenadeType = eRGT_ANY,
  144.                                                                Vec3* pTrajectoryPositions = 0, unsigned int* trajectorySizeInOut = 0, Vec3* pTrajectoryVelocities = 0);
  145.         virtual void                      GetReadabilityBlockingParams(const char* text, float& time, int& id);
  146.         virtual const char*               GetCurrentBehaviorName() const;
  147.         virtual const char*               GetPreviousBehaviorName() const;
  148.         virtual void                      UpdateMeAlways(bool doUpdateMeAlways);
  149.         virtual void                      ResendTargetSignalsNextFrame();
  150.         //------------------  ~IAIActorProxy
  151.  
  152.         void        SetMinFireTime(float fTime) { m_fMinFireTime = fTime; }
  153.         CAIHandler* GetAIHandler()              { return m_pAIHandler; }
  154.         void        AddListener(IAIProxyListener* pListener);
  155.         void        RemoveListener(IAIProxyListener* pListener);
  156.         CTimeValue  GetEstimatedAGAnimationLength(EAIAGInput input, const char* value);
  157.  
  158.         void        SetBehaviour(const char* szBehavior, const IAISignalExtraData* pData = 0);
  159.  
  160.         void        GetMemoryUsage(ICrySizer* pSizer) const
  161.         {
  162.                 pSizer->AddObject(this, sizeof(*this));
  163.         }
  164.  
  165.         enum AimQueryMode
  166.         {
  167.                 QueryAimFromMovementController,
  168.                 OverriddenAndAiming,
  169.                 OverriddenAndNotAiming,
  170.  
  171.                 AimQueryModeCount,
  172.                 FirstAimQueryMode = 0,
  173.         };
  174.  
  175.         void SetAimQueryMode(const AimQueryMode mode) { m_aimQueryMode = mode; }
  176.  
  177. protected:
  178.         // (MATT) We want to keep these in sync with the m_aiProxyMap structure, so keep access restricted {2009/04/06}
  179.         CAIProxy(IGameObject* pGameObject);
  180.         virtual ~CAIProxy(void);
  181.  
  182.         void             OnReused(IEntity* pEntity, SEntitySpawnParams& params);
  183.  
  184.         void             ReloadScriptProperties();
  185.  
  186.         void             RemoveWeaponListener(IWeapon* pWeapon);
  187.         IWeapon*         GetWeaponFromId(EntityId entityId);
  188.  
  189.         IActor*          GetActor() const;
  190.         void             SendSignal(int signalID, const char* szText, IEntity* pSender, const IAISignalExtraData* pData, uint32 crc = 0u);
  191.         void             UpdateAuxSignal(SOBJECTSTATE& state);
  192.         IFireController* GetFireController(uint32 controllerNum = 0);
  193.         void             UpdateShooting(const SOBJECTSTATE& state, bool isAlive);
  194.  
  195.         bool             IsInCloseMeleeRange(IAIObject* aiObject, IAIActor* aiActor) const;
  196.         void             UpdateCurrentWeapon();
  197.  
  198.         static float     LinearInterp(float x, float k, float A, float B, float C);
  199.         static float     QuadraticInterp(float x, float k, float A, float B, float C);
  200.         static float     GetTofPointOnParabula(const Vec3& A, const Vec3& V, const Vec3& P, float g);
  201.         static Vec3      GetPointOnParabula(const Vec3& A, const Vec3& V, float t, float g);
  202.         static bool      IntersectSweptSphereWrapper(Vec3* hitPos, float& hitDist, const Lineseg& lineseg, float radius, IPhysicalEntity** pSkipEnts = 0, int nSkipEnts = 0, int additionalFilter = 0);
  203.  
  204.         // (MATT) We currently have no way to serialise this. It may be possible to recovery from the entity. Currently must keep between serialisations {2009/04/30}
  205.         IGameObject* m_pGameObject;
  206.  
  207.         // (MATT) Is deleted/recreated across serialisations {2009/04/30}
  208.         CAIHandler* m_pAIHandler;
  209.  
  210.         bool        m_firing;
  211.         bool        m_firingSecondary;
  212.  
  213.         string      m_commConfigName;
  214.         string      m_voiceLibrary;
  215.         string      m_voiceLibraryWhenForcingTest;
  216.         float       m_FmodCharacterTypeParam;
  217.         string      m_behaviorSelectionTreeName;
  218.         string      m_agentTypeName;
  219.  
  220.         int8        m_forcedExecute;
  221.  
  222.         // weapon/shooting related
  223.         float m_fMinFireTime;     //forces a minimum time for fire trigger to stay on
  224.         bool  m_WeaponShotIsDone; //if weapon did shot during last update
  225.         bool  m_NeedsShootSignal;
  226.         bool  m_CurrentWeaponCanFire;
  227.  
  228.         // vehicle weapon fire related
  229.         bool               m_UseSecondaryVehicleWeapon;
  230.  
  231.         int                m_shotBulletCount;
  232.         CTimeValue         m_lastShotTime;
  233.  
  234.         bool               m_IsDisabled;
  235.         bool               m_UpdateAlways;
  236.         bool               m_autoDeactivated;
  237.  
  238.         EntityId           m_currentWeaponId;
  239.         int                m_currentWeaponFiremodeIndex;
  240.         AIWeaponDescriptor m_currentWeaponDescriptor;
  241.  
  242.         // (MATT) Mutable for cached lookup {2009/01/27}
  243.         mutable IActor* m_pIActor;
  244.  
  245.         // (MATT) Not serialised, which might be a source of bugs. {2009/04/30}
  246.         int      m_animActionGoalPipeId;
  247.         EntityId m_weaponListenerId;
  248.  
  249.         // Listeners
  250.         typedef std::vector<IAIProxyListener*> TListeners;
  251.         TListeners                            m_listeners;
  252.  
  253.         std::unique_ptr<CommunicationHandler> m_commHandler;
  254.  
  255.         AimQueryMode                          m_aimQueryMode;
  256. };
  257.  
  258. #endif // __AIProxy_H__
  259.  
downloadAIProxy.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