From a001d3b180783285d4be648a8e037b656b2d0cc8 Mon Sep 17 00:00:00 2001 From: Nicolas Gnyra Date: Thu, 19 Sep 2024 21:32:01 -0400 Subject: [PATCH] Support properties for UIComponent and UIObject --- BeatSaberMarkupLanguage/BSMLParser.cs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/BeatSaberMarkupLanguage/BSMLParser.cs b/BeatSaberMarkupLanguage/BSMLParser.cs index e604aa8e..1a237bad 100644 --- a/BeatSaberMarkupLanguage/BSMLParser.cs +++ b/BeatSaberMarkupLanguage/BSMLParser.cs @@ -380,6 +380,8 @@ private void HandleTagNode(XElement element, GameObject parent, BSMLParserParams object host = parserParams.Host; XAttribute id = element.Attribute("id"); + + // TODO: iterating over fields/properties for every tag is very inefficient if (host != null && id != null) { foreach (FieldInfo fieldInfo in host.GetType().GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public)) @@ -394,6 +396,19 @@ private void HandleTagNode(XElement element, GameObject parent, BSMLParserParams fieldInfo.SetValue(host, currentNode); } } + + foreach (PropertyInfo fieldInfo in host.GetType().GetProperties(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public)) + { + if (fieldInfo.GetCustomAttribute(true)?.Id == id.Value) + { + fieldInfo.SetValue(host, GetExternalComponent(currentNode, fieldInfo.PropertyType)); + } + + if (fieldInfo.GetCustomAttribute(true)?.Id == id.Value) + { + fieldInfo.SetValue(host, currentNode); + } + } } XAttribute tags = element.Attribute("tags");