BVB Source Codes

CRYENGINE Show TagDefinitionXml.h Source code

Return Download CRYENGINE: download TagDefinitionXml.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. #ifndef __TAG_DEFINITION_XML__H__
  4. #define __TAG_DEFINITION_XML__H__
  5.  
  6. class CTagDefinition;
  7.  
  8. //////////////////////////////////////////////////////////////////////////
  9. // Currently this is not part of the save interface, needs some more thought!
  10. // This is mainly here so that saving keeps the loaded import structure.
  11. struct STagDefinitionImportsInfo
  12. {
  13.         void SetFilename(const char* const filename)
  14.         {
  15.                 assert(filename);
  16.                 assert(filename[0]);
  17.  
  18.                 m_filename = filename;
  19.         };
  20.  
  21.         const char* GetFilename() const
  22.         {
  23.                 return m_filename;
  24.         }
  25.  
  26.         void Clear()
  27.         {
  28.                 m_filter.clear();
  29.                 m_imports.clear();
  30.         }
  31.  
  32.         void AddTag(const TagID tagId)
  33.         {
  34.                 if (tagId != TAG_ID_INVALID)
  35.                 {
  36.                         m_filter.push_back(tagId);
  37.                 }
  38.         }
  39.  
  40.         STagDefinitionImportsInfo& AddImport(const char* const filename)
  41.         {
  42.                 assert(filename);
  43.                 assert(filename[0]);
  44.  
  45.                 m_imports.push_back(STagDefinitionImportsInfo());
  46.                 STagDefinitionImportsInfo& importsInfo = m_imports.back();
  47.                 importsInfo.SetFilename(filename);
  48.                 return importsInfo;
  49.         }
  50.  
  51.         const STagDefinitionImportsInfo& GetImport(const size_t index) const
  52.         {
  53.                 return m_imports[index];
  54.         }
  55.  
  56.         size_t GetImportCount() const
  57.         {
  58.                 return m_imports.size();
  59.         }
  60.  
  61.         void FlattenImportsInfo(std::vector<const STagDefinitionImportsInfo*>& importsInfoListOut) const
  62.         {
  63.                 importsInfoListOut.push_back(this);
  64.  
  65.                 const size_t importCount = m_imports.size();
  66.                 for (size_t i = 0; i < importCount; ++i)
  67.                 {
  68.                         const STagDefinitionImportsInfo& currentImport = m_imports[i];
  69.                         currentImport.FlattenImportsInfo(importsInfoListOut);
  70.                 }
  71.         }
  72.  
  73.         const STagDefinitionImportsInfo& Find(const TagID tagId) const
  74.         {
  75.                 const STagDefinitionImportsInfo* pFoundImport = FindRec(tagId);
  76.                 if (pFoundImport)
  77.                 {
  78.                         return *pFoundImport;
  79.                 }
  80.  
  81.                 return *this;
  82.         }
  83.  
  84.         bool MapTags(const CTagDefinition& originalTagDef, CTagDefinition& modifiedTagDef)
  85.         {
  86.                 for (int32 filterIndex = m_filter.size() - 1; filterIndex >= 0; --filterIndex)
  87.                 {
  88.                         uint32 mappedTagID = (modifiedTagDef.Find(originalTagDef.GetTagCRC(m_filter[filterIndex])));
  89.                         if (mappedTagID != TAG_ID_INVALID)
  90.                         {
  91.                                 if (m_filter[filterIndex] != mappedTagID)
  92.                                 {
  93.                                         //CryLog("[TAGDEF]: MapTags() (%s): mapping tag %i [%s] to %i [%s]", m_filename, m_filter[filterIndex], originalTagDef.GetTagName(m_filter[filterIndex]), mappedTagID, modifiedTagDef.GetTagName(mappedTagID));
  94.                                 }
  95.                                 m_filter[filterIndex] = mappedTagID;
  96.                         }
  97.                         else
  98.                         {
  99.                                 //CryLog("[TAGDEF]: MapTags() (%s): cannot map tag %i [%s] - will be erased", m_filename, m_filter[filterIndex], originalTagDef.GetTagName(m_filter[filterIndex]));
  100.                                 m_filter.erase(m_filter.begin() + filterIndex);
  101.                         }
  102.                 }
  103.  
  104.                 for (int32 importsIndex = m_imports.size() - 1; importsIndex >= 0; --importsIndex)
  105.                 {
  106.                         m_imports[importsIndex].MapTags(originalTagDef, modifiedTagDef);
  107.                 }
  108.  
  109.                 return true;
  110.         }
  111.  
  112. private:
  113.         bool IsInFilter(const TagID tagId) const
  114.         {
  115.                 const size_t filterCount = m_filter.size();
  116.  
  117.                 for (size_t i = 0; i < filterCount; ++i)
  118.                 {
  119.                         const TagID filterTagId = m_filter[i];
  120.                         const bool found = (filterTagId == tagId);
  121.                         if (found)
  122.                         {
  123.                                 return true;
  124.                         }
  125.                 }
  126.                 return false;
  127.         }
  128.  
  129.         const STagDefinitionImportsInfo* FindRec(const TagID tagId) const
  130.         {
  131.                 const bool isInFilter = IsInFilter(tagId);
  132.                 if (isInFilter)
  133.                 {
  134.                         return this;
  135.                 }
  136.  
  137.                 const size_t importCount = m_imports.size();
  138.                 for (size_t i = 0; i < importCount; ++i)
  139.                 {
  140.                         const STagDefinitionImportsInfo& currentImport = m_imports[i];
  141.                         const STagDefinitionImportsInfo* pFoundImport = currentImport.FindRec(tagId);
  142.                         if (pFoundImport)
  143.                         {
  144.                                 return pFoundImport;
  145.                         }
  146.                 }
  147.  
  148.                 return NULL;
  149.         }
  150.  
  151. private:
  152.         string m_filename;
  153.  
  154.         // A tag guid would be better... as this handles renames but not deletes on the tag definition (although we don't have that operation right now)
  155.         std::vector<TagID>                     m_filter;
  156.  
  157.         std::vector<STagDefinitionImportsInfo> m_imports;
  158. };
  159.  
  160. namespace mannequin
  161. {
  162. bool                       LoadTagDefinition(const char* const filename, CTagDefinition& tagDefinitionOut, bool isTags);
  163.  
  164. XmlNodeRef                 SaveTagDefinition(const CTagDefinition& tagDefinition);
  165.  
  166. STagDefinitionImportsInfo& GetDefaultImportsInfo(const char* const filename);
  167.  
  168. struct STagDefinitionSaveData
  169. {
  170.         string     filename;
  171.         XmlNodeRef pXmlNode;
  172. };
  173. typedef std::vector<STagDefinitionSaveData> TTagDefinitionSaveDataList;
  174. void SaveTagDefinition(const CTagDefinition& tagDefinition, TTagDefinitionSaveDataList& saveDataListOut);
  175.  
  176. void OnDatabaseManagerUnload();
  177. }
  178.  
  179. #endif
  180.  
downloadTagDefinitionXml.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