Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/WolfireGames/overgrowth.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Ogda/Searchers/Seekers/objectseeker.cpp')
-rw-r--r--Source/Ogda/Searchers/Seekers/objectseeker.cpp177
1 files changed, 177 insertions, 0 deletions
diff --git a/Source/Ogda/Searchers/Seekers/objectseeker.cpp b/Source/Ogda/Searchers/Seekers/objectseeker.cpp
new file mode 100644
index 00000000..6c1babd2
--- /dev/null
+++ b/Source/Ogda/Searchers/Seekers/objectseeker.cpp
@@ -0,0 +1,177 @@
+//-----------------------------------------------------------------------------
+// Name: objectseeker.cpp
+// Developer: Wolfire Games LLC
+// Description:
+// License: Read below
+//-----------------------------------------------------------------------------
+//
+// Copyright 2022 Wolfire Games LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//-----------------------------------------------------------------------------
+#include "objectseeker.h"
+
+#include <tinyxml.h>
+
+#include <Logging/logdata.h>
+#include <Utility/strings.h>
+
+std::vector<Item> ObjectSeeker::SearchXML( const Item & item, TiXmlDocument& doc )
+{
+ const char* elems[] =
+ {
+ "Model",
+ "ColorMap",
+ "NormalMap",
+ "PaletteMap",
+ "WeightMap",
+ "TranslucencyMap",
+ "WindMap",
+ "MaterialPath",
+ "SharpnessMap"
+ };
+
+ const char* elems_type[] =
+ {
+ "model",
+ "texture",
+ "texture",
+ "texture",
+ "texture",
+ "texture",
+ "texture",
+ "material",
+ "texture"
+ };
+
+ assert(ARRLEN(elems_type) == ARRLEN(elems));
+
+ const char* ignored[] =
+ {
+ "Shader",
+ "ShaderName",
+ "ShaderPath",
+ "flags",
+ "GroundOffset",
+ "avg_color",
+ "label"
+ };
+
+ std::vector<Item> items;
+
+ TiXmlHandle hRoot(&doc);
+
+ TiXmlElement *eElem = hRoot.FirstChildElement("Object").FirstChildElement().Element();
+
+ if( !eElem )
+ {
+ LOGE << "Cant find right root node in " << item << std::endl;
+ }
+
+ while( eElem )
+ {
+ const char* name = eElem->Value();
+ const char* text = eElem->GetText();
+ if( name )
+ {
+ int id;
+ if( (id = FindStringInArray( elems, ARRLEN(elems), name )) >= 0 )
+ {
+ if( text && strlen(text) > 0 )
+ {
+ items.push_back(Item(item.input_folder, text,elems_type[id],item.source));
+ }
+ else
+ {
+ LOGW << "String value in " << item << " for element " << elems[id] << " is empty" << std::endl;
+ }
+ }
+ else if( (id = FindStringInArray( ignored, ARRLEN(ignored), name )) >= 0 )
+ {
+ LOGD << "Ignored " << ignored[id] << " in " << item << std::endl;
+ }
+ else if( strmtch( "DetailObjects", name ) )
+ {
+ TiXmlElement *eDetailObject = eElem->FirstChildElement();
+
+ while( eDetailObject )
+ {
+ {
+ const char* obj_path = eDetailObject->Attribute("obj_path");
+ if( obj_path )
+ {
+ items.push_back(Item(item.input_folder, obj_path, "object", item.source));
+ }
+ }
+
+ {
+ const char* weight_path = eDetailObject->Attribute("weight_path");
+ if( weight_path )
+ {
+ items.push_back(Item(item.input_folder, weight_path, "texture", item.source));
+ }
+ }
+
+ eDetailObject = eDetailObject->NextSiblingElement();
+ }
+ }
+ else if( strmtch( "DetailMaps", name ) )
+ {
+ TiXmlElement *eDetailMap = eElem->FirstChildElement();
+
+ while( eDetailMap )
+ {
+
+ {
+ const char* colorpath = eDetailMap->Attribute("colorpath");
+ if( colorpath )
+ {
+ items.push_back(Item(item.input_folder, colorpath,"texture",item.source));
+ }
+ }
+
+ {
+ const char* normalpath = eDetailMap->Attribute("normalpath");
+ if( normalpath )
+ {
+ items.push_back(Item(item.input_folder, normalpath,"texture",item.source));
+ }
+ }
+
+ {
+ const char* materialpath = eDetailMap->Attribute("materialpath");
+ if( materialpath )
+ {
+ items.push_back(Item(item.input_folder, materialpath,"material",item.source));
+ }
+ }
+
+ eDetailMap = eDetailMap->NextSiblingElement();
+ }
+ }
+ else
+ {
+ LOGE << "Unahandled subvalue in Object from " << item << " called " << name << std::endl;
+ }
+ }
+ else
+ {
+ LOGE << "Generic warning" << std::endl;
+ }
+
+ eElem = eElem->NextSiblingElement();
+ }
+
+ return items;
+}