Files @ be9989c2c66e
Branch filter:

Location: ATITD-Tools/Desert-Paint-Lab/Settings.cs

Jason Maltzen
Reduce the amount of debug output. Fix a crash when a potential window candidate is detected on the top row of the screen (which isn't possible). Break out of screen region tests early when the frame isn't detected to reduce how long a scan takes.
using System;
using System.Collections.Generic;
using System.IO;
using System.Text.RegularExpressions;

namespace DesertPaintLab
{
    public class Settings
    {
        public Settings()
        {
        }

        private Dictionary<string, string> _settings = new Dictionary<string, string>();

        public void Get(string key, out int value)
        {
            value = 0;
            string valStr;
            if ( _settings.TryGetValue(key.ToLower(), out valStr) )
            {
                Int32.TryParse(valStr, out value);
            }
        }
        public void Get(string key, out bool value)
        {
            value = false;
            string valStr;
            if ( _settings.TryGetValue(key.ToLower(), out valStr) )
            {
                Boolean.TryParse(valStr, out value);
            }
        }
        public void Set(string key, int value)
        {
            _settings[key.ToLower()] = value.ToString();
        }
        public void Set(string key, bool value)
        {
            _settings[key.ToLower()] = value.ToString();
        }

        public void Reset()
        {
            _settings.Clear();
        }

        public void Save(string settingsPath)
        {
            using (StreamWriter writer = new StreamWriter(settingsPath))
            {
                foreach (KeyValuePair<string, string> pair in _settings)
                {
                    writer.WriteLine("{0}={1}", pair.Key, pair.Value);
                }
            }
        }
        
        static Regex optionEntry = new Regex(@"(?<opt>[^#=][^=]*)=(?<optval>.*)$");
        public bool Load(string settingsPath)
        {
            if (System.IO.File.Exists(settingsPath))
            {
                string line;
                Match match;
                using (StreamReader reader = new StreamReader(settingsPath))
                {
                    while ((line = reader.ReadLine()) != null) 
                    {
                        match = optionEntry.Match(line);
                        if (match.Success)
                        {
                            String optName = match.Groups["opt"].Value.ToLower();
                            String optVal = match.Groups["optval"].Value.Trim();
                            if (optName.Equals("debug"))
                            {
                                // convert
                                optName = "enabledebugmenu";
                            }
                            _settings[optName.ToLower()] = optVal;
                        }
                    }
                }
                return true;
            }
            return false;
        }
    }
}