44#include " Renderer.h"
55
66#include " libs/stb_image.h"
7-
7+ #include < cmath>
8+ #include < sstream>
89
910std::string ResourceManager::modelFolder = " models" ;
11+ float ResourceManager::percentageLoading=0 ;
1012
1113
14+ template <typename T>
15+ std::string to_string_with_precision (const T a_value, const int n = 6 )
16+ {
17+ std::ostringstream out;
18+ out.precision (n);
19+ out << std::fixed << a_value;
20+ return out.str ();
21+ }
1222
1323Shader* ResourceManager::loadShader (std::string vertexShaderFilename, std::string fragmentShaderFilename)
1424{
@@ -22,49 +32,66 @@ std::vector<Model*> ResourceManager::loadAllModels(tinyxml2::XMLDocument* doc)
2232{
2333 Logger::log (" Loading all Models" );
2434
35+ std::string newmodefilename;
2536 std::vector<Model*> models;
26- std::string xmlNodeText;
2737 int id = 0 ;
38+ std::list<std::string> modelfilenames;
39+
40+
2841
2942 for (tinyxml2::XMLElement* xmlNodeObject = doc->FirstChildElement (" map" )->FirstChildElement (" models" )->FirstChildElement (" model" ); xmlNodeObject != NULL ; xmlNodeObject = xmlNodeObject->NextSiblingElement ())
3043 {
31- xmlNodeText = xmlNodeObject->GetText ();
32-
33- Model* newModel = loadModel (modelFolder + " /" + xmlNodeText);
34- newModel->setModelName (xmlNodeText);
35- newModel->setModelID (id++);
44+ newmodefilename = xmlNodeObject->GetText ();
45+ bool alreadyLoaded = false ;
3646
37- Logger::log (" loaded Model " + std::to_string (newModel->getModelID ()) + " : " + newModel->getModelName ());
38- models.push_back (newModel);
47+ for (std::string modefilename : modelfilenames)
48+ {
49+ if (modefilename == newmodefilename)
50+ {
51+ alreadyLoaded = true ;
52+ break ;
53+ }
54+ }
55+ if (!alreadyLoaded)
56+ {
57+ modelfilenames.push_back (newmodefilename);
58+ }
3959 }
4060
4161 for (tinyxml2::XMLElement* xmlNodeObject = doc->FirstChildElement (" map" )->FirstChildElement (" objects" )->FirstChildElement (" object" ); xmlNodeObject != NULL ; xmlNodeObject = xmlNodeObject->NextSiblingElement ())
4262 {
43- xmlNodeText = xmlNodeObject->FirstChildElement (" modelfile" )->GetText ();
44- bool modelAlreadyLoaded = false ;
63+ newmodefilename = xmlNodeObject->FirstChildElement (" modelfile" )->GetText ();
64+ bool alreadyLoaded = false ;
4565
46- for (Model* loadedModels : models )
66+ for (std::string modefilename : modelfilenames )
4767 {
48- if (loadedModels-> getModelName () == xmlNodeText) // model is already loaded
68+ if (modefilename == newmodefilename)
4969 {
50- modelAlreadyLoaded = true ;
70+ alreadyLoaded = true ;
5171 break ;
5272 }
5373 }
54- if (modelAlreadyLoaded )
74+ if (!alreadyLoaded )
5575 {
56- continue ;
76+ modelfilenames. push_back (newmodefilename) ;
5777 }
78+ }
5879
59- Model* newModel = loadModel (modelFolder + " /" + xmlNodeText);
60- newModel->setModelName (xmlNodeText);
80+
81+ float modelCount = modelfilenames.size ();
82+
83+ for (std::string modefilename : modelfilenames)
84+ {
85+
86+ Model* newModel = loadModel (modelFolder + " /" + modefilename);
87+ newModel->setModelName (modefilename);
6188 newModel->setModelID (id++);
6289
63- Logger::log (" loaded Model " + std::to_string (newModel->getModelID ()) + " : " + newModel->getModelName ());
90+ percentageLoading += 80 / modelCount;
91+ Logger::log (" loaded Model " + std::to_string (newModel->getModelID ()) + " : " + newModel->getModelName () + " - " + to_string_with_precision (percentageLoading,0 )+ " %" );
6492 models.push_back (newModel);
6593 }
6694
67-
6895 Logger::log (" Loading all Models - finished" );
6996 return models;
7097}
@@ -100,7 +127,6 @@ void ResourceManager::loadMap(std::string mapFileName, std::vector<std::shared_p
100127 std::vector<std::string> params;
101128
102129
103-
104130 doc.LoadFile (mapFileNameC);
105131
106132 std::string title = doc.FirstChildElement (" map" )->FirstChildElement (" name" )->GetText ();
@@ -122,6 +148,12 @@ void ResourceManager::loadMap(std::string mapFileName, std::vector<std::shared_p
122148
123149
124150 Logger::log (" Loading all Objects" );
151+ float objectCount = 0 ;
152+ for (tinyxml2::XMLElement* xmlNodeObject = doc.FirstChildElement (" map" )->FirstChildElement (" objects" )->FirstChildElement (" object" ); xmlNodeObject != NULL ; xmlNodeObject = xmlNodeObject->NextSiblingElement ())
153+ {
154+ objectCount++;
155+ }
156+
125157 for (tinyxml2::XMLElement* xmlNodeObject = doc.FirstChildElement (" map" )->FirstChildElement (" objects" )->FirstChildElement (" object" ); xmlNodeObject != NULL ; xmlNodeObject = xmlNodeObject->NextSiblingElement ())
126158 {
127159 xmlNodeText = xmlNodeObject->FirstChildElement (" modelfile" )->GetText ();
@@ -155,14 +187,25 @@ void ResourceManager::loadMap(std::string mapFileName, std::vector<std::shared_p
155187
156188 newObject->setNumber (numObject);
157189
158- Logger::log (" loaded Object:" + newObject->printObject ());
190+ percentageLoading += 10 / objectCount;
191+ Logger::log (" loaded Object:" + newObject->printObject () + " - " + to_string_with_precision (percentageLoading, 0 ) + " %" );
159192 objects->push_back (newObject);
160193
194+
195+
161196 numObject++;
162197 }
163198 Logger::log (" Loading all Objects - finished" );
164199
165- Logger::log (" Loading all NPCS" );
200+
201+
202+ Logger::log (" Loading all NPCs" );
203+ float npcCount = 0 ;
204+ for (tinyxml2::XMLElement* xmlNodeBot = doc.FirstChildElement (" map" )->FirstChildElement (" bots" )->FirstChildElement (" bot" ); xmlNodeBot != NULL ; xmlNodeBot = xmlNodeBot->NextSiblingElement ())
205+ {
206+ npcCount++;
207+ }
208+
166209 for (tinyxml2::XMLElement* xmlNodeBot = doc.FirstChildElement (" map" )->FirstChildElement (" bots" )->FirstChildElement (" bot" ); xmlNodeBot != NULL ; xmlNodeBot = xmlNodeBot->NextSiblingElement ())
167210 {
168211 xmlNodeText = xmlNodeBot->FirstChildElement (" modelfile" )->GetText ();
@@ -181,8 +224,6 @@ void ResourceManager::loadMap(std::string mapFileName, std::vector<std::shared_p
181224 split (xmlNodeText, params, ' ;' );
182225 newNPC->setScale (glm::vec3 (stof (params[0 ]), stof (params[1 ]), stof (params[2 ])));
183226
184- // xmlNodeText = xmlNodeBot->FirstChildElement("type")->GetText();
185- // newNPC->setType(Object::convertStringToType(xmlNodeText));
186227
187228 xmlNodeText = xmlNodeBot->FirstChildElement (" name" )->GetText ();
188229 newNPC->setName (xmlNodeText);
@@ -210,7 +251,8 @@ void ResourceManager::loadMap(std::string mapFileName, std::vector<std::shared_p
210251
211252 newNPC->setNumber (numObject);
212253
213- Logger::log (" loaded NPC:" + newNPC->printObject ());
254+ percentageLoading += 10 / npcCount;
255+ Logger::log (" loaded NPC:" + newNPC->printObject () + " - " + to_string_with_precision (percentageLoading, 0 ) + " %" );
214256 objects->push_back (newNPC);
215257 npcs->push_back (newNPC);
216258 characters->push_back (newNPC);
@@ -238,7 +280,7 @@ void ResourceManager::loadMap(std::string mapFileName, std::vector<std::shared_p
238280 characters->push_back (newNpc);
239281 numObject++;
240282 }
241- Logger::log (" Loading all NPCS - finished" );
283+ Logger::log (" Loading all NPCs - finished" );
242284
243285}
244286
0 commit comments