private void Update()
        {
            try
            {
                timeSinceLastCheck += Time.deltaTime;
                if (timeSinceLastCheck >= checkFrequency)
                {
                    timeSinceLastCheck -= checkFrequency;

                    boolValues["prefsSoftPhysics"]  = UserPreferences.singleton.softPhysics;
                    boolValues["bodySoftPhysics"]   = softBodyPhysicsEnabler.GetBoolParamValue("enabled");
                    boolValues["breastSoftPhysics"] = Globals.BREAST_PHYSICS_MESH.on;

                    //In/Out morphs can become enabled by e.g. loading an appearance preset. Force off.
                    if (breastInOut.GetBoolParamValue("enabled"))
                    {
                        breastInOut.SetBoolParamValue("enabled", false);
                        Log.Message("Auto Breast In/Out Morphs disabled - this plugin adjusts breast morphs better without it.");
                    }

                    bool fullUpdateNeeded = false;
                    foreach (KeyValuePair <string, bool> kvp in boolValues)
                    {
                        fullUpdateNeeded = CheckBoolValue(kvp.Key, kvp.Value);
                    }

                    if (fullUpdateNeeded)
                    {
                        StartCoroutine(gameObject.GetComponent <Script>().RefreshStaticPhysics());
                    }

                    float fixedDeltaTime = Time.fixedDeltaTime;
                    if (fixedDeltaTime != prevFixedDeltaTime)
                    {
                        gameObject.GetComponent <Script>().RefreshRateDependentPhysics();
                    }
                    prevFixedDeltaTime = fixedDeltaTime;
                }
            }
            catch (Exception e)
            {
                Log.Error($"{e}", nameof(SettingsMonitor));
                enabled = false;
            }
        }
        public void Init(Atom containingAtom)
        {
            breastInOut = containingAtom.GetStorableByID("BreastInOut");
            breastInOut.SetBoolParamValue("enabled", false); // In/Out auto morphs off

            softBodyPhysicsEnabler = containingAtom.GetStorableByID("SoftBodyPhysicsEnabler");
            softBodyPhysicsEnabler.SetBoolParamValue("enabled", true); // Atom soft physics on

            boolValues = new Dictionary <string, bool>
            {
                { "prefsSoftPhysics", true },
                { "bodySoftPhysics", true },
                { "breastSoftPhysics", true }
            };
            prevBoolValues = new Dictionary <string, bool>
            {
                { "prefsSoftPhysics", true },
                { "bodySoftPhysics", true },
                { "breastSoftPhysics", true }
            };

            //monitor change to physics rate
            prevFixedDeltaTime = Time.fixedDeltaTime;

            string requires = "Enable it to allow physics settings to be recalculated if breast morphs are changed. (No need to reload the plugin if you do enable it.)";

            messages = new Dictionary <string, string>
            {
                { "prefsSoftPhysics", $"Soft Body Physics is not enabled in User Preferences. {requires}" },
                { "bodySoftPhysics", $"Soft Body Physics is not enabled in Control & Physics 1 tab. {requires}" },
                { "breastSoftPhysics", $"Soft Physics is not enabled in F Breast Physics 2 tab. {requires}" }
            };

            if (!UserPreferences.singleton.softPhysics)
            {
                UserPreferences.singleton.softPhysics = true;
                Log.Message($"Soft physics has been enabled in VaM preferences.");
            }
            enabled = false;
        }