BVB Source Codes

CRYENGINE Show SerializeWriterXMLCPBin.h Source code

Return Download CRYENGINE: download SerializeWriterXMLCPBin.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. #ifndef __SERIALIZEWRITERXMLCPBIN_H__
  4. #define __SERIALIZEWRITERXMLCPBIN_H__
  5.  
  6. #pragma once
  7.  
  8. #include <CrySystem/ISystem.h>
  9. #include <CrySystem/ITimer.h>
  10. #include <CrySystem/IValidator.h>
  11. #include <CryNetwork/SimpleSerialize.h>
  12. #include "XMLCPBin/Writer/XMLCPB_WriterInterface.h"
  13.  
  14. class CSerializeWriterXMLCPBin : public CSimpleSerializeImpl<false, eST_SaveGame>
  15. {
  16. public:
  17.         CSerializeWriterXMLCPBin(const XMLCPB::CNodeLiveWriterRef& nodeRef, XMLCPB::CWriterInterface& binWriter);
  18.         ~CSerializeWriterXMLCPBin();
  19.  
  20.         template<class T_Value>
  21.         bool Value(const char* name, T_Value& value)
  22.         {
  23.                 AddValue(name, value);
  24.                 return true;
  25.         }
  26.  
  27.         template<class T_Value, class T_Policy>
  28.         bool Value(const char* name, T_Value& value, const T_Policy& policy)
  29.         {
  30.                 return Value(name, value);
  31.         }
  32.  
  33.         bool Value(const char* name, CTimeValue value);
  34.         bool Value(const char* name, ScriptAnyValue& value);
  35.         bool Value(const char* name, XmlNodeRef& value);
  36.         bool ValueByteArray(const char* name, const uint8* data, uint32 len);
  37.  
  38.         void BeginGroup(const char* szName);
  39.         bool BeginOptionalGroup(const char* szName, bool condition);
  40.         void EndGroup();
  41.  
  42. private:
  43.         CTimeValue                              m_curTime;
  44.         std::vector<XMLCPB::CNodeLiveWriterRef> m_nodeStack;  // TODO: look to get rid of this. it should be useless, because can access all necesary data from the XMLCPBin object
  45.         std::vector<IScriptTable*>              m_savedTables;
  46.         std::vector<const char*>                m_luaSaveStack;
  47.         XMLCPB::CWriterInterface&               m_binWriter;
  48.  
  49.         void RecursiveAddXmlNodeRef(XMLCPB::CNodeLiveWriterRef BNode, XmlNodeRef xmlNode);
  50.  
  51.         //////////////////////////////////////////////////////////////////////////
  52.         ILINE XMLCPB::CNodeLiveWriterRef& CurNode()
  53.         {
  54.                 assert(!m_nodeStack.empty());
  55.                 if (m_nodeStack.empty())
  56.                 {
  57.                         CryWarning(VALIDATOR_MODULE_SYSTEM, VALIDATOR_ERROR, "CSerializeWriterXMLCPBin: !Trying to access a node from the nodeStack, but the stack is empty. Savegame will be corrupted");
  58.                         static XMLCPB::CNodeLiveWriterRef temp = m_binWriter.GetRoot()->AddChildNode("Error");
  59.                         return temp;
  60.                 }
  61.                 return m_nodeStack.back();
  62.         }
  63.  
  64.         //////////////////////////////////////////////////////////////////////////
  65.         template<class T>
  66.         void AddValue(const char* name, const T& value)
  67.         {
  68.                 XMLCPB::CNodeLiveWriterRef& curNode = CurNode();
  69.  
  70. #ifndef _RELEASE
  71.                 if (GetISystem()->IsDevMode() && curNode.IsValid())
  72.                 {
  73.                         if (curNode->HaveAttr(name))
  74.                         {
  75.                                 assert(0);
  76.                                 CryWarning(VALIDATOR_MODULE_SYSTEM, VALIDATOR_WARNING, "!Duplicate tag Value( \"%s\" ) in Group %s", name, GetStackInfo());
  77.                         }
  78.                 }
  79. #endif
  80.  
  81.                 if (!IsDefaultValue(value))
  82.                 {
  83.                         curNode->AddAttr(name, value);
  84.                 }
  85.         }
  86.  
  87.         //////////////////////////////////////////////////////////////////////////
  88.         void AddValue(const char* name, const SSerializeString& value)
  89.         {
  90.                 AddValue(name, value.c_str());
  91.         }
  92.  
  93.         void AddValue(const char* name, const SNetObjectID& value)
  94.         {
  95.                 assert(false);
  96.         }
  97.  
  98.         //////////////////////////////////////////////////////////////////////////
  99.         template<class T>
  100.         void AddTypedValue(const char* name, const T& value, const char* type)
  101.         {
  102.                 assert(false);    // not needed for savegames, apparently
  103.                 //              if (!IsDefaultValue(value))
  104.                 //              {
  105.                 //                      XMLCPB::CNodeLiveWriterRef newNode = CreateNodeNamed(name);
  106.                 //                      newNode->AddAttr("v",value);
  107.                 //                      newNode->AddAttr("t",type);
  108.                 //              }
  109.         }
  110.  
  111.         void WriteTable(XMLCPB::CNodeLiveWriterRef addTo, SmartScriptTable tbl, bool bCheckEntityOnScript);
  112.         void ScriptValue(XMLCPB::CNodeLiveWriterRef addTo, const char* tag, const char* name, const ScriptAnyValue& value, bool bCheckEntityOnScript);
  113.  
  114.         // Used for printing current stack info for warnings.
  115.         const char* GetStackInfo() const;
  116.         const char* GetLuaStackInfo() const;
  117.  
  118.         static bool ShouldSkipValue(const char* name, const ScriptAnyValue& value);
  119.         static bool IsVector(SmartScriptTable tbl);
  120.         bool        IsEntity(SmartScriptTable tbl, EntityId& entityId);
  121.  
  122.         //////////////////////////////////////////////////////////////////////////
  123.         // Check For Defaults.
  124.         //////////////////////////////////////////////////////////////////////////
  125.         bool IsDefaultValue(bool v) const                        { return v == false; };
  126.         bool IsDefaultValue(float v) const                       { return v == 0; };
  127.         bool IsDefaultValue(int8 v) const                        { return v == 0; };
  128.         bool IsDefaultValue(uint8 v) const                       { return v == 0; };
  129.         bool IsDefaultValue(int16 v) const                       { return v == 0; };
  130.         bool IsDefaultValue(uint16 v) const                      { return v == 0; };
  131.         bool IsDefaultValue(int32 v) const                       { return v == 0; };
  132.         bool IsDefaultValue(uint32 v) const                      { return v == 0; };
  133.         bool IsDefaultValue(int64 v) const                       { return v == 0; };
  134.         bool IsDefaultValue(uint64 v) const                      { return v == 0; };
  135.         bool IsDefaultValue(const Vec2& v) const                 { return v.x == 0 && v.y == 0; };
  136.         bool IsDefaultValue(const Vec3& v) const                 { return v.x == 0 && v.y == 0 && v.z == 0; };
  137.         bool IsDefaultValue(const Ang3& v) const                 { return v.x == 0 && v.y == 0 && v.z == 0; };
  138.         bool IsDefaultValue(const Quat& v) const                 { return v.w == 1.0f && v.v.x == 0 && v.v.y == 0 && v.v.z == 0; };
  139.         bool IsDefaultValue(const ScriptAnyValue& v) const       { return false; };
  140.         bool IsDefaultValue(const CTimeValue& v) const           { return v.GetValue() == 0; };
  141.         bool IsDefaultValue(const char* str) const               { return !str || !*str; };
  142.         bool IsDefaultValue(const string& str) const             { return str.empty(); };
  143.         bool IsDefaultValue(const SSerializeString& str) const   { return str.empty(); };
  144.         bool IsDefaultValue(const uint8* data, uint32 len) const { return (len <= 0); };
  145.         //////////////////////////////////////////////////////////////////////////
  146.  
  147. };
  148.  
  149. #endif
  150.  
downloadSerializeWriterXMLCPBin.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