public void LoadData()
        {
            if (!File.Exists(BindingsConfigPath))
            {
                TextWriter tw = new StreamWriter(BindingsConfigPath);
                tw.WriteLine("---- this is the key bindings configuration file for Procedural Objects ----");
                tw.WriteLine("You can put any key binding you want for each of those actions. Just be");
                tw.WriteLine("sure they are the right names. For example don't right 'Ctrl' but \"LeftControl\"");
                tw.WriteLine("Use the 'plus' symbol to create any key combination, works for any keys or any number of keys.");
                tw.WriteLine("It works for any keys or combination of keys, the list of the names you should use can be found here:");
                tw.WriteLine("https://docs.unity3d.com/ScriptReference/KeyCode.html");
                tw.WriteLine("");
                tw.WriteLine("generalShowHideUI = LeftControl+P+O");
                tw.WriteLine("convertToProcedural = LeftShift+P");
                tw.WriteLine("copy = LeftControl+C");
                tw.WriteLine("paste = LeftControl+V");
                tw.WriteLine("switchActionMode = LeftControl");
                tw.WriteLine("switchGeneralToVertexTools = Tab");
                tw.WriteLine("deleteObject = Delete");
                tw.WriteLine("");
                tw.WriteLine("edition_smoothMovements = LeftShift");
                tw.WriteLine("edition_smallMovements = LeftAlt");
                tw.WriteLine("");
                tw.WriteLine("position_moveUp = PageUp");
                tw.WriteLine("position_moveDown = PageDown");
                tw.WriteLine("position_moveRight = RightArrow");
                tw.WriteLine("position_moveLeft = LeftArrow");
                tw.WriteLine("position_moveForward = UpArrow");
                tw.WriteLine("position_moveBackward = DownArrow");
                tw.WriteLine("");
                tw.WriteLine("rotation_moveUp = PageUp");
                tw.WriteLine("rotation_moveDown = PageDown");
                tw.WriteLine("rotation_moveRight = RightArrow");
                tw.WriteLine("rotation_moveLeft = LeftArrow");
                tw.WriteLine("rotation_moveForward = UpArrow");
                tw.WriteLine("rotation_moveBackward = DownArrow");
                tw.WriteLine("");
                tw.WriteLine("scale_scaleUp = PageUp");
                tw.WriteLine("scale_scaleDown = PageDown");
                tw.WriteLine("");
                tw.WriteLine("snapStoredHeight = H");
                tw.WriteLine("undo = LeftControl+Z");
                tw.WriteLine("redo = LeftControl+Y");
                tw.Close();
            }
            m_keyBindings = new List <KeyBindingInfo>();
            var lines = File.ReadAllLines(BindingsConfigPath).ToList();

            if (!lines.Any(line => line.Contains("snapStoredHeight = ")))
            {
                if (File.Exists(BindingsConfigPath))
                {
                    File.Delete(BindingsConfigPath);
                }
                TextWriter tw = new StreamWriter(BindingsConfigPath);
                foreach (string line in lines)
                {
                    tw.WriteLine(line);
                }
                tw.WriteLine("");
                tw.WriteLine("snapStoredHeight = H");
                lines.Add("snapStoredHeight = H");
                tw.Close();
            }
            if (!lines.Any(line => line.Contains("undo = ")))
            {
                if (File.Exists(BindingsConfigPath))
                {
                    File.Delete(BindingsConfigPath);
                }
                TextWriter tw = new StreamWriter(BindingsConfigPath);
                foreach (string line in lines)
                {
                    tw.WriteLine(line);
                }
                tw.WriteLine("undo = LeftControl+Z");
                lines.Add("undo = LeftControl+Z");
                tw.Close();
            }
            if (!lines.Any(line => line.Contains("redo = ")))
            {
                if (File.Exists(BindingsConfigPath))
                {
                    File.Delete(BindingsConfigPath);
                }
                TextWriter tw = new StreamWriter(BindingsConfigPath);
                foreach (string line in lines)
                {
                    tw.WriteLine(line);
                }
                tw.WriteLine("redo = LeftControl+Y");
                lines.Add("redo = LeftControl+Y");
                tw.Close();
            }
            foreach (string line in lines)
            {
                if (line != string.Empty && line.Contains("="))
                {
                    KeyBindingInfo kbInfo = new KeyBindingInfo(line);
                    m_keyBindings.Add(kbInfo);
                }
            }

            keyBindingsDictionary = new Dictionary <string, KeyBindingInfo>();
            foreach (var kbInfo in m_keyBindings)
            {
                keyBindingsDictionary.Add(kbInfo.m_name, kbInfo);
            }
            Debug.Log("[ProceduralObjects] Key Bindings loading ended from " + BindingsConfigPath);
        }
        public void LoadData()
        {
            if (!File.Exists(BindingsConfigPath))
            {
                TextWriter tw = new StreamWriter(BindingsConfigPath);
                tw.WriteLine("---- this is the key bindings configuration file for Procedural Objects ----");
                tw.WriteLine("You can put any key binding you want for each of those actions. Just be");
                tw.WriteLine("sure they are the right names. For example don't right 'Ctrl' but \"LeftControl\"");
                tw.WriteLine("Use the 'plus' symbol to create any key combination, works for any keys or any number of keys.");
                tw.WriteLine("It works for any keys or combination of keys, the list of the names you should use can be found here:");
                tw.WriteLine("https://docs.unity3d.com/ScriptReference/KeyCode.html");
                tw.WriteLine("");
                tw.WriteLine("generalShowHideUI = LeftControl+P+O");
                tw.WriteLine("switchActionMode = LeftControl");
                tw.WriteLine("");
                tw.WriteLine("edition_smoothMovements = LeftShift");
                tw.WriteLine("edition_smallMovements = LeftAlt");
                tw.Close();
            }
            m_keyBindings = new List <KeyBindingInfo>();
            var lines = File.ReadAllLines(BindingsConfigPath).ToList();
            var keys  = ProceduralObjectsMod.SettingsFile.ListKeys().Where(s => s.StartsWith("KB_"));

            foreach (string line in new List <string>(lines))
            {
                if (line != string.Empty && line.Contains("="))
                {
                    var key = line.Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries)[0].Trim();
                    if (keys.Any(k => k.Contains("KB_" + key)))
                    {
                        lines.Remove(line);
                    }
                    else
                    {
                        KeyBindingInfo kbInfo = new KeyBindingInfo(line);
                        m_keyBindings.Add(kbInfo);
                    }
                }
            }

            RewriteCfgLines(lines);

            if (ProceduralObjectsMod.SettingsFile != null)
            {
                foreach (var key in keys)
                {
                    var k = key.Replace("KB_", "");
                    if (m_keyBindings.Any(kb => kb.m_name == k))
                    {
                        continue;
                    }
                    KeyBindingInfo kbInfo = new KeyBindingInfo(k, new SavedInputKey(key, ProceduralObjectsMod.SETTINGS_FILENAME));
                    m_keyBindings.Add(kbInfo);
                }
            }
            keyBindingsDictionary = new Dictionary <string, KeyBindingInfo>();
            foreach (var kbInfo in m_keyBindings)
            {
                keyBindingsDictionary.Add(kbInfo.m_name, kbInfo);
            }
            Debug.Log("[ProceduralObjects] Key Bindings loading ended from " + BindingsConfigPath);
        }