public KeyCode GetKeyCode(string settingName, KeyCode defaultKeyCode)
        {
            KeyCode result = defaultKeyCode;

            if (settingsDictionary.ContainsKey(settingName))
            {
                try
                {
                    result = (KeyCode)Enum.Parse(typeof(KeyCode), settingsDictionary[settingName]);
                }
                catch
                {
                    PluginConsole.WriteLine(string.Concat(new string[]
                    {
                        "Error converting '",
                        settingName,
                        "' = '",
                        settingsDictionary[settingName],
                        "' to a UnityEngine.KeyCode"
                    }), this);
                }
            }
            else
            {
                SetKeyCode(settingName, defaultKeyCode);
            }

            return(result);
        }
        public bool SetKeyCode(string settingName, KeyCode keyCode)
        {
            bool result = true;

            if (settingsDictionary.ContainsValue(keyCode.ToString()))
            {
                result = false;
                PluginConsole.WriteLine("KeyCode '" + keyCode.ToString() + "' is already bound", this);
            }
            else
            {
                if (settingsDictionary.ContainsKey(settingName))
                {
                    settingsDictionary[settingName] = keyCode.ToString();
                }
                else
                {
                    settingsDictionary.Add(settingName, keyCode.ToString());
                }

                SaveSettings();
            }

            return(result);
        }
        void Awake()
        {
            if (instance != null)
            {
                Destroy(this);
            }
            else
            {
                instance = this;

                registeredConsoleCommands = new Dictionary <string, ConsoleCommand>();
                logsLocation   = GlobalVars.RootFolder + "\\dcpm-logs\\";
                textQueue      = new Queue <string>();
                consoleInput   = "";
                drawConsole    = false;
                consoleKeyBind = PluginSettings.Instance.GetKeyCode("TogglePluginConsole", KeyCode.BackQuote);

                consoleRect      = new Rect(10f, 10f, 1000f, 600f);
                scrollableRect   = new Rect(consoleRect.left + 5f, consoleRect.top, consoleRect.width - 5f, consoleRect.height - 30f);
                textInputRect    = new Rect(consoleRect.left + 5f, consoleRect.top + consoleRect.height - 25f, consoleRect.width - 100f, 20f);
                submitButtonRect = new Rect(consoleRect.left + consoleRect.width - 95f, consoleRect.top + consoleRect.height - 25f, 85f, 20f);

                RegisterConsoleCommand("clear", Cmd_Clear, "Clear the console history", this);
                RegisterConsoleCommand("listcommands", Cmd_List, "Display a list of all registered console commands", this);

                WriteLine("Version " + Version + " Initialized", this);
            }
        }
        private PluginSettings()
        {
            settingsDictionary = new Dictionary <string, string>();
            settingsLocation   = GlobalVars.RootFolder + "\\dcpm-settings\\";
            settingsFile       = "settings.txt";

            LoadSettings();

            PluginConsole.WriteLine("Version " + Version + " Initialized", this);
        }
        void LoadSettings()
        {
            if (!Directory.Exists(settingsLocation))
            {
                Directory.CreateDirectory(settingsLocation);
            }

            if (File.Exists(settingsLocation + settingsFile))
            {
                PluginConsole.WriteLine("Loading Dictionary from file", this);

                using (StreamReader streamReader = new StreamReader(new FileStream(settingsLocation + settingsFile, FileMode.OpenOrCreate, FileAccess.Read)))
                {
                    while (streamReader.Peek() >= 0)
                    {
                        string   text  = streamReader.ReadLine();
                        string[] array = text.Split(new string[] { " = " }, StringSplitOptions.None);

                        if (array.Length == 2)
                        {
                            settingsDictionary.Add(array[0], array[1]);

                            PluginConsole.WriteLine(string.Concat(new string[]
                            {
                                "Added setting '",
                                array[0],
                                "' = '",
                                array[1],
                                "' to the settings dictionary"
                            }), this);
                        }
                    }
                }
                PluginConsole.WriteLine("Settings Dictionary loaded from file", this);
            }
            else
            {
                PluginConsole.WriteLine("No settings file found, creating an empty one", this);
            }
        }
        void SaveSettings()
        {
            if (!Directory.Exists(settingsLocation))
            {
                Directory.CreateDirectory(settingsLocation);
            }

            try
            {
                using (StreamWriter streamWriter = new StreamWriter(new FileStream(settingsLocation + settingsFile, FileMode.Create, FileAccess.Write, FileShare.None)))
                {
                    foreach (KeyValuePair <string, string> keyValuePair in settingsDictionary)
                    {
                        streamWriter.WriteLine("{0} = {1}", keyValuePair.Key, keyValuePair.Value);
                    }
                }
            }
            catch (Exception ex)
            {
                PluginConsole.WriteLine(ex.ToString(), this);
            }

            PluginConsole.WriteLine("Settings saved to file", this);
        }