|
@@ -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);
|
|
|
+
|
|
|
+ //ai_assert(it != props.end());
|
|
|
+ }
|
|
|
|
|
|
- // 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;
|
|
|
- }
|
|
|
-
|
|
|
- // 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");
|
|
|
+ if (it == props.end()) {
|
|
|
+ // check property template
|
|
|
+ if (templateProps) {
|
|
|
+ return templateProps->Get(name);
|
|
|
+ }
|
|
|
|
|
|
- //print_verbose("loaded property successfully: " + String(name.c_str()));
|
|
|
- props.insert(std::make_pair(name, loaded_property));
|
|
|
- return loaded_property;
|
|
|
+ return nullptr;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- return nullptr;
|
|
|
+ return (*it).second;
|
|
|
}
|
|
|
|
|
|
DirectPropertyMap PropertyTable::GetUnparsedProperties() const {
|