using System; using System.IO; using System.Collections.Generic; using System.Text.RegularExpressions; namespace DesertPaintLab { public class ReagentManager { static Regex reagentRegex = new Regex(@"(?\w+)\s*\|\s*(?\d+),\s*(?\d+),\s*(?\d+)\s*\|\s*(?\d+)\s*\|.*"); static Regex catalystRegex = new Regex(@"(?\w+)\s*\|\s*catalyst\s*\|\s*(?\d+)\s*\|.*"); static SortedDictionary reagents = new SortedDictionary(); static List names = new List(); static Gtk.ListStore nameStore = new Gtk.ListStore(typeof(string)); static public Gtk.ListStore NameListModel { get { return nameStore; } } static public List Names { get { return names; } } public ReagentManager () { } public static void Load(string file) { Match match; string line; reagents.Clear(); using (StreamReader reader = new StreamReader(file)) { while ((line = reader.ReadLine()) != null) { match = reagentRegex.Match(line); if (match.Success) { string name = match.Groups["name"].Value; reagents.Add(name, new Reagent(name, byte.Parse(match.Groups["red"].Value), byte.Parse(match.Groups["green"].Value), byte.Parse(match.Groups["blue"].Value), int.Parse(match.Groups["cost"].Value))); nameStore.AppendValues(name); names.Add(name); } else { match = catalystRegex.Match(line); if (match.Success) { string name = match.Groups["name"].Value; int cost = int.Parse(match.Groups["cost"].Value); reagents.Add(name, new Reagent(name, cost)); nameStore.AppendValues(name); names.Add(name); } } } } } public static void InitializeReactions(ref SortedDictionary> reactions) { foreach (KeyValuePair pair1 in reagents) { SortedDictionary dict = new SortedDictionary(); foreach (KeyValuePair pair2 in reagents) { if (pair1.Key != pair2.Key) { dict.Add(pair2.Key, null); } } reactions.Add(pair1.Key, dict); } } public static void PopulateReagents(ref Gtk.ComboBox comboBox) { comboBox.Clear(); Gtk.CellRendererText cell = new Gtk.CellRendererText(); comboBox.PackStart(cell, false); comboBox.AddAttribute(cell, "text", 0); Gtk.ListStore store = new Gtk.ListStore(typeof(string)); comboBox.Model = store; store.AppendValues(""); foreach (string name in names) { store.AppendValues(name); } } /* public static void PopulatePigments(ref Gtk.ComboBox comboBox) { comboBox.Clear(); Gtk.CellRendererText cell = new Gtk.CellRendererText(); comboBox.PackStart(cell, false); comboBox.AddAttribute(cell, "text", 0); Gtk.ListStore store = new Gtk.ListStore(typeof(string)); comboBox.Model = store; store.AppendValues(""); foreach (KeyValuePair pair in reagents) { if (!pair.Value.IsCatalyst) { store.AppendValues(pair.Key); } } } */ public static Reagent GetReagent(string reagentName) { Reagent returnVal; reagents.TryGetValue(reagentName, out returnVal); return returnVal; } } }