diff --git a/AutoLineColor/AutoLineColor.csproj b/AutoLineColor/AutoLineColor.csproj
index 46ea447..db3bb91 100644
--- a/AutoLineColor/AutoLineColor.csproj
+++ b/AutoLineColor/AutoLineColor.csproj
@@ -58,6 +58,7 @@
+
diff --git a/AutoLineColor/AutoLineColorMod.cs b/AutoLineColor/AutoLineColorMod.cs
index ab04b6f..72630c1 100644
--- a/AutoLineColor/AutoLineColorMod.cs
+++ b/AutoLineColor/AutoLineColorMod.cs
@@ -1,21 +1,40 @@
using ICities;
+using System;
+using System.Collections.Generic;
namespace AutoLineColor
{
public class AutoLineColorMod : IUserMod
{
+ private Configuration Config;
+ private static Console logger = Console.Instance;
public string Name
{
- get { return "Auto Line Color"; }
+ get { return Constants.ModName; }
}
public string Description
{
- get
- {
- return
- "Monitors all transport line looking for lines set to the default color. When found it sets a new color and a line name";
- }
+ get { return Constants.Description; }
+ }
+
+ public void OnSettingsUI(UIHelperBase helper)
+ {
+ Config = Configuration.Instance;
+ Config.FlushStagedChanges(); //make sure no prior changes are still around
+ //Generate arrays of colors and naming strategies
+ String[] ColorStrategies = Enum.GetNames(typeof(ColorStrategy));
+ String[] NamingStrategies = Enum.GetNames(typeof(NamingStrategy));
+ UIHelperBase group = helper.AddGroup(Constants.ModName);
+ group.AddDropdown("Color Strategy", ColorStrategies, (int)Config.ColorStrategy, Config.ColorStrategyChange);
+ group.AddDropdown("Naming Strategy", NamingStrategies, (int)Config.NamingStrategy, Config.NamingStrategyChange);
+ group.AddSpace(5);
+
+ group.AddGroup("Advanced Settings");
+ group.AddSlider("Max Different Color Picks", 1f, 20f, 1f, (float)Config.MaxDiffColorPickAttempt, Config.MaxDiffColorPickChange);
+ group.AddSlider("MinColorDifference", 1f, 100f, 5f, (float)Config.MinColorDiffPercentage, Config.MinColorDiffChange);
+ group.AddCheckbox("Debug", logger.debug, logger.SetDebug);
+ group.AddButton("Save", Config.Save);
}
}
}
\ No newline at end of file
diff --git a/AutoLineColor/ColorMonitor.cs b/AutoLineColor/ColorMonitor.cs
index 91ef0d0..5b9281b 100644
--- a/AutoLineColor/ColorMonitor.cs
+++ b/AutoLineColor/ColorMonitor.cs
@@ -13,29 +13,31 @@ namespace AutoLineColor
{
public class ColorMonitor : ThreadingExtensionBase
{
- private static DateTimeOffset _lastOutputTime = DateTimeOffset.Now.AddSeconds(-100);
+ private static DateTimeOffset _nextUpdateTime = DateTimeOffset.Now;
private bool _initialized;
private IColorStrategy _colorStrategy;
private INamingStrategy _namingStrategy;
private List _usedColors;
+ private Configuration _config;
+ private static Console logger = Console.Instance;
public override void OnCreated(IThreading threading)
{
-
- Console.Message("loading auto color monitor");
- Console.Message("initializing colors");
+ logger.Message("===============================");
+ logger.Message("Initializing auto color monitor");
+ logger.Message("Initializing colors");
RandomColor.Initialize();
CategorisedColor.Initialize();
GenericNames.Initialize();
- Console.Message("loading current config");
- var config = Configuration.LoadConfig();
- _colorStrategy = SetColorStrategy(config.ColorStrategy);
- _namingStrategy = SetNamingStrategy(config.NamingStrategy);
+ logger.Message("Loading current config");
+ _config = Configuration.Instance;
+ _colorStrategy = SetColorStrategy(_config.ColorStrategy);
+ _namingStrategy = SetNamingStrategy(_config.NamingStrategy);
_usedColors = new List();
- Console.Message("Found color strategy of " + config.ColorStrategy);
- Console.Message("Found naming strategy of " + config.NamingStrategy);
+ logger.Message("Found color strategy of " + _config.ColorStrategy);
+ logger.Message("Found naming strategy of " + _config.NamingStrategy);
_initialized = true;
@@ -45,6 +47,7 @@ public override void OnCreated(IThreading threading)
private static INamingStrategy SetNamingStrategy(NamingStrategy namingStrategy)
{
+ logger.Message("Naming Strategy: " + namingStrategy.ToString());
switch (namingStrategy)
{
case NamingStrategy.None:
@@ -54,13 +57,14 @@ private static INamingStrategy SetNamingStrategy(NamingStrategy namingStrategy)
case NamingStrategy.London:
return new LondonNamingStrategy();
default:
- Console.Error("unknown naming strategy");
+ logger.Error("unknown naming strategy");
return new NoNamingStrategy();
}
}
- private static IColorStrategy SetColorStrategy(ColorStrategy colorStrategy)
+ private IColorStrategy SetColorStrategy(ColorStrategy colorStrategy)
{
+ logger.Message("Color Strategy: " + colorStrategy.ToString());
switch (colorStrategy)
{
case ColorStrategy.RandomHue:
@@ -70,85 +74,88 @@ private static IColorStrategy SetColorStrategy(ColorStrategy colorStrategy)
case ColorStrategy.CategorisedColor:
return new CategorisedColorStrategy();
default:
- Console.Error("unknown color strategy");
+ logger.Error("unknown color strategy");
return new RandomHueStrategy();
}
}
public override void OnUpdate(float realTimeDelta, float simulationTimeDelta)
- {
+ { //Digest changes
+ if (_config.UndigestedChanges == true) {
+ logger.Message("Applying undigested changes");
+ _colorStrategy = SetColorStrategy(_config.ColorStrategy);
+ _namingStrategy = SetNamingStrategy(_config.NamingStrategy);
+ _config.UndigestedChanges = false;
+ }
+
+ if (_initialized == false)
+ return;
+
+ // try and limit how often we are scanning for lines. this ain't that important
+ if (_nextUpdateTime >= DateTimeOffset.Now)
+ return;
+
var theTransportManager = Singleton.instance;
var lines = theTransportManager.m_lines.m_buffer;
try
{
- if (_initialized == false)
- return;
-
-
- // try and limit how often we are scanning for lines. this ain't that important
- if (_lastOutputTime.AddMilliseconds(1000) >= DateTimeOffset.Now)
- return;
-
-
-
- _lastOutputTime = DateTimeOffset.Now;
-
- while (!Monitor.TryEnter(lines, SimulationManager.SYNCHRONIZE_TIMEOUT))
- { }
-
-
+ _nextUpdateTime = DateTimeOffset.Now.AddSeconds(10);
_usedColors = lines.Where(l => l.IsActive()).Select(l => l.m_color).ToList();
- for (ushort counter = 0; counter < lines.Length - 1; counter++)
+ for (ushort i = 0; i < theTransportManager.m_lines.m_buffer.Length - 1; i++)
{
- var transportLine = lines[counter];
-<<<<<<< Updated upstream
-=======
-
+ var transportLine = lines[i];
+ //logger.Message(string.Format("Starting on line {0}", i));
->>>>>>> Stashed changes
if (transportLine.m_flags == TransportLine.Flags.None)
continue;
+ if (!transportLine.Complete)
+ continue;
// only worry about fully created lines
if (!transportLine.IsActive() || transportLine.HasCustomName() || !transportLine.m_color.IsDefaultColor())
continue;
- logger.Message("work to be done!");
-
- var lineName = _namingStrategy.GetName(transportLine);
- var color = _colorStrategy.GetColor(transportLine, _usedColors);
+ logger.Message(string.Format("Working on line {0}", i));
- Console.Message(string.Format("New line found. {0} {1}", lineName, color));
+ var instanceID = new InstanceID();
+ var lineName = theTransportManager.GetLineName(i);
+ var newName = _namingStrategy.GetName(transportLine);
if (!transportLine.HasCustomColor() || transportLine.m_color.IsDefaultColor())
{
- // set the color
+ var color = _colorStrategy.GetColor(transportLine, _usedColors);
+
+ logger.Message(string.Format("About to change line color to {0}", color));
transportLine.m_color = color;
transportLine.m_flags |= TransportLine.Flags.CustomColor;
- }
- else
- {
- Console.Message(transportLine.m_color.ToString());
+ theTransportManager.SetLineColor(i, color);
+
+ logger.Message(string.Format("Changed line color. '{0}' {1} -> {2}", lineName, theTransportManager.GetLineColor(i), color));
}
- if (string.IsNullOrEmpty(lineName) == false && transportLine.HasCustomName() == false)
- {
- logger.Message("New line name time!");
- // set the name
- Singleton.instance.SetName(new InstanceID { TransportLine = counter },
- lineName);
+ if (string.IsNullOrEmpty(newName) == false &&
+ transportLine.HasCustomName() == false) {
+ logger.Message(string.Format("About to rename line to {0}", newName));
+
transportLine.m_flags |= TransportLine.Flags.CustomName;
+ theTransportManager.SetLineName(i, newName);
+
+ logger.Message(string.Format("Renamed Line '{0}' -> '{1}'", lineName, newName));
}
- lines[counter] = transportLine;
+ logger.Message(string.Format("Line is now {0} and {1}",
+ theTransportManager.GetLineName(i),
+ theTransportManager.GetLineColor(i)));
+
+ lines[i] = transportLine;
}
}
catch (Exception ex)
{
- Console.Message(ex.ToString(), PluginManager.MessageType.Message);
+ logger.Error(ex.ToString());
}
finally
{
@@ -180,7 +187,7 @@ public static bool IsColorEqual(this Color32 color1, Color32 color2)
public static bool IsActive(this TransportLine transportLine)
{
- if ((transportLine.m_flags & (TransportLine.Flags.Complete | TransportLine.Flags.Created | TransportLine.Flags.Hidden)) == 0)
+ if ((transportLine.m_flags & (TransportLine.Flags.Created | TransportLine.Flags.Hidden)) == 0)
return false;
// stations are marked with this flag
diff --git a/AutoLineColor/Coloring/CategorisedColor.cs b/AutoLineColor/Coloring/CategorisedColor.cs
index 2279155..d530c52 100644
--- a/AutoLineColor/Coloring/CategorisedColor.cs
+++ b/AutoLineColor/Coloring/CategorisedColor.cs
@@ -53,7 +53,7 @@ class CategorisedColor
private const string DefaultPaleColors = "#bccaff, #ffbcbc, #bcffd2, #d6bcff, #fffbbc, #bcddff, #ffbcc6, #bcf7bd, #c2bcff, #ffe4bc, #bcf3ff, #ffbce0, #c7ffbc, #bcbcff, #ffc1bc, #bcffe8, #f5bcff, #daffbc, #a6baff, #ffa6a6, #a6ffc4, #cba6ff, #fffaa6, #a6d3ff, #ffa6b5, #a6f5a8, #afa6ff, #ffdda6, #a6efff, #ffa6d7, #b6ffa6, #a6a7ff, #ffaea6, #a6ffe1, #f3a6ff, #d0ffa6, #7f9eff, #ff7f7f, #7fffae, #b77fff, #fff97f, #7fc3ff, #ff7f97, #7ff282, #8d7fff, #ffd17f, #7feaff, #ff7fc9, #97ff7f, #7f80ff, #ff8c7f, #7fffd7, #ef7fff, #bfff7f";
private const string DefaultDarkColors = "#7f2200, #007f64, #75007f, #527f00, #00377f, #7f0100, #007f45, #4c007f, #7f7b00, #00567f, #7f002f, #007710, #24007f, #7f6000, #00727f, #7f005a, #307f00, #000a7f";
-
+ private static Console logger = Console.Instance;
private static List _bright_colors;
private static List _pale_colors;
private static List _dark_colors;
@@ -80,13 +80,13 @@ private static List BuildColorList(string defaultColorList, string file
}
else
{
- Console.Message("No colors found, writing default values to " + fullPath);
+ logger.Message("No colors found, writing default values to " + fullPath);
File.WriteAllText(fullPath, unparsedColors);
}
}
catch (Exception ex)
{
- Console.Error("error reading colors from disk " + ex);
+ logger.Error("error reading colors from disk " + ex);
}
// split on new lines, commas and semi-colons
diff --git a/AutoLineColor/Coloring/CategorisedColorStrategy.cs b/AutoLineColor/Coloring/CategorisedColorStrategy.cs
index c51770c..7f6b963 100644
--- a/AutoLineColor/Coloring/CategorisedColorStrategy.cs
+++ b/AutoLineColor/Coloring/CategorisedColorStrategy.cs
@@ -19,7 +19,6 @@ public Color32 GetColor(TransportLine transportLine)
}
}
-
public Color32 GetColor(TransportLine transportLine, System.Collections.Generic.List usedColors)
{
switch (transportLine.Info.m_transportType)
diff --git a/AutoLineColor/Coloring/RandomColor.cs b/AutoLineColor/Coloring/RandomColor.cs
index 1d7922d..c1b2af4 100644
--- a/AutoLineColor/Coloring/RandomColor.cs
+++ b/AutoLineColor/Coloring/RandomColor.cs
@@ -17,6 +17,7 @@ class RandomColor
private const string DefaultGreenColors = "#6af500, #54b807, #7ad633, #8df53d, #467a1f, #66a832, #629939, #527a33, #87c756, #b6f587, #75995a, #a9d687, #97b87f, #738a62, #349912, #54d629, #3d8a24, #56b835, #83f55d, #87e667, #70b858, #629950, #8ed676, #7fb86c, #567a49, #b8f5a4, #087a00, #13a808, #2f7a2a, #45a83e, #427a3e, #a0f59a, #9cd698, #0be625, #3ed650, #4ef562, #6bd678, #7ff58d, #65b86f, #57995f, #79b880, #547a59, #06b83b, #048a2c, #2ab855, #28994a, #49e678, #2f8a4a, #367a4a, #74d691, #89f5a9, #5d996f, #93e6ac, #7fb890, #98d6ab";
private const string DefaultOrangeColors = "#a80000, #c70202, #e51515, #991212, #c71c1c, #e52c2c, #b82727, #992525, #f52f02, #b82504, #991f03, #e5411c, #99311a, #b84025, #f55d3b, #d65133, #b84402, #f55e07, #d65911, #99400c, #c7632a, #a85525, #f57d38, #e58005, #c76f04, #a86718, #f5992a, #c7812c, #996423, #997000, #b88806, #f5bc20, #d6a51e, #a88628, #d6c400, #a89c16, #f5e322, #c7ba2c";
+ private static Console logger = Console.Instance;
private static Dictionary _colors;
public static void Initialize()
@@ -49,13 +50,13 @@ private static Color32[] BuildColorList(string defaultColorList, string fileName
}
else
{
- Console.Message("No colors found, writing default values to " + fullPath);
+ logger.Message("No colors found, writing default values to " + fullPath);
File.WriteAllText(fullPath, unparsedColors);
}
}
catch (Exception ex)
{
- Console.Error("error reading colors from disk " + ex);
+ logger.Error("error reading colors from disk " + ex);
}
// split on new lines, commas and semi-colons
@@ -117,7 +118,7 @@ public static Color32 GetColor(ColorFamily colorFamily, List usedColors
color = GetColor(colorFamily);
difference = CompareColorWithUsedColors(usedColors, color);
- } while (difference < Configuration.Instance.MinimumColorDifferencePercentage && (atempts < Configuration.Instance.MaximunDifferentCollorPickAtempt));
+ } while (difference < Configuration.Instance.MinColorDiffPercentage && (atempts < Configuration.Instance.MaxDiffColorPickAttempt));
if (difference <= 0)
{
@@ -130,7 +131,7 @@ public static Color32 GetColor(ColorFamily colorFamily, List usedColors
{
color = colorItem;
differentColorFound = true;
- Console.Message(string.Format("Color not repeated: {0} Color2: {2} Diference: {1}", color, CompareColorWithUsedColors(usedColors, color), usedColor));
+ logger.Message(string.Format("Color not repeated: {0} Color2: {2} Diference: {1}", color, CompareColorWithUsedColors(usedColors, color), usedColor));
break;
}
}
@@ -140,7 +141,7 @@ public static Color32 GetColor(ColorFamily colorFamily, List usedColors
}
- Console.Message(string.Format("Diference: {0} Atempts: {1}", difference, atempts));
+ logger.Message(string.Format("Diference: {0} Atempts: {1}", difference, atempts));
return color;
}
@@ -176,7 +177,7 @@ public static double CompareColors(Color32 color1, Color32 color2)
var p = d / Math.Sqrt((255) ^ 2 + (255) ^ 2 + (255) ^ 2 );
if (Math.Abs(p) <= 0)
- Console.Message(string.Format("Color1: {1} Color2: {2} D: {0}", d, color1, color2));
+ logger.Message(string.Format("Color1: {1} Color2: {2} D: {0}", d, color1, color2));
return p * 100;
}
}
diff --git a/AutoLineColor/Coloring/RandomColorStrategy.cs b/AutoLineColor/Coloring/RandomColorStrategy.cs
index 286f239..5e8d57e 100644
--- a/AutoLineColor/Coloring/RandomColorStrategy.cs
+++ b/AutoLineColor/Coloring/RandomColorStrategy.cs
@@ -9,7 +9,7 @@ public Color32 GetColor(TransportLine transportLine)
{
return RandomColor.GetColor(ColorFamily.Any);
}
-
+
public Color32 GetColor(TransportLine transportLine, System.Collections.Generic.List usedColors)
{
return RandomColor.GetColor(ColorFamily.Any, usedColors);
diff --git a/AutoLineColor/Configuration.cs b/AutoLineColor/Configuration.cs
index 70a1b4d..9f13ff0 100644
--- a/AutoLineColor/Configuration.cs
+++ b/AutoLineColor/Configuration.cs
@@ -2,7 +2,6 @@
using System.IO;
using System.Xml;
using System.Xml.Serialization;
-using ColossalFramework.IO;
namespace AutoLineColor
{
@@ -11,48 +10,154 @@ public class Configuration
{
public ColorStrategy ColorStrategy { get; set; }
public NamingStrategy NamingStrategy { get; set; }
- public int? MinimumColorDifferencePercentage { get; set; }
- public int? MaximunDifferentCollorPickAtempt { get; set; }
+ public int? MinColorDiffPercentage { get; set; }
+ public int? MaxDiffColorPickAttempt { get; set; }
+ public volatile bool UndigestedChanges;
- private const string ConfigFileName = "AutoLineColorSettings.xml";
- private const string ModName = "AutoLineColor";
+ //Staged changes. These are not applied until 'Save' is clicked
+ private ColorStrategy? StagedColorStrategy { get; set; }
+ private NamingStrategy? StagedNamingStrategy { get; set; }
+ private int? StagedMinColorDiffPercentage { get; set; }
+ private int? StagedMaxDiffColorPickAttempt { get; set; }
+
+
+ private const int DefaultMaxDiffColorPickAttempt = 10;
+ private const int DefaultMinColorDiffPercent = 5;
+
+ private static Configuration _instance;
+ private static Console logger = Console.Instance;
public static Configuration LoadConfig()
{
+ bool isDirty = false;
+ Configuration config;
try
{
var serializer = new XmlSerializer(typeof(Configuration));
- Configuration config;
+ var fullConfigPath = Constants.ConfigFileName;
- var fullConfigPath = GetModFileName(ConfigFileName);
if (File.Exists(fullConfigPath) == false)
{
- Console.Message("No config file. Building default and writing it to " + fullConfigPath);
+ logger.Message("No config file. Building default and writing it to " + fullConfigPath);
config = GetDefaultConfig();
- SaveConfig(config);
- return config;
+ isDirty = true;
}
+ else
+ {
+ logger.Message("Config file exists. Using it");
+ using (var reader = XmlReader.Create(fullConfigPath)) {
+ config = (Configuration)serializer.Deserialize(reader);
+ }
+ //check new configuration properties
+ if (!config.MaxDiffColorPickAttempt.HasValue ||
+ !config.MinColorDiffPercentage.HasValue) {
- using (var reader = XmlReader.Create(fullConfigPath))
- {
- config = (Configuration)serializer.Deserialize(reader);
- }
- //check new configuration properties
- if (!config.MaximunDifferentCollorPickAtempt.HasValue || !config.MinimumColorDifferencePercentage.HasValue)
- {
- var defaultConfig = GetDefaultConfig();
- config.MinimumColorDifferencePercentage = defaultConfig.MinimumColorDifferencePercentage;
- config.MaximunDifferentCollorPickAtempt = defaultConfig.MaximunDifferentCollorPickAtempt;
- SaveConfig(config);
- }
- return config;
+ config.UndigestedChanges = false;
+ config.MaxDiffColorPickAttempt = config.MaxDiffColorPickAttempt.HasValue ?
+ config.MaxDiffColorPickAttempt : DefaultMaxDiffColorPickAttempt;
+ config.MinColorDiffPercentage = config.MinColorDiffPercentage.HasValue ?
+ config.MinColorDiffPercentage : DefaultMinColorDiffPercent;
+ isDirty = true;
+ }
+ }
}
catch (Exception ex)
{
- Console.Error("Error reading configuration settings - " + ex);
- return GetDefaultConfig();
+ //Don't save changes if it failed for some reason
+ logger.Error("Error reading configuration settings - " + ex);
+ config = GetDefaultConfig();
+ }
+
+ if (isDirty)
+ {
+ config.Save();
+ }
+
+ return config;
+ }
+
+ public void ColorStrategyChange(int Strategy)
+ {
+ this.StagedColorStrategy = (ColorStrategy)Strategy;
+ }
+
+ public void NamingStrategyChange(int Strategy)
+ {
+ this.StagedNamingStrategy = (NamingStrategy)Strategy;
+ }
+
+ public void MinColorDiffChange(float MinDiff)
+ {
+ this.StagedMinColorDiffPercentage = (int)MinDiff;
+ }
+
+ public void MaxDiffColorPickChange(float MaxColorPicks)
+ {
+ this.StagedMaxDiffColorPickAttempt = (int)MaxColorPicks;
+ }
+
+ public void FlushStagedChanges()
+ {
+ StagedColorStrategy = null;
+ StagedNamingStrategy = null;
+ StagedMaxDiffColorPickAttempt = null;
+ StagedMinColorDiffPercentage = null;
+ }
+
+ public void Save()
+ {
+ var serializer = new XmlSerializer(typeof(Configuration));
+
+ logger.Message("Saving changes to config file");
+
+ //If any changes have occured, apply them, otherwise keep the current value
+ this.ColorStrategy = this.StagedColorStrategy.HasValue
+ ? this.StagedColorStrategy.Value
+ : this.ColorStrategy;
+ this.NamingStrategy = this.StagedNamingStrategy.HasValue
+ ? this.StagedNamingStrategy.Value
+ : this.NamingStrategy;
+ this.MaxDiffColorPickAttempt =
+ this.StagedMaxDiffColorPickAttempt.HasValue
+ ? this.StagedMaxDiffColorPickAttempt.Value
+ : this.MaxDiffColorPickAttempt;
+ this.MinColorDiffPercentage =
+ this.StagedMinColorDiffPercentage.HasValue
+ ? this.StagedMinColorDiffPercentage.Value
+ : this.MinColorDiffPercentage;
+
+ //clear changes and log
+ if (this.StagedColorStrategy.HasValue)
+ {
+ logger.Message("ColorStrategy changed to " + this.StagedColorStrategy.Value.ToString());
+ }
+
+ if (this.StagedNamingStrategy.HasValue)
+ {
+ logger.Message("NamingStrategy changed to " + this.StagedNamingStrategy.Value.ToString());
+ }
+
+ if (this.StagedMaxDiffColorPickAttempt.HasValue)
+ {
+ logger.Message("MaxDiffColorPickAttempt changed to " + this.StagedMaxDiffColorPickAttempt.Value.ToString());
+ }
+
+ if (this.StagedMinColorDiffPercentage.HasValue)
+ {
+ logger.Message("MinColorDiffPercentage changed to " + this.StagedMinColorDiffPercentage.Value.ToString());
+ }
+
+ FlushStagedChanges();
+
+ //How we let the ColorMonitor thread know to update the strategies
+ logger.Message("Marking undigested changes");
+ this.UndigestedChanges = true;
+
+ //Save to disk
+ using (var writer = XmlWriter.Create(Constants.ConfigFileName)) {
+ serializer.Serialize(writer, this);
}
}
@@ -67,20 +172,12 @@ private static Configuration GetDefaultConfig()
{
ColorStrategy = ColorStrategy.RandomColor,
NamingStrategy = NamingStrategy.Districts,
- MaximunDifferentCollorPickAtempt = 10,
- MinimumColorDifferencePercentage = 5
+ MaxDiffColorPickAttempt = DefaultMaxDiffColorPickAttempt,
+ MinColorDiffPercentage = DefaultMinColorDiffPercent,
+ UndigestedChanges = false
};
}
- private static void SaveConfig(Configuration config)
- {
- var serializer = new XmlSerializer(typeof(Configuration));
- using (var writer = XmlWriter.Create(GetModFileName(ConfigFileName)))
- {
- serializer.Serialize(writer, config);
- }
- }
- private static Configuration _instance;
public static Configuration Instance
{
get
@@ -92,7 +189,6 @@ public static Configuration Instance
return _instance;
}
}
-
}
public enum ColorStrategy
diff --git a/AutoLineColor/Console.cs b/AutoLineColor/Console.cs
index 9e38bd3..836777f 100644
--- a/AutoLineColor/Console.cs
+++ b/AutoLineColor/Console.cs
@@ -4,39 +4,128 @@
using System.IO;
using System.Linq;
using System.Text;
+using UnityEngine;
namespace AutoLineColor
{
- public static class Console
+ public class Console
{
+ private static Console _instance;
+ private bool _debug = false;
+
+ private StreamWriter log;
+ private bool log_opened;
+
+ private Console()
+ {
#if DEBUG
- private static bool debug = true;
-#else
- private static bool debug = false;
+ _debug = true;
#endif
+ try
+ {
+ log = new StreamWriter(new FileStream(Constants.LogFileName, FileMode.Append | FileMode.Create, FileAccess.Write, FileShare.ReadWrite));
+ }
+ catch (Exception e)
+ {
+ WriteMessage("Could not open log file", PluginManager.MessageType.Warning);
+ }
- public static void Message(string p, PluginManager.MessageType messageType)
+ log_opened = true;
+ }
+
+ public static Console Instance
{
- if (!debug)
- return;
+ get
+ {
+ if (_instance == null)
+ {
+ _instance = new Console();
+ }
+ return _instance;
+ }
+ }
- DebugOutputPanel.AddMessage(messageType, p);
+ public bool debug
+ {
+ get
+ {
+ return _debug;
+ }
}
- public static void Message(string p)
+ private static string FormatMessage(string msg, PluginManager.MessageType Type)
{
- if (!debug)
- return;
+ string formatted;
+ try
+ {
+ formatted = string.Format("{0}({1}) {2}", "[AutoLineColor]", Type.ToString(), msg);
+ }
+ catch (Exception e)
+ {
+ DebugOutputPanel.AddMessage(PluginManager.MessageType.Error, e.ToString());
+ formatted = msg;
+ }
+ return formatted;
+ }
+
+ public void ToggleDebug()
+ {
+ _debug = !_debug;
+ }
- DebugOutputPanel.AddMessage(PluginManager.MessageType.Message, p);
+ public void SetDebug(bool should_debug)
+ {
+ _debug = should_debug;
+ }
+
+ public void Message(string p, PluginManager.MessageType messageType)
+ {
+ this.WriteMessage(p, messageType);
+ }
+
+ public void Message(string p)
+ {
+ this.WriteMessage(p, PluginManager.MessageType.Message);
+ }
+
+ public void Warning(string p) {
+ this.WriteMessage(p, PluginManager.MessageType.Warning);
+ }
+
+ public void Error(string p)
+ {
+ this.WriteMessage(p, PluginManager.MessageType.Error);
}
- internal static void Error(string p)
+ private void WriteMessage(string p, PluginManager.MessageType Type)
{
- if (!debug)
+ if(!this._debug)
+ {
return;
+ }
+ string msg = FormatMessage(p, Type);
+ DebugOutputPanel.AddMessage(Type, msg);
+ if (log_opened) {
+ log.WriteLine(msg);
+ log.Flush();
+ }
- DebugOutputPanel.AddMessage(PluginManager.MessageType.Error, p);
+ //Unity engine logger
+ switch(Type)
+ {
+ case PluginManager.MessageType.Error:
+ Debug.LogError(msg);
+ break;
+ case PluginManager.MessageType.Message:
+ Debug.Log(msg);
+ break;
+ case PluginManager.MessageType.Warning:
+ Debug.LogWarning(msg);
+ break;
+ default:
+ Debug.Log(msg);
+ break;
+ }
}
}
}
diff --git a/AutoLineColor/Constants.cs b/AutoLineColor/Constants.cs
new file mode 100644
index 0000000..b90767a
--- /dev/null
+++ b/AutoLineColor/Constants.cs
@@ -0,0 +1,12 @@
+using System;
+
+namespace AutoLineColor {
+ public static class Constants {
+ public const string ConfigFileName = "AutoLineColorSettings.xml";
+ public const string LogFileName = "AutoLineColorSettings.log";
+ public const string ModName = "Auto Line Color";
+ public const string Description =
+ "Monitors all transport line looking for lines set to the default color." +
+ " When found it sets a new color and a line name";
+ }
+}
diff --git a/AutoLineColor/Naming/DistrictNamingStrategy.cs b/AutoLineColor/Naming/DistrictNamingStrategy.cs
index f7d07aa..e9a5857 100644
--- a/AutoLineColor/Naming/DistrictNamingStrategy.cs
+++ b/AutoLineColor/Naming/DistrictNamingStrategy.cs
@@ -8,6 +8,7 @@ namespace AutoLineColor.Naming
{
internal class DistrictNamingStrategy : INamingStrategy
{
+ private static Console logger = Console.Instance;
public string GetName(TransportLine transportLine)
{
int stopCount;
@@ -99,7 +100,7 @@ private string BuildRandomName(ushort lineNumber, TransportInfo.TransportType tr
catch (Exception ex)
{
// if we get an exception we'll just drop back to Line number and color name
- Console.Message(ex.ToString(), PluginManager.MessageType.Message);
+ logger.Error(ex.ToString());
}
return string.Format("#{0} Line", lineNumber);
diff --git a/AutoLineColor/Naming/GenericNames.cs b/AutoLineColor/Naming/GenericNames.cs
index cb42743..0dc6969 100644
--- a/AutoLineColor/Naming/GenericNames.cs
+++ b/AutoLineColor/Naming/GenericNames.cs
@@ -17,6 +17,7 @@ public class GenericNames
"November,Oscar,Papa,Quebec,Romeo,Sierra,Tango,Uniform,Victor,Whiskey,Yankee,Zulu," +
"Adams,Boston,Chicago,Denver,Easy,Frank,George,Henry,Ida,John,King,Lincoln,Mary," +
"New,Ocean,Peter,Queen,Roger,Sugar,Thomas,Union,Victor,William,Young,Zero";
+ private static Console logger = Console.Instance;
public static void Initialize()
{
@@ -31,13 +32,13 @@ public static void Initialize()
}
else
{
- Console.Message("No names found, writing default values to " + fullPath);
+ logger.Message("No names found, writing default values to " + fullPath);
File.WriteAllText(fullPath, unparsedNames);
}
}
catch (Exception ex)
{
- Console.Error("error reading names from disk " + ex);
+ logger.Error("error reading names from disk " + ex);
}
// split on new lines, commas and semi-colons
diff --git a/AutoLineColor/Naming/NoNamingStrategy.cs b/AutoLineColor/Naming/NoNamingStrategy.cs
index 9e5548d..d011156 100644
--- a/AutoLineColor/Naming/NoNamingStrategy.cs
+++ b/AutoLineColor/Naming/NoNamingStrategy.cs
@@ -6,5 +6,9 @@ public string GetName(TransportLine transportLine)
{
return null;
}
+
+ public NamingStrategy GetStrategy() {
+ return NamingStrategy.None;
+ }
}
}
\ No newline at end of file