diff --git a/CriticalPathAnalyzer/CriticalPathAnalyzer/FancyInput/ContextMetadata.jecs b/CriticalPathAnalyzer/CriticalPathAnalyzer/FancyInput/ContextMetadata.jecs index f4ccc8e..894ad9d 100644 --- a/CriticalPathAnalyzer/CriticalPathAnalyzer/FancyInput/ContextMetadata.jecs +++ b/CriticalPathAnalyzer/CriticalPathAnalyzer/FancyInput/ContextMetadata.jecs @@ -1,6 +1,8 @@ CriticalPathAnalyzer.CriticalPathAnalyzer: - InjectTriggersInto: - - MHG.BuildActions - Triggers: - - CriticalPathAnalyzer.AnalyzePathStart - - CriticalPathAnalyzer.AnalyzePathEnd + InjectTriggersInto: + - MHG.BuildActions + Triggers: + - CriticalPathAnalyzer.OpenPathAnalyzer + - CriticalPathAnalyzer.AnalyzePathStart + - CriticalPathAnalyzer.AnalyzePathEnd + - CriticalPathAnalyzer.DisplayLoop diff --git a/CriticalPathAnalyzer/CriticalPathAnalyzer/FancyInput/TriggerMetadata.jecs b/CriticalPathAnalyzer/CriticalPathAnalyzer/FancyInput/TriggerMetadata.jecs index 414fe7a..77de273 100644 --- a/CriticalPathAnalyzer/CriticalPathAnalyzer/FancyInput/TriggerMetadata.jecs +++ b/CriticalPathAnalyzer/CriticalPathAnalyzer/FancyInput/TriggerMetadata.jecs @@ -1,11 +1,23 @@ +CriticalPathAnalyzer.OpenPathAnalyzer: + Heading: "CriticalPathAnalyzer" + DefaultBinding: + Options: + - I + CriticalPathAnalyzer.AnalyzePathStart: - Heading: "CriticalPathAnalyzer" - DefaultBinding: - Options: - - I + Heading: "CriticalPathAnalyzer" + DefaultBinding: + Options: + - I CriticalPathAnalyzer.AnalyzePathEnd: - Heading: "CriticalPathAnalyzer" - DefaultBinding: - Options: - - O + Heading: "CriticalPathAnalyzer" + DefaultBinding: + Options: + - O + +CriticalPathAnalyzer.DisplayLoop: + Heading: "CriticalPathAnalyzer" + DefaultBinding: + Options: + - P diff --git a/CriticalPathAnalyzer/CriticalPathAnalyzer/languages/English/English_input.jecs b/CriticalPathAnalyzer/CriticalPathAnalyzer/languages/English/English_input.jecs index 5c08852..5e45b7c 100644 --- a/CriticalPathAnalyzer/CriticalPathAnalyzer/languages/English/English_input.jecs +++ b/CriticalPathAnalyzer/CriticalPathAnalyzer/languages/English/English_input.jecs @@ -1,5 +1,10 @@ MHG.SettingsMenu.Pages.Controls.Headings.CriticalPathAnalyzer: "Mod: Critical Path Analyzer" +FancyInput.Trigger.CriticalPathAnalyzer.OpenPathAnalyzer: "Open the path analyzer tool" +FancyInput.Trigger.CriticalPathAnalyzer.OpenPathAnalyzer.Description : """ + Transitions into the CriticalPathAnalyzer state. + """ + FancyInput.Trigger.CriticalPathAnalyzer.AnalyzePathStart: "Select start of path" FancyInput.Trigger.CriticalPathAnalyzer.AnalyzePathStart.Description : """ Press to select the start of the path to be analyzed. @@ -9,3 +14,8 @@ FancyInput.Trigger.CriticalPathAnalyzer.AnalyzePathEnd: "Select end of path" FancyInput.Trigger.CriticalPathAnalyzer.AnalyzePathEnd.Description : """ Press to select the end of the path to be analyzed. """ + +FancyInput.Trigger.CriticalPathAnalyzer.DisplayLoop: "Display loop" +FancyInput.Trigger.CriticalPathAnalyzer.DisplayLoop.Description : """ + Highlights only clusters that are causing a loop. + """ diff --git a/CriticalPathAnalyzer/CriticalPathAnalyzer/src/client/CriticalPathAnalyzerClient.cs b/CriticalPathAnalyzer/CriticalPathAnalyzer/src/client/CriticalPathAnalyzerClient.cs index 43e1d6f..e1dfaa3 100644 --- a/CriticalPathAnalyzer/CriticalPathAnalyzer/src/client/CriticalPathAnalyzerClient.cs +++ b/CriticalPathAnalyzer/CriticalPathAnalyzer/src/client/CriticalPathAnalyzerClient.cs @@ -34,7 +34,7 @@ namespace CriticalPathAnalyzer.Client { public static void OnAnalyzePathResponse(AnalyzePathResponse response) { LoggerInstance.Info($"Got response from server"); - CriticalPathAnalyzerTool.Highlight(response); + CriticalPathAnalyzerTool.HandleResponse(response); } } } \ No newline at end of file diff --git a/CriticalPathAnalyzer/CriticalPathAnalyzer/src/client/CriticalPathAnalyzerGameState.cs b/CriticalPathAnalyzer/CriticalPathAnalyzer/src/client/CriticalPathAnalyzerGameState.cs index d36e1a8..10ba9fd 100644 --- a/CriticalPathAnalyzer/CriticalPathAnalyzer/src/client/CriticalPathAnalyzerGameState.cs +++ b/CriticalPathAnalyzer/CriticalPathAnalyzer/src/client/CriticalPathAnalyzerGameState.cs @@ -16,6 +16,7 @@ namespace CriticalPathAnalyzer.Client { UITrigger.Back, CriticalPathAnalyzerTrigger.AnalyzePathStart, CriticalPathAnalyzerTrigger.AnalyzePathEnd, + CriticalPathAnalyzerTrigger.DisplayLoop, }; public override void OnEnter() { @@ -29,6 +30,8 @@ namespace CriticalPathAnalyzer.Client { CriticalPathAnalyzerTool.SelectPathStart(); } else if (CustomInput.DownThisFrame(CriticalPathAnalyzerTrigger.AnalyzePathEnd)) { CriticalPathAnalyzerTool.SelectPathEnd(); + } else if (CustomInput.DownThisFrame(CriticalPathAnalyzerTrigger.DisplayLoop)) { + CriticalPathAnalyzerTool.DisplayLoop(); } } diff --git a/CriticalPathAnalyzer/CriticalPathAnalyzer/src/client/KeybindingsInjector.cs b/CriticalPathAnalyzer/CriticalPathAnalyzer/src/client/KeybindingsInjector.cs index 41d52ea..8ee40b5 100644 --- a/CriticalPathAnalyzer/CriticalPathAnalyzer/src/client/KeybindingsInjector.cs +++ b/CriticalPathAnalyzer/CriticalPathAnalyzer/src/client/KeybindingsInjector.cs @@ -17,7 +17,7 @@ namespace CriticalPathAnalyzer.Client { } private static bool Hook(out bool deletedWire) { - if (CustomInput.DownThisFrame(CriticalPathAnalyzerTrigger.AnalyzePathStart)) { + if (CustomInput.DownThisFrame(CriticalPathAnalyzerTrigger.OpenPathAnalyzer)) { GameStateManager.TransitionTo(CriticalPathAnalyzerGameState.Id); deletedWire = true; // True = Cancel remaining keybinding handling. diff --git a/CriticalPathAnalyzer/CriticalPathAnalyzer/src/client/keybindings/CriticalPathAnalyzerTrigger.cs b/CriticalPathAnalyzer/CriticalPathAnalyzer/src/client/keybindings/CriticalPathAnalyzerTrigger.cs index a40cece..9d1094f 100644 --- a/CriticalPathAnalyzer/CriticalPathAnalyzer/src/client/keybindings/CriticalPathAnalyzerTrigger.cs +++ b/CriticalPathAnalyzer/CriticalPathAnalyzer/src/client/keybindings/CriticalPathAnalyzerTrigger.cs @@ -1,7 +1,9 @@ namespace CriticalPathAnalyzer.Client.Keybindings { public enum CriticalPathAnalyzerTrigger { None, + OpenPathAnalyzer, AnalyzePathStart, AnalyzePathEnd, + DisplayLoop, } } \ No newline at end of file diff --git a/CriticalPathAnalyzer/CriticalPathAnalyzer/src/client/tool/CriticalPathAnalyzerTool.cs b/CriticalPathAnalyzer/CriticalPathAnalyzer/src/client/tool/CriticalPathAnalyzerTool.cs index eab78b4..ad740f4 100644 --- a/CriticalPathAnalyzer/CriticalPathAnalyzer/src/client/tool/CriticalPathAnalyzerTool.cs +++ b/CriticalPathAnalyzer/CriticalPathAnalyzer/src/client/tool/CriticalPathAnalyzerTool.cs @@ -17,6 +17,7 @@ namespace CriticalPathAnalyzer.Client.Tool { private static PegAddress? _endPegAddress; private static Guid _currentRequestGuid = Guid.NewGuid(); + private static AnalyzePathResponse _response; public static void Init(ILogicLogger logger) { _logger = logger; @@ -74,6 +75,15 @@ namespace CriticalPathAnalyzer.Client.Tool { } } + public static void DisplayLoop() { + if (_response == null) { + _logger.Error("Got no response - cannot display loop"); + return; + } + PathHighLighter.RemoveHighLighting(); + PathHighLighter.HighlightWires(_response.LoopingClusters); + } + private static void CalculateCriticalPath() { if (_startPegAddress == null || _endPegAddress == null) { _logger.Error("Invalid pegs"); @@ -88,17 +98,19 @@ namespace CriticalPathAnalyzer.Client.Tool { }); } - public static void Highlight(AnalyzePathResponse response) { + public static void HandleResponse(AnalyzePathResponse response) { if (_currentRequestGuid != response.RequestGuid) { // Not matching Guid, old or wrong request, discard. _logger.Warn("Got response to wrong request, discarding"); return; } - - _logger.Info($"Critical path length is: {response.CriticalPathLength}"); - + + _response = response; + + _logger.Info($"Critical path length is: {_response.CriticalPathLength}"); + PathHighLighter.RemoveHighLighting(); - PathHighLighter.HighlightWires(response); + PathHighLighter.HighlightWires(_response.Clusters); } } } \ No newline at end of file diff --git a/CriticalPathAnalyzer/CriticalPathAnalyzer/src/client/tool/PathHighLighter.cs b/CriticalPathAnalyzer/CriticalPathAnalyzer/src/client/tool/PathHighLighter.cs index 7d60d64..1bbe25f 100644 --- a/CriticalPathAnalyzer/CriticalPathAnalyzer/src/client/tool/PathHighLighter.cs +++ b/CriticalPathAnalyzer/CriticalPathAnalyzer/src/client/tool/PathHighLighter.cs @@ -16,8 +16,8 @@ namespace CriticalPathAnalyzer.Client.Tool { private static List _highlightedComponents = new List(); private static List _highlightedWires = new List(); - public static void HighlightWires(AnalyzePathResponse response) { - _clusters = response.Clusters; + public static void HighlightWires(List clusters) { + _clusters = clusters; foreach (ClusterDetails clusterDetails in _clusters) { HighlightCluster(clusterDetails, Color); diff --git a/CriticalPathAnalyzer/CriticalPathAnalyzer/src/shared/packets/s2c/AnalyzePathResponse.cs b/CriticalPathAnalyzer/CriticalPathAnalyzer/src/shared/packets/s2c/AnalyzePathResponse.cs index 454cc0b..7f771b7 100644 --- a/CriticalPathAnalyzer/CriticalPathAnalyzer/src/shared/packets/s2c/AnalyzePathResponse.cs +++ b/CriticalPathAnalyzer/CriticalPathAnalyzer/src/shared/packets/s2c/AnalyzePathResponse.cs @@ -11,8 +11,9 @@ namespace CriticalPathAnalyzer.Shared.Packets.S2C { [Key(1)] public List Clusters; [Key(2)] public int CriticalPathLength; - // [Key(3)] public List PerimeterComponents; - // [Key(4)] public List NextClusters; + [Key(3)] public List LoopingClusters; + // [Key(4)] public List PerimeterComponents; + // [Key(5)] public List NextClusters; } [MessagePackObject]