public static void SetBool(string key, bool value)
        {
            // do cheat key exist
            if (!CheatsSettings.GetOrCreateSettings().DoCheatKeyExist(key))
            {
                Debug.LogErrorFormat("Key {0} doesn't exist in CheatsSettings. Aborting method.", key);
                return;
            }

            // prevent useless calculations
            if (value == GetBool(key))
            {
                return;
            }

            // turn bool into float
            float floatValue = value ? 1 : 0;

            // PlayerPrefs doesn't have "SetBool" value
            PlayerPrefs.SetFloat(playerPrefsPrefix + key, floatValue);

            // find cheat type of key
            bool cheatTypeFounded = CheatsSettings.GetOrCreateSettings().TryGetCheatType(key, out CheatType cheatType);

            if (!cheatTypeFounded)
            {
                Debug.LogFormat("cheatTypeFounded should always be true. There is something weird in the code. Call your coder please.");
                return;
            }

            OnCheatChanged?.Invoke(key, cheatType);
        }
        public static void ToggleBool(string key)
        {
            // do cheat key exist
            if (!CheatsSettings.GetOrCreateSettings().DoCheatKeyExist(key))
            {
                Debug.LogErrorFormat("Key {0} doesn't exist in CheatsSettings. Aborting method.", key);
                return;
            }

            SetBool(key, !GetBool(key));
        }
        public static bool GetBool(string key)
        {
            if (!CheatsSettings.GetOrCreateSettings().DoCheatKeyExist(key))
            {
                Debug.LogErrorFormat("Key {0} doesn't exist in CheatsSettings. Aborting.", key);
                return(false);
            }

            float value = PlayerPrefs.GetFloat(playerPrefsPrefix + key);

            // float to boolean
            bool output = (value == 1);

            return(output);
        }