BVB Source Codes

CRYENGINE Show DialogActorContext.h Source code

Return Download CRYENGINE: download DialogActorContext.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. // -------------------------------------------------------------------------
  4. //  File name:   DialogActorContext.h
  5. //  Version:     v1.00
  6. //  Created:     07/07/2006 by AlexL
  7. //  Compilers:   Visual Studio.NET
  8. //  Description: Instructs an Entity/Actor to play a certain ScriptLine
  9. // -------------------------------------------------------------------------
  10. //  History:
  11. //
  12. ////////////////////////////////////////////////////////////////////////////
  13.  
  14. #ifndef __DIALOGACTORCONTEXT_H__
  15. #define __DIALOGACTORCONTEXT_H__
  16.  
  17. #pragma once
  18.  
  19. #include "DialogScript.h"
  20. #include "DialogSession.h"
  21. #include "DialogCommon.h"
  22. #include <CryEntitySystem/IEntitySystem.h>
  23. #include <IAnimationGraph.h>
  24.  
  25. #define DS_DEBUG_SUPPRESSION
  26. // #undef  DS_DEBUG_SUPPRESSION
  27.  
  28. class CDialogActorContext :
  29.         public _i_reference_target_t,
  30.         public IEntityEventListener,
  31.         public IGoalPipeListener,
  32.         public IAnimationGraphStateListener
  33. {
  34. public:
  35.         CDialogActorContext(CDialogSession* pSession, CDialogScript::TActorID actorID);
  36.         ~CDialogActorContext();
  37.  
  38.         bool                          PlayLine(const CDialogScript::SScriptLine* pLine); // returning false stops the Session!
  39.         bool                          Update(float dt);
  40.  
  41.         void                          BeginSession();
  42.         void                          EndSession();
  43.         bool                          IsAborted() const;
  44.         bool                          IsStillPlaying() const;
  45.         CDialogSession::EAbortReason  GetAbortReason() const { return m_abortReason; }
  46.  
  47.         static const char*            FullSoundName(const string& soundName, bool bWav = true);
  48.         static const char*            GetSoundKey(const string& soundName);
  49.  
  50.         CDialogSystem::ActorContextID GetContextID() const { return m_ContextID; }
  51.  
  52.         static void                   ResetStaticData();
  53.  
  54.         void                          GetMemoryUsage(ICrySizer* pSizer) const;
  55.  
  56.         ILINE bool                    CheckActorFlags(CDialogSession::TActorFlags flag) const
  57.         {
  58.                 return (m_pSession->GetActorFlags(m_actorID) & flag) != 0;
  59.         }
  60.  
  61.         static void                 OnAudioTriggerFinished(SAudioRequestInfo const* const pAudioRequestInfo);
  62.         static const char*          GetClassIdentifier() { return "DialogActorContext"; }
  63.  
  64.         static CDialogActorContext* GetDialogActorContextByAudioCallbackData(SAudioRequestInfo const* const pAudioRequestInfo);
  65.         EntityId                    GetEntityID() const { return m_entityID; }
  66.  
  67. protected:
  68.         // Play an animation action on the entity [AG pr EP]
  69.         bool DoAnimAction(IEntity* pEntity, const string& action, bool bIsSignal, bool bUseEP);
  70.  
  71.         // Play an animation action [AnimGraph Action/Signal] on the entity
  72.         bool DoAnimActionAG(IEntity* pEntity, const char* sAction);
  73.  
  74.         // Play an animation action [Exact Positioning Action/Signal] on the entity
  75.         bool DoAnimActionEP(IEntity* pEntity, const char* sAction);
  76.  
  77.         // Play a facial expression on the entity
  78.         bool DoFacialExpression(IEntity* pEntity, const string& expression, float weight, float fadeTime);
  79.  
  80.         // Instrument pEntity to look at pLookAtEntity
  81.         bool DoLookAt(IEntity* pEntity, IEntity* pLookAtEntity, bool& bTargetReached);
  82.  
  83.         // Handle any sticky lookat
  84.         void DoStickyLookAt();
  85.  
  86.         // Do check wrt. local player
  87.         bool DoLocalPlayerChecks(const float dt);
  88.  
  89.         // IEntityEventListener
  90.         virtual void OnEntityEvent(IEntity* pEntity, SEntityEvent& event);
  91.         // ~IEntityEventListener
  92.  
  93.         // IGoalPipeListener
  94.         virtual void OnGoalPipeEvent(IPipeUser* pPipeUser, EGoalPipeEvent event, int goalPipeId, bool& unregisterListenerAfterEvent);
  95.         // ~IGoalPipeListener
  96.  
  97.         // IAnimationGraphStateListener
  98.         virtual void SetOutput(const char* output, const char* value);
  99.         virtual void QueryComplete(TAnimationGraphQueryID queryID, bool succeeded);
  100.         virtual void DestroyedState(IAnimationGraphState*);
  101.         // ~IAnimationGraphStateListener
  102.  
  103.         void                                              ResetState();
  104.         void                                              CancelCurrent(bool bResetStates = false);
  105.         bool                                              ExecuteAI(int& goalPipeID, const char* signalText, IAISignalExtraData* pExtraData = 0, bool bRegisterAsListener = true);
  106.         void                                              AdvancePhase();
  107.         void                                              StopSound(bool bUnregisterOnly = false);
  108.         void                                              AbortContext(bool bCancel, CDialogSession::EAbortReason reason);
  109.         void                                              ResetAGState();
  110.  
  111.         void                                              UpdateAuxProxyPosition();
  112.  
  113.         ILINE CDialogSession::EDialogAIInterruptBehaviour GetAIBehaviourMode() const
  114.         {
  115.                 return m_pSession->GetAIBehaviourMode();
  116.         }
  117.  
  118.         ILINE bool SessionAllowsLookAt()
  119.         {
  120.                 const bool bAllowed = GetAIBehaviourMode() != CDialogSession::eDIB_InterruptNever;
  121. #ifdef DS_DEBUG_SUPPRESSION
  122.                 if (!bAllowed && m_pCurLine && (m_pCurLine->m_lookatActor != CDialogScript::NO_ACTOR_ID || m_stickyLookAtActorID != CDialogScript::NO_ACTOR_ID))
  123.                 {
  124.                         DiaLOG::Log(DiaLOG::eDebugB, "[DIALOG] CDialogActorContext::Update: %s now=%f actorID=%d line=%d AIMode=%d SuppressingLookAt=%d",
  125.                                     m_pSession->GetDebugName(), m_pSession->GetCurTime(), m_actorID, m_pSession->GetCurrentLine(), (int) GetAIBehaviourMode(), m_pCurLine->m_lookatActor);
  126.                 }
  127. #endif
  128.                 return bAllowed;
  129.         }
  130.  
  131.         ILINE bool SessionAllowsAnim()
  132.         {
  133.                 const bool bAllowed = GetAIBehaviourMode() != CDialogSession::eDIB_InterruptNever;
  134. #ifdef DS_DEBUG_SUPPRESSION
  135.                 if (!bAllowed && m_pCurLine && m_pCurLine->m_anim.empty() == false)
  136.                 {
  137.                         DiaLOG::Log(DiaLOG::eDebugB, "[DIALOG] CDialogActorContext::Update: %s now=%f actorID=%d line=%d AIMode=%d SuppressingAnim='%s'",
  138.                                     m_pSession->GetDebugName(), m_pSession->GetCurTime(), m_actorID, m_pSession->GetCurrentLine(), (int) GetAIBehaviourMode(), m_pCurLine->m_anim.c_str());
  139.                 }
  140. #endif
  141.                 return bAllowed;
  142.         }
  143.  
  144. protected:
  145.         enum EDialogActorContextPhase
  146.         {
  147.                 eDAC_Idle = 0,
  148.                 eDAC_NewLine,
  149.                 eDAC_LookAt,
  150.                 eDAC_Anim,
  151.                 eDAC_ScheduleSoundPlay,  // Schedule sound to play and wait until it really starts
  152.                 eDAC_SoundFacial,
  153.                 eDAC_EndLine,
  154.                 eDAC_Aborted
  155.         };
  156.  
  157.         // TODO: Currently logically grouped. Needs proper space-saving reordering
  158.         CDialogSession*                   m_pSession;
  159.         CDialogScript::TActorID           m_actorID;
  160.         EntityId                          m_entityID;
  161.         const CDialogScript::SScriptLine* m_pCurLine;
  162.         CDialogSystem::ActorContextID     m_ContextID;
  163.  
  164.         IActor*                           m_pIActor;
  165.  
  166.         int                               m_phase;
  167.         bool                              m_bHasScheduled;
  168.         bool                              m_bNeedsCancel;
  169.         bool                              m_bInCancel;
  170.         bool                              m_bIsLocalPlayer; // Whether it's the local player
  171.         bool                              m_bIsAware;
  172.         bool                              m_bIsAwareLooking;
  173.         bool                              m_bIsAwareInRange;
  174.         float                             m_playerAwareTimeOut;
  175.         float                             m_checkPlayerTimeOut;
  176.         CDialogSession::EAbortReason      m_abortReason;
  177.  
  178.         AudioProxyId                      m_SpeechAuxProxy;
  179.  
  180.         // Animation specific
  181.         IAnimationGraphState*  m_pAGState;
  182.         TAnimationGraphQueryID m_queryID;
  183.         bool                   m_bAnimStarted;
  184.         bool                   m_bAnimScheduled;
  185.         bool                   m_bAnimUseAGSignal;
  186.         bool                   m_bAnimUseEP;
  187.         bool                   m_bSoundStopsAnim;
  188.  
  189.         // AI
  190.         bool m_bAbortFromAI;
  191.         int  m_goalPipeID;
  192.         int  m_exPosAnimPipeID;
  193.  
  194.         // Sound specific
  195.         bool  m_bSoundScheduled;
  196.         bool  m_bSoundStarted;
  197.         float m_soundTimeOut;
  198.         float m_soundLength;
  199.  
  200.         int   m_VoiceAttachmentIndex;
  201.         int   m_BoneHeadJointID;
  202.  
  203.         // LookAt specific
  204.         CDialogScript::TActorID m_lookAtActorID;
  205.         CDialogScript::TActorID m_stickyLookAtActorID;
  206.         float                   m_lookAtTimeOut;
  207.         float                   m_animTimeOut;
  208.         bool                    m_bLookAtNeedsReset;
  209.  
  210.         // Facial Expression
  211.         uint32        m_currentEffectorChannelID;
  212.  
  213.         static string m_tempBuffer;
  214. };
  215.  
  216. #endif
  217.  
downloadDialogActorContext.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