From 35e1992107e7c440837665e2c4e3fd50509e066a Mon Sep 17 00:00:00 2001 From: Victor-Philipp Negoescu Date: Mon, 2 Jan 2017 23:32:57 +0100 Subject: [PATCH] TMPE version 1.8.12: - Updated for game version 1.6.2-f1 - Bugfix: After leaving the "Manual traffic lights" mode traffic light simulation is not cleaned up correctly (thanks to @ diezelunderwood for reporting this issue) - Bugfix: Insufficient access rights to log file causes the mod to crash --- README.md | 5 +++ TLM/TLM/Log.cs | 32 +++++++++++++++++-- .../TrafficLight/TrafficLightSimulation.cs | 12 +++++-- TLM/TLM/TrafficManagerMod.cs | 8 ++--- .../UI/SubTools/ManualTrafficLightsTool.cs | 1 - TLM/TLM/UI/TrafficManagerTool.cs | 10 ++++++ 6 files changed, 59 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 7e098e53..fa717439 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,11 @@ A work-in-progress modification for **Cities: Skylines** to add additional traff User manual: http://www.viathinksoft.de/tmpe # Changelog +1.8.12, 01/02/2017 +- Updated for game version 1.6.2-f1 +- Bugfix: After leaving the "Manual traffic lights" mode traffic light simulation is not cleaned up correctly (thanks to @ diezelunderwood for reporting this issue) +- Bugfix: Insufficient access rights to log file causes the mod to crash + 1.8.11, 01/02/2017 - Bugfix: Speed limits for elevated/underground road segments are sometimes not correctly loaded (thanks to @Pirazel and @[P.A.N] Uf0 for reporting this issue) diff --git a/TLM/TLM/Log.cs b/TLM/TLM/Log.cs index 9a6defae..9e2ccf9b 100644 --- a/TLM/TLM/Log.cs +++ b/TLM/TLM/Log.cs @@ -22,14 +22,24 @@ private enum LogLevel { private static string logFilename = Path.Combine(Application.dataPath, "TMPE.log"); private static Stopwatch sw = Stopwatch.StartNew(); private static bool logToConsole = false; + private static bool logFileAccessible = true; static Log() { - File.Delete(logFilename); + try { + if (File.Exists(logFilename)) + File.Delete(logFilename); + } catch (Exception) { + logFileAccessible = false; + } } [Conditional("DEBUG")] public static void _Debug(string s) { + if (!logFileAccessible) { + return; + } + try { Monitor.Enter(logLock); if (logToConsole) @@ -43,6 +53,10 @@ public static void _Debug(string s) { } public static void Info(string s) { + if (!logFileAccessible) { + return; + } + try { #if DEBUG if (logToConsole) @@ -58,6 +72,10 @@ public static void Info(string s) { } public static void Error(string s) { + if (!logFileAccessible) { + return; + } + try { #if DEBUG if (logToConsole) @@ -73,6 +91,10 @@ public static void Error(string s) { } public static void Warning(string s) { + if (!logFileAccessible) { + return; + } + try { #if DEBUG if (logToConsole) @@ -88,6 +110,10 @@ public static void Warning(string s) { } private static void LogToFile(string log, LogLevel level) { + if (! logFileAccessible) { + return; + } + try { using (StreamWriter w = File.AppendText(logFilename)) { w.WriteLine($"[{level.ToString()}] @ {sw.ElapsedTicks} {log}"); @@ -96,7 +122,9 @@ private static void LogToFile(string log, LogLevel level) { w.WriteLine(); } } - } catch (Exception) { } + } catch (Exception) { + logFileAccessible = false; + } } } diff --git a/TLM/TLM/TrafficLight/TrafficLightSimulation.cs b/TLM/TLM/TrafficLight/TrafficLightSimulation.cs index 53b30e44..be59109f 100644 --- a/TLM/TLM/TrafficLight/TrafficLightSimulation.cs +++ b/TLM/TLM/TrafficLight/TrafficLightSimulation.cs @@ -43,10 +43,14 @@ public void SetupManualTrafficLight() { manualTrafficLights = true; } - public void DestroyManualTrafficLight() { + internal void DestroyManualTrafficLight() { if (IsTimedLight()) return; + if (!IsManualLight()) + return; manualTrafficLights = false; + + TrafficPriorityManager.Instance.RemovePrioritySegments(NodeId); } public void SetupTimedTrafficLight(List nodeGroup) { @@ -56,7 +60,9 @@ public void SetupTimedTrafficLight(List nodeGroup) { TimedLight = new TimedTrafficLights(NodeId, nodeGroup); } - public void DestroyTimedTrafficLight() { + internal void DestroyTimedTrafficLight() { + if (!IsTimedLight()) + return; var timedLight = TimedLight; TimedLight = null; @@ -64,6 +70,8 @@ public void DestroyTimedTrafficLight() { timedLight.Destroy(); } + TrafficPriorityManager.Instance.RemovePrioritySegments(NodeId); + /*if (!IsManualLight() && timedLight != null) timedLight.Destroy();*/ } diff --git a/TLM/TLM/TrafficManagerMod.cs b/TLM/TLM/TrafficManagerMod.cs index 521192d5..4503a4b2 100644 --- a/TLM/TLM/TrafficManagerMod.cs +++ b/TLM/TLM/TrafficManagerMod.cs @@ -5,13 +5,13 @@ namespace TrafficManager { public class TrafficManagerMod : IUserMod { - public static readonly string Version = "1.8.11"; + public static readonly string Version = "1.8.12"; - public static readonly uint GameVersion = 159638032u; + public static readonly uint GameVersion = 159768848u; public static readonly uint GameVersionA = 1u; public static readonly uint GameVersionB = 6u; - public static readonly uint GameVersionC = 1u; - public static readonly uint GameVersionBuild = 2u; + public static readonly uint GameVersionC = 2u; + public static readonly uint GameVersionBuild = 1u; public string Name => "Traffic Manager: President Edition"; diff --git a/TLM/TLM/UI/SubTools/ManualTrafficLightsTool.cs b/TLM/TLM/UI/SubTools/ManualTrafficLightsTool.cs index 295a9d6c..86cf1367 100644 --- a/TLM/TLM/UI/SubTools/ManualTrafficLightsTool.cs +++ b/TLM/TLM/UI/SubTools/ManualTrafficLightsTool.cs @@ -693,7 +693,6 @@ public override void Cleanup() { if (nodeSimulation == null || !nodeSimulation.IsManualLight()) return; - nodeSimulation.DestroyManualTrafficLight(); tlsMan.RemoveNodeFromSimulation(SelectedNodeId, true, false); } } diff --git a/TLM/TLM/UI/TrafficManagerTool.cs b/TLM/TLM/UI/TrafficManagerTool.cs index c651e95f..2a114f0f 100644 --- a/TLM/TLM/UI/TrafficManagerTool.cs +++ b/TLM/TLM/UI/TrafficManagerTool.cs @@ -127,8 +127,18 @@ public static void SetToolMode(ToolMode mode) { bool toolModeChanged = (mode != _toolMode); var oldToolMode = _toolMode; + var oldSubTool = subTools[(int)oldToolMode]; _toolMode = mode; activeSubTool = subTools[(int)_toolMode]; + + if (oldSubTool != null) { + if ((oldToolMode == ToolMode.TimedLightsSelectNode || oldToolMode == ToolMode.TimedLightsShowLights || oldToolMode == ToolMode.TimedLightsAddNode || oldToolMode == ToolMode.TimedLightsRemoveNode)) { // TODO refactor to SubToolMode + if (mode != ToolMode.TimedLightsSelectNode && mode != ToolMode.TimedLightsShowLights && mode != ToolMode.TimedLightsAddNode && mode != ToolMode.TimedLightsRemoveNode) + oldSubTool.Cleanup(); + } else + oldSubTool.Cleanup(); + } + if (toolModeChanged && activeSubTool != null) { if ((oldToolMode == ToolMode.TimedLightsSelectNode || oldToolMode == ToolMode.TimedLightsShowLights || oldToolMode == ToolMode.TimedLightsAddNode || oldToolMode == ToolMode.TimedLightsRemoveNode)) { // TODO refactor to SubToolMode if (mode != ToolMode.TimedLightsSelectNode && mode != ToolMode.TimedLightsShowLights && mode != ToolMode.TimedLightsAddNode && mode != ToolMode.TimedLightsRemoveNode)