BVB Source Codes

CRYENGINE Show VehicleModificationParams.cpp Source code

Return Download CRYENGINE: download VehicleModificationParams.cpp Source code - Download CRYENGINE Source code - Type:.cpp
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. #include "StdAfx.h"
  4. #include "VehicleModificationParams.h"
  5.  
  6. //////////////////////////////////////////////////////////////////////////
  7. struct CVehicleModificationParams::Implementation
  8. {
  9.         typedef std::pair<string, string>              TModificationKey;
  10.         typedef std::map<TModificationKey, XmlNodeRef> TModificationMap;
  11.  
  12.         TModificationMap m_modifications;
  13. };
  14.  
  15. //////////////////////////////////////////////////////////////////////////
  16. CVehicleModificationParams::CVehicleModificationParams()
  17.         : m_pImpl(NULL)
  18. {
  19. }
  20.  
  21. //////////////////////////////////////////////////////////////////////////
  22. CVehicleModificationParams::CVehicleModificationParams(XmlNodeRef xmlVehicleData, const char* modificationName)
  23.         : m_pImpl(NULL)
  24. {
  25.         assert(modificationName != NULL);
  26.         if (modificationName[0] == 0)
  27.         {
  28.                 return;
  29.         }
  30.  
  31.         string mods(modificationName);
  32.  
  33.         int start = 0;
  34.         string modification = mods.Tokenize(",", start);
  35.  
  36.         while (!modification.empty())
  37.         {
  38.                 XmlNodeRef xmlModificationsGroup = xmlVehicleData->findChild("Modifications");
  39.                 if (!xmlModificationsGroup)
  40.                 {
  41.                         GameWarning("Failed to set Modification '%s' because the vehicle doesn't have any modifications", modification.c_str());
  42.                         return;
  43.                 }
  44.  
  45.                 XmlNodeRef xmlModification = FindModificationNodeByName(modification.c_str(), xmlModificationsGroup);
  46.                 if (!xmlModification)
  47.                 {
  48.                         GameWarning("Failed to set Modification '%s' because the vehicle doesn't have that modification", modification.c_str());
  49.                         return;
  50.                 }
  51.  
  52.                 if (m_pImpl == NULL)
  53.                 {
  54.                         m_pImpl = new Implementation();
  55.                 }
  56.  
  57.                 InitModification(xmlModification);
  58.  
  59.                 modification = mods.Tokenize(",", start);
  60.         }
  61. }
  62.  
  63. //////////////////////////////////////////////////////////////////////////
  64. CVehicleModificationParams::~CVehicleModificationParams()
  65. {
  66.         delete m_pImpl;
  67. }
  68.  
  69. //////////////////////////////////////////////////////////////////////////
  70. void CVehicleModificationParams::InitModification(XmlNodeRef xmlModificationData)
  71. {
  72.         assert(xmlModificationData);
  73.  
  74.         bool hasParentModification = xmlModificationData->haveAttr("parent");
  75.         if (hasParentModification)
  76.         {
  77.                 XmlNodeRef xmlModificationsGroup = xmlModificationData->getParent();
  78.  
  79.                 const char* parentModificationName = xmlModificationData->getAttr("parent");
  80.                 XmlNodeRef xmlParentModificationData = FindModificationNodeByName(parentModificationName, xmlModificationsGroup);
  81.                 if (xmlParentModificationData && (xmlParentModificationData != xmlModificationData))
  82.                 {
  83.                         InitModification(xmlParentModificationData);
  84.                 }
  85.         }
  86.  
  87.         XmlNodeRef xmlElemsGroup = xmlModificationData->findChild("Elems");
  88.         if (!xmlElemsGroup)
  89.         {
  90.                 return;
  91.         }
  92.  
  93.         for (int i = 0; i < xmlElemsGroup->getChildCount(); ++i)
  94.         {
  95.                 XmlNodeRef xmlElem = xmlElemsGroup->getChild(i);
  96.  
  97.                 InitModificationElem(xmlElem);
  98.         }
  99. }
  100.  
  101. //////////////////////////////////////////////////////////////////////////
  102. XmlNodeRef CVehicleModificationParams::FindModificationNodeByName(const char* name, XmlNodeRef xmlModificationsGroup)
  103. {
  104.         assert(name != NULL);
  105.         assert(xmlModificationsGroup);
  106.  
  107.         int numNodes = xmlModificationsGroup->getChildCount();
  108.         for (int i = 0; i < numNodes; i++)
  109.         {
  110.                 XmlNodeRef xmlModification = xmlModificationsGroup->getChild(i);
  111.                 const char* modificationName = xmlModification->getAttr("name");
  112.                 if (modificationName != 0 && (strcmpi(name, modificationName) == 0))
  113.                 {
  114.                         return xmlModification;
  115.                 }
  116.         }
  117.  
  118.         return XmlNodeRef();
  119. }
  120.  
  121. //////////////////////////////////////////////////////////////////////////
  122. void CVehicleModificationParams::InitModificationElem(XmlNodeRef xmlElem)
  123. {
  124.         assert(m_pImpl != NULL);
  125.         assert(xmlElem != (IXmlNode*)NULL);
  126.  
  127.         bool valid = true;
  128.         valid &= xmlElem->haveAttr("idRef");
  129.         valid &= xmlElem->haveAttr("name");
  130.         valid &= xmlElem->haveAttr("value");
  131.  
  132.         if (!valid)
  133.         {
  134.                 CryLog("Vehicle modification element at line %i invalid, skipping.", xmlElem->getLine());
  135.                 return;
  136.         }
  137.  
  138.         const char* id = xmlElem->getAttr("idRef");
  139.         const char* attrName = xmlElem->getAttr("name");
  140.  
  141.         Implementation::TModificationKey key(id, attrName);
  142.         m_pImpl->m_modifications[key] = xmlElem;
  143. }
  144.  
  145. //////////////////////////////////////////////////////////////////////////
  146. XmlNodeRef CVehicleModificationParams::GetModificationNode(const char* nodeId, const char* attrName) const
  147. {
  148.         assert(nodeId != NULL);
  149.         assert(attrName != NULL);
  150.  
  151.         if (m_pImpl == NULL)
  152.         {
  153.                 return XmlNodeRef();
  154.         }
  155.  
  156.         Implementation::TModificationKey key(nodeId, attrName);
  157.         Implementation::TModificationMap::const_iterator cit = m_pImpl->m_modifications.find(key);
  158.         bool modificationFound = (cit != m_pImpl->m_modifications.end());
  159.         if (!modificationFound)
  160.         {
  161.                 return XmlNodeRef();
  162.         }
  163.  
  164.         return cit->second;
  165. }
  166.  
downloadVehicleModificationParams.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