@@ -422,6 +422,7 @@ void ProjectSettings::_get_property_list(List<PropertyInfo> *p_list) const {
422422 _THREAD_SAFE_METHOD_
423423
424424 RBSet<_VCSort> vclist;
425+ HashMap<String, Vector<_VCSort>> setting_overrides;
425426
426427 for (const KeyValue<StringName, VariantContainer> &E : props) {
427428 const VariantContainer *v = &E.value ;
@@ -462,23 +463,41 @@ void ProjectSettings::_get_property_list(List<PropertyInfo> *p_list) const {
462463 if (v->restart_if_changed ) {
463464 vc.flags |= PROPERTY_USAGE_RESTART_IF_CHANGED;
464465 }
465- vclist.insert (vc);
466- }
467466
468- for (const _VCSort &E : vclist) {
469- String prop_info_name = E.name ;
470- int dot = prop_info_name.find_char (' .' );
471- if (dot != -1 && !custom_prop_info.has (prop_info_name)) {
472- prop_info_name = prop_info_name.substr (0 , dot);
467+ int dot = vc.name .rfind_char (' .' );
468+ if (dot != -1 && !custom_prop_info.has (vc.name )) {
469+ StringName n = vc.name .substr (0 , dot);
470+ if (props.has (n)) { // Property is an override.
471+ setting_overrides[n].append (vc);
472+ } else {
473+ vclist.insert (vc);
474+ }
475+ } else {
476+ vclist.insert (vc);
473477 }
478+ }
474479
475- if (custom_prop_info.has (prop_info_name)) {
476- PropertyInfo pi = custom_prop_info[prop_info_name];
477- pi.name = E.name ;
478- pi.usage = E.flags ;
480+ for (const _VCSort &base : vclist) {
481+ if (custom_prop_info.has (base.name )) {
482+ PropertyInfo pi = custom_prop_info[base.name ];
483+ pi.name = base.name ;
484+ pi.usage = base.flags ;
479485 p_list->push_back (pi);
480486 } else {
481- p_list->push_back (PropertyInfo (E.type , E.name , PROPERTY_HINT_NONE, " " , E.flags ));
487+ p_list->push_back (PropertyInfo (base.type , base.name , PROPERTY_HINT_NONE, " " , base.flags ));
488+ }
489+
490+ if (setting_overrides.has (base.name )) {
491+ for (const _VCSort &over : setting_overrides.get (base.name )) {
492+ if (custom_prop_info.has (over.name )) {
493+ PropertyInfo pi = custom_prop_info[over.name ];
494+ pi.name = over.name ;
495+ pi.usage = over.flags ;
496+ p_list->push_back (pi);
497+ } else {
498+ p_list->push_back (PropertyInfo (over.type , over.name , PROPERTY_HINT_NONE, " " , over.flags ));
499+ }
500+ }
482501 }
483502 }
484503}
0 commit comments