Advertisement
vivienneanthony

rewrite

Nov 19th, 2015
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.16 KB | None | 0 0
  1. // load game assets
  2. bool GameAssetData::LoadNewGameAssets(Vector<GameAsset*> * m_GameAssetData)
  3. {
  4.     // Get Resource
  5.     ResourceCache* resCache = g_pApp->GetConstantResCache();
  6.  
  7.     // Create a empty
  8.     Vector<String> m_datafiles;
  9.  
  10.     // Use package file
  11.     String m_UsePackageFile;
  12.  
  13.     // Package found bool;
  14.     bool m_bPackageFileFound=false;
  15.  
  16.     // create a package file
  17.     PackageFile * m_pPackageFile = new PackageFile(context_);
  18.  
  19.     // search files
  20.     for(unsigned i=0; i<=m_pDataFiles->Size(); ++i)
  21.     {
  22.         String PackagePathName;
  23.         PackagePathName.Append(m_pDataPath->CString());
  24.         PackagePathName.Append(m_pDataFiles->At(i));
  25.  
  26.         // open package file
  27.         m_bPackageFileFound = m_pPackageFile->Open(PackagePathName);
  28.  
  29.         // if file is found
  30.         if(m_bPackageFileFound!=false&&m_bPackageFileFound?m_pPackageFile->Exists(String("GameAssetOptions.xml")):false)
  31.         {
  32.             // Use this package
  33.             m_UsePackageFile.Append(m_pDataFiles->At(i));
  34.             m_bPackageFileFound=true;
  35.  
  36.             break;
  37.         }
  38.     }
  39.  
  40.     // If datafiles is 0 or empty return - meaning nothing was found
  41.     if(m_bPackageFileFound==false)
  42.     {
  43.         return false;
  44.     }
  45.  
  46.     // Package Entry
  47.     const PackageEntry * m_GameAssetsDataEntry= m_pPackageFile->GetEntry(String("GameAssetsOptions.xml"));
  48.  
  49.     // set package
  50.     File * m_PackageData =  new File(context_, m_pPackageFile, String("GameAssetsOptions.xml"));
  51.  
  52.     // read into memory
  53.     unsigned int* buffer = (unsigned int*) new char[m_GameAssetsDataEntry->size_];
  54.  
  55.     m_PackageData->Read (buffer, m_GameAssetsDataEntry->size_);
  56.  
  57.     // Create new xml document
  58.     pugi::xml_document doc;
  59.  
  60.     // Parse to see if information is loaded
  61.     pugi::xml_parse_result result = doc.load_buffer(buffer, sizeof(buffer));
  62.  
  63.     // Exit if error
  64.     if (result.status!=pugi::status_ok)
  65.     {
  66.         return false;
  67.     }
  68.  
  69.     // Get XML root if it exist, if not exit
  70.     pugi::xml_node GameAssetRoot=doc.first_child();
  71.  
  72.     if(!GameAssetRoot)
  73.     {
  74.         return false;
  75.     }
  76.  
  77.     // For ... loop through each child
  78.     for(pugi::xml_node NewGameAsset =  GameAssetRoot.first_child(); NewGameAsset; NewGameAsset =  NewGameAsset.next_sibling())
  79.     {
  80.         // create a game asset
  81.         GameAsset * m_NewGameAsset = new GameAsset(context_);
  82.         m_GameAssetData->Push(m_NewGameAsset);
  83.  
  84.         // Get attributes from xml
  85.         const char * m_Name = NewGameAsset.attribute("Name").as_string();
  86.         const char * m_Symbol = NewGameAsset.attribute("Symbol").as_string();
  87.         unsigned int m_Type = NewGameAsset.attribute("Type").as_uint();
  88.         unsigned int m_State = NewGameAsset.attribute("State").as_uint();
  89.         float m_Density  = NewGameAsset.attribute("Density").as_float();
  90.         float m_XPos = NewGameAsset.attribute("XPos").as_float();
  91.         float m_YPos = NewGameAsset.attribute("YPos").as_float();
  92.         float m_ZPos = NewGameAsset.attribute("ZPos").as_float();
  93.         float m_Rotation = NewGameAsset.attribute("Rotation").as_float();
  94.         unsigned int m_Quantity = NewGameAsset.attribute("Quantity").as_uint();
  95.         bool m_IsPhysical = NewGameAsset.attribute("IsPhysical").as_bool();
  96.         bool m_IsTradeable= NewGameAsset.attribute("IsTradeable").as_bool();
  97.         bool m_IsPowered= NewGameAsset.attribute("IsPowered").as_bool();
  98.         bool m_IsEntity = NewGameAsset.attribute("IsEntity").as_bool();
  99.         const char * m_PhysicalModel =  NewGameAsset.attribute("PhysicalModel").as_string();
  100.         bool m_IsLinkedGameAsset = NewGameAsset.attribute("IsLinkedGameAsset").as_bool();
  101.         bool m_UseAttachmentPoints = NewGameAsset.attribute("UseAttachmentPoints").as_bool();
  102.         bool m_UseUpgradeSystem = NewGameAsset.attribute("UseUpgradeSystem").as_bool();
  103.         bool m_UseRaritySystem = NewGameAsset.attribute("UseRaritySystem").as_bool();
  104.  
  105.         // Set attributes from xml to new game asset
  106.         m_NewGameAsset->SetName(m_Name);
  107.         m_NewGameAsset->SetSymbol(m_Symbol);
  108.         m_NewGameAsset->SetAttributes(m_IsPhysical,  m_IsTradeable, m_IsPowered, m_IsEntity, m_IsLinkedGameAsset);
  109.         m_NewGameAsset->SetTypeState((GameAssetType)m_Type, (GameAssetState)m_State);
  110.         m_NewGameAsset->SetQuantity(m_Quantity);
  111.         m_NewGameAsset->SetPositionRotation(m_XPos, m_YPos, m_ZPos, m_Rotation);
  112.         m_NewGameAsset->SetSpecialAttributes(m_UseAttachmentPoints,m_UseUpgradeSystem,m_UseRaritySystem);
  113.         m_NewGameAsset->SetDensity(m_Density);
  114.         m_NewGameAsset->SetPhysicalModel(String(m_PhysicalModel));
  115.  
  116.         // create a new game asset
  117.         GameAsset * m_GameAsset_NewChild;
  118.  
  119.         // For ... loop through each child
  120.         for (pugi::xml_node NewGameAssetChild: NewGameAsset.children())
  121.         {
  122.             // Create a default child
  123.             m_GameAsset_NewChild = m_NewGameAsset->AddChild("n/a","n/a",GAType_NotApplicable,GAState_NotApplicable);
  124.  
  125.             Deserialize(NewGameAssetChild,m_GameAsset_NewChild);
  126.         }
  127.     }
  128.  
  129.    // Safe delete
  130.    SAFE_DELETE(buffer);
  131.    SAFE_DELETE(m_PackageData);
  132.    SAFE_DELETE(m_pPackageFile);
  133.  
  134.     return true;
  135. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement