BVB Source Codes

CRYENGINE Show FlowClipCaptureNodes.cpp Source code

Return Download CRYENGINE: download FlowClipCaptureNodes.cpp Source code - Download CRYENGINE Source code - Type:.cpp
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. /*************************************************************************
  4.    -------------------------------------------------------------------------
  5.    Description: Node to record in-game video clips.
  6.  
  7.    -------------------------------------------------------------------------
  8.    History:
  9.  
  10. *************************************************************************/
  11.  
  12. #include "StdAfx.h"
  13.  
  14. #include <CryCore/Platform/IPlatformOS.h>
  15. #include <CryString/UnicodeFunctions.h>
  16. #include <CryFlowGraph/IFlowBaseNode.h>
  17.  
  18. // ------------------------------------------------------------------------
  19. class CClipCaptureManagement : public CFlowBaseNode<eNCT_Singleton>
  20. {
  21. public:
  22.         CClipCaptureManagement(SActivationInfo* pActInfo)
  23.         {
  24.         }
  25.  
  26.         ~CClipCaptureManagement()
  27.         {
  28.         }
  29.  
  30.         void Serialize(SActivationInfo*, TSerialize ser)
  31.         {
  32.         }
  33.  
  34.         void GetMemoryUsage(ICrySizer* s) const
  35.         {
  36.                 s->Add(*this);
  37.         }
  38.  
  39.         enum EInputs
  40.         {
  41.                 eI_Capture = 0,
  42.                 eI_DurationBefore,
  43.                 eI_DurationAfter,
  44.                 eI_ClipId,            // in Xbox One this is the MagicMomentID
  45.                 eI_LocalizedClipName, // in Xbox One this text is shown in the Toast message
  46.                 eI_Metadata,
  47.         };
  48.  
  49.         enum EOutputs
  50.         {
  51.                 eO_BeganCapture = 0,
  52.                 eO_Error,
  53.         };
  54.  
  55.         virtual void GetConfiguration(SFlowNodeConfig& config)
  56.         {
  57.                 static const SInputPortConfig inputs[] = {
  58.                         InputPortConfig_AnyType("Capture",           _HELP("Begins Capturing a Clip")),
  59.                         InputPortConfig<float>("DurationBefore",     20.0f,                                                                                                               _HELP("Record that many seconds before the Capture input is triggered")),
  60.                         InputPortConfig<float>("DurationAftere",     10.0f,                                                                                                               _HELP("Record that many seconds after the Capture input is triggered")),
  61.                         InputPortConfig<string>("ClipName",          _HELP("In XboxOne: MagicMoment ID used to look up the description string entered throuhg the Xbox Developr Portal")),
  62.                         InputPortConfig<string>("LocalizedClipName", _HELP("In XboxOne: Clip's Name shown during the Toast pop up")),
  63.                         InputPortConfig<string>("Metadata",          _HELP("Optional. Use it for instance to tag clips")),
  64.                         { 0 }
  65.                 };
  66.  
  67.                 static const SOutputPortConfig outputs[] = {
  68.                         OutputPortConfig_Void("BeganCapture", _HELP("The clip's capture has begun")),
  69.                         OutputPortConfig_Void("Error",        _HELP("An error happened during the capturing process")),
  70.                         { 0 }
  71.                 };
  72.  
  73.                 config.pInputPorts = inputs;
  74.                 config.pOutputPorts = outputs;
  75.                 config.sDescription = _HELP("Allows capturing clips while the game is running and (in XboxOne) save them locally or in the cloud");
  76.                 config.SetCategory(EFLN_APPROVED);
  77.         }
  78.  
  79. #define ENABLE_GAMEDVR_NODE
  80.         // Note: Be aware that the node may be placed in the levels in such a way that all users get a similar
  81.         // recording or the same user gets many similar recordings. This may be unacceptable. In case you want to
  82.         // disable video clip recording via flow graph nodes w/o removing the nodes,
  83.         // please comment out #define ENABLE_GAMEDVR_NODE (above this comment)
  84.  
  85.         void ProcessEvent(EFlowEvent event, SActivationInfo* pActInfo)
  86.         {
  87. #ifdef ENABLE_GAMEDVR_NODE
  88.                 switch (event)
  89.                 {
  90.                 case eFE_Activate:
  91.                         {
  92.                                 if (IPlatformOS::IClipCaptureOS* pClipCapture = gEnv->pSystem->GetPlatformOS()->GetClipCapture())
  93.                                 {
  94.                                         if (pActInfo && IsPortActive(pActInfo, eI_Capture))
  95.                                         {
  96.                                                 const IPlatformOS::IClipCaptureOS::SSpan span(GetPortFloat(pActInfo, eI_DurationBefore), GetPortFloat(pActInfo, eI_DurationAfter));
  97.                                                 const string& clipName = GetPortString(pActInfo, eI_ClipId);
  98.                                                 const string& toast = GetPortString(pActInfo, eI_LocalizedClipName);
  99.                                                 const string& metadata = GetPortString(pActInfo, eI_Metadata);
  100.  
  101.                                                 string localizedToast;
  102.                                                 wstring wideToast;
  103.                                                 gEnv->pSystem->GetLocalizationManager()->LocalizeString(toast, localizedToast);
  104.                                                 Unicode::Convert(wideToast, localizedToast);
  105.  
  106.                                                 IPlatformOS::IClipCaptureOS::SClipTextInfo clipTextInfo(
  107.                                                   clipName.c_str(),
  108.                                                   wideToast.c_str(),
  109.                                                   metadata.c_str());
  110.  
  111.                                                 const bool ok = pClipCapture->RecordClip(clipTextInfo, span);
  112.  
  113.                                                 ActivateOutput(pActInfo, ok ? eO_BeganCapture : eO_Error, true);
  114.                                         }
  115.                                 }
  116.                         }
  117.                 }
  118. #endif
  119.         }
  120.  
  121. #undef ENABLE_GAMEDVR_NODE
  122.  
  123. };
  124.  
  125. REGISTER_FLOW_NODE("Video:ClipCapture", CClipCaptureManagement);
  126.  
downloadFlowClipCaptureNodes.cpp 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