Files @ f28757bb21cb
Branch filter:

Location: ATITD-Tools/Desert-Paint-Lab/ReagentManager.cs - annotation

jmaltzen
Refactor recipe / reaction computation into a common class. Add some file utilities for supporting Mac bundles. Add some scripts for building Mac app bundles. Add a help window that shows the missing reactions.
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
f28757bb21cb
f28757bb21cb
b9934660c784
b9934660c784
f28757bb21cb
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
f28757bb21cb
f28757bb21cb
f28757bb21cb
f28757bb21cb
f28757bb21cb
f28757bb21cb
f28757bb21cb
f28757bb21cb
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
f28757bb21cb
f28757bb21cb
b9934660c784
f28757bb21cb
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
f28757bb21cb
f28757bb21cb
b9934660c784
f28757bb21cb
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
f28757bb21cb
b9934660c784
f28757bb21cb
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
b9934660c784
using System;
using System.IO;
using System.Collections.Generic;
using System.Text.RegularExpressions;

namespace DesertPaintLab
{
	public class ReagentManager
	{
		static Regex reagentRegex = new Regex(@"(?<name>\w+)\s*\|\s*(?<red>\d+),\s*(?<green>\d+),\s*(?<blue>\d+)\s*\|\s*(?<cost>\d+)\s*\|.*");
		static Regex catalystRegex = new Regex(@"(?<name>\w+)\s*\|\s*catalyst\s*\|\s*(?<cost>\d+)\s*\|.*");
		
		static SortedDictionary<string,Reagent> reagents = new SortedDictionary<string, Reagent>();
        static List<string> names = new List<string>();
		
		static Gtk.ListStore nameStore = new Gtk.ListStore(typeof(string));

		static public Gtk.ListStore NameListModel
		{
			get
			{
				return nameStore;	
			}
		}

        static public List<string> 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<string, SortedDictionary<string, Reaction>> reactions)
		{
			foreach (KeyValuePair<string, Reagent> pair1 in reagents)
			{
				SortedDictionary<string, Reaction> dict = new SortedDictionary<string, Reaction>();
				foreach (KeyValuePair<string, Reagent> 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<string, Reagent> 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;
		}
	}
	
}