private void OptionsMenuBuilder_Config_OnFinishedLoading(object sender, ConfigFileEventArgs e)
        {
            T oldConfig     = JsonConvert.DeserializeObject <T>(jsonConfig);
            T currentConfig = e.Instance as T;

            foreach (ModOptionAttributeMetadata <T> modOptionMetadata in ModOptionAttributesMetadata.Values)
            {
                if (modOptionMetadata.MemberInfoMetadata.MemberType != MemberType.Field &&
                    modOptionMetadata.MemberInfoMetadata.MemberType != MemberType.Property)
                {
                    continue;
                }

                if (!modOptionMetadata.MemberInfoMetadata.GetValue(oldConfig)
                    .Equals(modOptionMetadata.MemberInfoMetadata.GetValue(currentConfig)))
                {
                    if (!Registered)
                    {
                        // if we haven't marked the options menu as being registered yet, its too soon to fire the events,
                        // so run a coroutine that waits until the first frame where Registered == true
                        // before routing the events
                        UWE.CoroutineHost.StartCoroutine(DeferredInvokeOnChangeEventsRoutine(modOptionMetadata, sender));
                    }
                    else
                    {
                        // otherwise, route the events immediately
                        InvokeOnChangeEvents(modOptionMetadata, sender);
                    }
                }
            }
        }
        private void OptionsMenuBuilder_Config_OnFinishedLoading(object sender, ConfigFileEventArgs e)
        {
            T oldConfig     = JsonConvert.DeserializeObject <T>(jsonConfig);
            T currentConfig = e.Instance as T;

            foreach (ModOptionAttributeMetadata <T> modOptionMetadata in ModOptionAttributesMetadata.Values)
            {
                if (modOptionMetadata.MemberInfoMetadata.MemberType != MemberType.Field &&
                    modOptionMetadata.MemberInfoMetadata.MemberType != MemberType.Property)
                {
                    continue;
                }

                if (!modOptionMetadata.MemberInfoMetadata.GetValue(oldConfig)
                    .Equals(modOptionMetadata.MemberInfoMetadata.GetValue(currentConfig)))
                {
                    invokeOnChangeEvents(modOptionMetadata, sender);
                }
            }
        }
 public void OptionsMenuBuilder_Config_OnStartedLoading(object sender, ConfigFileEventArgs e)
 {
     jsonConfig = JsonConvert.SerializeObject(e.Instance as T);
 }