BVB Source Codes

CRYENGINE Show GameplayRecorder.h Source code

Return Download CRYENGINE: download GameplayRecorder.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. /*************************************************************************
  4.    -------------------------------------------------------------------------
  5.    $Id$
  6.    $DateTime$
  7.    Description: Implementation of the IGameplayRecorder interface.
  8.  
  9.    -------------------------------------------------------------------------
  10.    History:
  11.    - 22:1:2007   18:53 : Created by Marcio Martins
  12.  
  13. *************************************************************************/
  14. #ifndef __GAMEPLAYRECORDER_H__
  15. #define __GAMEPLAYRECORDER_H__
  16.  
  17. #if _MSC_VER > 1000
  18.         #pragma once
  19. #endif
  20.  
  21. #include <CryGame/IGameFramework.h>
  22. #include "IGameplayRecorder.h"
  23. #include "IMetadataRecorder.h"
  24.  
  25. #include "CompositeData.h"
  26.  
  27. enum EDataTags4CC
  28. {
  29.         eDT_frame     = 'fram',
  30.         eDT_actor     = 'actr',
  31.         eDT_entity    = 'entt',
  32.         eDT_name      = 'name',
  33.         eDT_type      = 'type',
  34.         eDT_health    = 'hlth',
  35.         eDT_armor     = 'armr',
  36.         eDT_isgod     = 'igod',
  37.         eDT_3rdperson = 'p3rd',
  38.         eDT_item      = 'item',
  39.         eDT_posi      = 'posi',
  40.         eDT_weapon    = 'weap',
  41.         eDT_ammocount = 'ammo',
  42.         eDT_firemode  = 'fire',
  43.         eDT_ammotype  = 'ammt',
  44.         eDT_position  = 'pos0',
  45. };
  46.  
  47. class CGameplayRecorder : public IGameplayRecorder
  48. {
  49. public:
  50.         CGameplayRecorder(CCryAction* pGameFramework);
  51.         virtual ~CGameplayRecorder();
  52.  
  53.         void Init();
  54.         void Update(float frameTime);
  55.         void Release();
  56.         void GetMemoryStatistics(ICrySizer* s);
  57.  
  58.         // IGameplayRecorder
  59.         void                               RegisterListener(IGameplayListener* pGameplayListener);
  60.         void                               UnregisterListener(IGameplayListener* pGameplayListener);
  61.         virtual IGameStateRecorder*        EnableGameStateRecorder(bool bEnable, IGameplayListener* pGameplayListener, bool bRecording);
  62.         inline virtual IGameStateRecorder* GetIGameStateRecorder()   { return m_pGameStateRecorder; }
  63.  
  64.         virtual CTimeValue                 GetSampleInterval() const { return m_sampleinterval; };
  65.  
  66.         void                               Event(IEntity* pEntity, const GameplayEvent& event);
  67.  
  68.         void                               OnGameData(const IMetadata* pGameData);
  69.         //~IGameplayRecorder
  70. private:
  71.         CCryAction*                     m_pGameFramework;
  72.  
  73.         std::vector<IGameplayListener*> m_listeners;
  74.         CTimeValue                      m_lastdiscreet;
  75.         CTimeValue                      m_sampleinterval;
  76.  
  77.         IGameStateRecorder*             m_pGameStateRecorder;
  78.  
  79.         IMetadataRecorderPtr            m_pMetadataRecorder;
  80.  
  81.         class CExampleMetadataListener : public IMetadataListener
  82.         {
  83.         public:
  84.                 CExampleMetadataListener()
  85.                 {
  86.                         REGISTER_COMMAND("gamedata_record", GameDataRecord, VF_NULL, "");
  87.                         REGISTER_COMMAND("gamedata_playback", GameDataPlayback, VF_NULL, "");
  88.                         REGISTER_COMMAND("gamedata_stop_record_or_playback", GameDataStopRecordOrPlayback, VF_NULL, "");
  89.                 }
  90.  
  91.                 // IMetadataListner
  92.                 void OnData(const IMetadata* metadata);
  93.  
  94.                 virtual ~CExampleMetadataListener(){}
  95.                 void RecordGameData();
  96.  
  97.         private:
  98.                 static inline void KeyToString(uint32 key, char* buffer, size_t bufferSize)
  99.                 {
  100.                         bool isAlnum = true;
  101.                         int gotNull = 0;
  102.                         for (int i = 0; i < 4; i++)
  103.                         {
  104.                                 char c = (key >> (8 * i)) & 0xff;
  105.                                 if (!c)
  106.                                         gotNull++;
  107.                                 else if (gotNull)
  108.                                         isAlnum = false;
  109.                                 else
  110.                                         isAlnum &= (isprint(int(c)) != 0);
  111.                         }
  112.  
  113.                         if (isAlnum)
  114.                         {
  115.                                 for (int i = 0; i < 4 - gotNull; i++)
  116.                                         buffer[3 - i - gotNull] = (key >> (8 * i)) & 0xff;
  117.                                 buffer[4 - gotNull] = 0;
  118.                         }
  119.                         else
  120.                         {
  121.                                 cry_sprintf(buffer, bufferSize, "0x%.8x", key);
  122.                         }
  123.                 }
  124.  
  125.                 static inline string KeyToString(uint32 key)
  126.                 {
  127.                         char buffer[16];
  128.                         KeyToString(key, buffer, sizeof(buffer));
  129.                         return buffer;
  130.                 }
  131.  
  132.                 static void DumpMetadata(const IMetadata* metadata, const size_t ntabs)
  133.                 {
  134.                         string tabs;
  135.                         for (size_t i = 0; i < ntabs; ++i)
  136.                                 tabs += ' ';
  137.                         string tag = KeyToString(metadata->GetTag());
  138.                         string typ = KeyToString(metadata->GetValueType());
  139.                         CryLog("%stag=%s, type=%s", tabs.c_str(), tag.c_str(), typ.c_str());
  140.                         for (size_t i = 0; i < metadata->GetNumFields(); ++i)
  141.                                 DumpMetadata(metadata->GetFieldByIndex(i), ntabs + 1);
  142.                 }
  143.  
  144.                 static void GameDataRecord(IConsoleCmdArgs* args)
  145.                 {
  146.                         if (args->GetArgCount() != 2)
  147.                                 return;
  148.  
  149.                         CGameplayRecorder* pRecorder = static_cast<CGameplayRecorder*>(CCryAction::GetCryAction()->GetIGameplayRecorder());
  150.                         if (!pRecorder->m_pMetadataRecorder->InitSave(args->GetArg(1)))
  151.                                 GameWarning("MetadataRecorder::InitSave failed");
  152.                 }
  153.  
  154.                 static void GameDataPlayback(IConsoleCmdArgs* args)
  155.                 {
  156.                         if (args->GetArgCount() != 2)
  157.                                 return;
  158.  
  159.                         CGameplayRecorder* pRecorder = static_cast<CGameplayRecorder*>(CCryAction::GetCryAction()->GetIGameplayRecorder());
  160.                         if (!pRecorder->m_pMetadataRecorder->InitLoad(args->GetArg(1)))
  161.                                 GameWarning("MetadataRecorder::InitLoad failed");
  162.  
  163.                         while (pRecorder->m_pMetadataRecorder->Playback(&pRecorder->m_example));
  164.                 }
  165.  
  166.                 static void GameDataStopRecordOrPlayback(IConsoleCmdArgs* args)
  167.                 {
  168.                         CGameplayRecorder* pRecorder = static_cast<CGameplayRecorder*>(CCryAction::GetCryAction()->GetIGameplayRecorder());
  169.                         pRecorder->m_pMetadataRecorder->Reset();
  170.                 }
  171.         };
  172.  
  173.         CExampleMetadataListener m_example;
  174. };
  175.  
  176. #endif //__GAMEPLAYRECORDER_H__
  177.  
downloadGameplayRecorder.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