diff --git a/modules/fbx/fbx_parser/FBXProperties.cpp b/modules/fbx/fbx_parser/FBXProperties.cpp index a16d49def95..0d3ca29df97 100644 --- a/modules/fbx/fbx_parser/FBXProperties.cpp +++ b/modules/fbx/fbx_parser/FBXProperties.cpp @@ -168,19 +168,11 @@ PropertyTable::PropertyTable(const ElementPtr element, const PropertyTable *temp } LazyPropertyMap::const_iterator it = lazyProps.find(name); - if (it != lazyProps.end()) { DOMWarning("duplicate property name, will hide previous value: " + name, v.second); continue; } - if (it->second == nullptr) { - print_error("skipped invalid element insertion for " + String(name.c_str())); - continue; - } - - //print_verbose("storing lazy property: " + String(name.c_str())); - // since the above checks for duplicates we can be sure to insert the only match here. lazyProps[name] = v.second; } @@ -195,26 +187,28 @@ PropertyTable::~PropertyTable() { // ------------------------------------------------------------------------------------------------ PropertyPtr PropertyTable::Get(const std::string &name) const { + PropertyMap::const_iterator it = props.find(name); + if (it == props.end()) { + // hasn't been parsed yet? + LazyPropertyMap::const_iterator lit = lazyProps.find(name); + if (lit != lazyProps.end()) { + props[name] = ReadTypedProperty(lit->second); + it = props.find(name); - // check if loaded already - return it. - PropertyMap::const_iterator loaded_property_element = props.find(name); - if (loaded_property_element != props.end()) { - //print_verbose("Returning conversion for lazy property: " + String(loaded_property_element->first.c_str())); - return loaded_property_element->second; + //ai_assert(it != props.end()); + } + + if (it == props.end()) { + // check property template + if (templateProps) { + return templateProps->Get(name); + } + + return nullptr; + } } - // now load it since we don't have a match - LazyPropertyMap::const_iterator unloadedProperty = lazyProps.find(name); - if (unloadedProperty != lazyProps.end()) { - PropertyPtr loaded_property = ReadTypedProperty(unloadedProperty->second); - ERR_FAIL_COND_V_MSG(!loaded_property, nullptr, "[fbx][serious] unable to load typed property"); - - //print_verbose("loaded property successfully: " + String(name.c_str())); - props.insert(std::make_pair(name, loaded_property)); - return loaded_property; - } - - return nullptr; + return (*it).second; } DirectPropertyMap PropertyTable::GetUnparsedProperties() const {