diff --git a/TLM/TLM/TLM.csproj b/TLM/TLM/TLM.csproj
index 3340c4f4c..d5bd37117 100644
--- a/TLM/TLM/TLM.csproj
+++ b/TLM/TLM/TLM.csproj
@@ -185,6 +185,7 @@
+
diff --git a/TLM/TLM/UI/LegacySubTool.cs b/TLM/TLM/UI/LegacySubTool.cs
index e797584fe..d1c97056a 100644
--- a/TLM/TLM/UI/LegacySubTool.cs
+++ b/TLM/TLM/UI/LegacySubTool.cs
@@ -15,8 +15,8 @@ public LegacySubTool(TrafficManagerTool mainTool) {
uiTransparencyUnbsubscriber_ = ModUI.Instance.Events.UiOpacity.Subscribe(this);
}
- protected TrafficManagerTool MainTool { get; }
- protected GUILayoutOption[] EmptyOptionsArray = new GUILayoutOption[0];
+ internal TrafficManagerTool MainTool { get; }
+ protected static GUILayoutOption[] EmptyOptionsArray = new GUILayoutOption[0];
private Texture2D WindowTexture {
get {
@@ -32,34 +32,33 @@ private Texture2D WindowTexture {
private Texture2D windowTexture_;
- protected GUIStyle WindowStyle =>
+ internal GUIStyle WindowStyle =>
// ReSharper disable once ConvertToNullCoalescingCompoundAssignment
windowStyle_ ??
- (windowStyle_
- = new GUIStyle {
- normal = {
- background = WindowTexture,
- textColor = Color.white,
- },
- alignment = TextAnchor.UpperCenter,
- fontSize = 20,
- border = {
- left = 4,
- top = 41,
- right = 4,
- bottom = 8,
- },
- overflow = {
- bottom = 0,
- top = 0,
- right = 12,
- left = 12,
- },
- contentOffset = new Vector2(0, -44),
- padding = {
- top = 55,
- },
- });
+ (windowStyle_ = new GUIStyle {
+ normal = {
+ background = WindowTexture,
+ textColor = Color.white,
+ },
+ alignment = TextAnchor.UpperCenter,
+ fontSize = 20,
+ border = {
+ left = 4,
+ top = 41,
+ right = 4,
+ bottom = 8,
+ },
+ overflow = {
+ bottom = 0,
+ top = 0,
+ right = 12,
+ left = 12,
+ },
+ contentOffset = new Vector2(0, -44),
+ padding = {
+ top = 55,
+ },
+ });
private GUIStyle windowStyle_;
@@ -185,6 +184,11 @@ public virtual void RenderOverlayForOtherTools(RenderManager.CameraInfo cameraIn
public virtual void ShowGUIOverlay(ToolMode toolMode, bool viewOnly) { }
public virtual bool IsCursorInPanel() {
+ return IsCursorInPanel_();
+ }
+
+ /// Check whether cursor is in the main menu or debug menu area.
+ internal static bool IsCursorInPanel_() {
return ModUI.Instance.GetMenu().containsMouse
#if DEBUG
|| ModUI.Instance.GetDebugMenu().containsMouse
diff --git a/TLM/TLM/UI/LegacySubToolMixin.cs b/TLM/TLM/UI/LegacySubToolMixin.cs
new file mode 100644
index 000000000..093053d5d
--- /dev/null
+++ b/TLM/TLM/UI/LegacySubToolMixin.cs
@@ -0,0 +1,83 @@
+namespace TrafficManager.UI {
+ using System;
+ using ColossalFramework.UI;
+ using TrafficManager.U;
+ using UnityEngine;
+
+ [Obsolete("Used in legacy GUI for migration to new subtool base clas")]
+ public class LegacySubToolMixin {
+ [Obsolete("Used in legacy GUI")]
+ internal static GUILayoutOption[] LegacyEmptyOptionsArray = new GUILayoutOption[0];
+
+ [Obsolete("Used in legacy GUI")]
+ protected void LegacyDragWindow(ref Rect window) {
+ Vector2 resolution = UIView.GetAView().GetScreenResolution();
+ window.x = Mathf.Clamp(window.x, 0, UIScaler.MaxWidth - window.width);
+ window.y = Mathf.Clamp(window.y, 0, UIScaler.MaxHeight - window.height);
+
+ bool primaryMouseDown = Input.GetMouseButton(0);
+ if (primaryMouseDown) {
+ GUI.DragWindow();
+ }
+ }
+
+ [Obsolete("Used in legacy GUI")]
+ private Texture2D LegacyWindowTexture {
+ get {
+ if (legacyWindowTexture_ == null) {
+ legacyWindowTexture_ = TextureUtil.AdjustAlpha(
+ Textures.MainMenu.WindowBackground,
+ TrafficManagerTool.GetWindowAlpha());
+ }
+
+ return legacyWindowTexture_;
+ }
+ }
+
+ [Obsolete("Used in legacy GUI")]
+ private Texture2D legacyWindowTexture_;
+
+ [Obsolete("Used in legacy GUI")]
+ private GUIStyle legacyWindowStyle_;
+
+ [Obsolete("Used in legacy GUI")]
+ internal GUIStyle LegacyWindowStyle =>
+ // ReSharper disable once ConvertToNullCoalescingCompoundAssignment
+ legacyWindowStyle_ ??
+ (legacyWindowStyle_ = new GUIStyle {
+ normal = {
+ background = LegacyWindowTexture,
+ textColor = Color.white,
+ },
+ alignment = TextAnchor.UpperCenter,
+ fontSize = 20,
+ border = {
+ left = 4,
+ top = 41,
+ right = 4,
+ bottom = 8,
+ },
+ overflow = {
+ bottom = 0,
+ top = 0,
+ right = 12,
+ left = 12,
+ },
+ contentOffset = new Vector2(0, -44),
+ padding = {
+ top = 55,
+ },
+ });
+
+
+ /// Check whether cursor is in the main menu or debug menu area.
+ [Obsolete("Member of legacy subtool")]
+ internal static bool LegacyIsCursorInPanel() {
+ return ModUI.Instance.GetMenu().containsMouse
+#if DEBUG
+ || ModUI.Instance.GetDebugMenu().containsMouse
+#endif
+ ;
+ }
+ }
+}
\ No newline at end of file
diff --git a/TLM/TLM/UI/SubTools/TTL/TTLToolMode.cs b/TLM/TLM/UI/SubTools/TTL/TTLToolMode.cs
index abe30ac31..105704d5d 100644
--- a/TLM/TLM/UI/SubTools/TTL/TTLToolMode.cs
+++ b/TLM/TLM/UI/SubTools/TTL/TTLToolMode.cs
@@ -1,5 +1,5 @@
-namespace TrafficManager.UI.SubTools {
- internal enum TTLToolMode {
+namespace TrafficManager.UI.SubTools.TTL {
+ internal enum TtlToolMode {
/// Timed traffic light submode.
SelectNode,
diff --git a/TLM/TLM/UI/SubTools/TTL/TimedTrafficLightsTool.cs b/TLM/TLM/UI/SubTools/TTL/TimedTrafficLightsTool.cs
index 977a01175..e9cd0486f 100644
--- a/TLM/TLM/UI/SubTools/TTL/TimedTrafficLightsTool.cs
+++ b/TLM/TLM/UI/SubTools/TTL/TimedTrafficLightsTool.cs
@@ -20,18 +20,18 @@ namespace TrafficManager.UI.SubTools.TTL {
using UnityEngine;
public class TimedTrafficLightsTool
- : LegacySubTool,
+ : TrafficManagerSubTool,
UI.MainMenu.IOnscreenDisplayProvider {
private readonly GUI.WindowFunction _guiTimedControlPanelDelegate;
private readonly GUI.WindowFunction _guiTimedTrafficLightsNodeWindowDelegate;
private readonly GUI.WindowFunction _guiTimedTrafficLightsPasteWindowDelegate;
- private TTLToolMode ttlToolMode_ = TTLToolMode.SelectNode;
+ private TtlToolMode ttlToolMode_ = TtlToolMode.SelectNode;
- private readonly GUIStyle _counterStyle = new GUIStyle();
+ private readonly GUIStyle _counterStyle = new();
private readonly int[] _hoveredButton = new int[2];
private bool nodeSelectionLocked;
- private List selectedNodeIds = new List();
+ private List selectedNodeIds = new();
private bool _cursorInSecondaryPanel;
private Rect _windowRect = TrafficManagerTool.GetDefaultScreenPositionForRect(new Rect(0, 0, 480, 350));
private Rect _windowRect2 = TrafficManagerTool.GetDefaultScreenPositionForRect(new Rect(0, 0, 300, 150));
@@ -53,10 +53,10 @@ public class TimedTrafficLightsTool
private ushort nodeIdToCopy;
private HashSet currentTimedNodeIds;
- private GUIStyle layout = new GUIStyle { normal = { textColor = new Color(1f, 1f, 1f) } };
- private GUIStyle layoutRed = new GUIStyle { normal = { textColor = new Color(1f, 0f, 0f) } };
- private GUIStyle layoutGreen = new GUIStyle { normal = { textColor = new Color(0f, .8f, 0f) } };
- private GUIStyle layoutYellow = new GUIStyle { normal = { textColor = new Color(1f, .7f, 0f) } };
+ private GUIStyle layout = new() { normal = { textColor = new Color(1f, 1f, 1f) } };
+ private GUIStyle layoutRed = new() { normal = { textColor = new Color(1f, 0f, 0f) } };
+ private GUIStyle layoutGreen = new() { normal = { textColor = new Color(0f, .8f, 0f) } };
+ private GUIStyle layoutYellow = new() { normal = { textColor = new Color(1f, .7f, 0f) } };
public TimedTrafficLightsTool(TrafficManagerTool mainTool)
: base(mainTool) {
@@ -65,10 +65,20 @@ public TimedTrafficLightsTool(TrafficManagerTool mainTool)
_guiTimedTrafficLightsPasteWindowDelegate = GuiTimedTrafficLightsPasteWindow;
currentTimedNodeIds = new HashSet();
+
+ // Construct and reset for the first time
+ Cleanup();
+
+ if (Options.timedLightsOverlay) {
+ RefreshCurrentTimedNodeIds();
+ } else {
+ currentTimedNodeIds.Clear();
+ }
}
- public override bool IsCursorInPanel() {
- return base.IsCursorInPanel() || _cursorInSecondaryPanel;
+ [Obsolete("Member of legacy subtool")]
+ private protected bool IsCursorInPanel() {
+ return LegacyIsCursorInPanel() || _cursorInSecondaryPanel;
}
private void RefreshCurrentTimedNodeIds(ushort forceNodeId = 0) {
@@ -95,10 +105,8 @@ private void RefreshCurrentTimedNodeIds(ushort forceNodeId = 0) {
}
}
- public override void OnActivate() {
- base.OnActivate();
-
- SetToolMode(TTLToolMode.SelectNode);
+ public override void OnActivateTool() {
+ SetToolMode(TtlToolMode.SelectNode);
TrafficLightSimulationManager tlsMan = TrafficLightSimulationManager.Instance;
RefreshCurrentTimedNodeIds();
@@ -117,22 +125,28 @@ public override void OnActivate() {
MainTool.RequestOnscreenDisplayUpdate();
}
- public override void OnSecondaryClickOverlay() {
- if (!IsCursorInPanel()) {
- if (ttlToolMode_ != TTLToolMode.SelectNode) {
- Cleanup();
- SetToolMode(TTLToolMode.SelectNode);
- } else {
- MainTool.SetToolMode(ToolMode.None);
- }
+ public override void OnToolRightClick() {
+ if (IsCursorInPanel()) {
+ return;
}
+
+ if (ttlToolMode_ != TtlToolMode.SelectNode) {
+ OnDeactivateTool();
+ SetToolMode(TtlToolMode.SelectNode);
+ } else {
+ MainTool.SetToolMode(ToolMode.None);
+ }
+ }
+
+ public override void UpdateEveryFrame() {
+ throw new NotImplementedException();
}
- private void SetToolMode(TTLToolMode t) {
+ private void SetToolMode(TtlToolMode t) {
ttlToolMode_ = t;
}
- public override void OnPrimaryClickOverlay() {
+ public override void OnToolLeftClick() {
if (HoveredNodeId <= 0 || nodeSelectionLocked || !Flags.MayHaveTrafficLight(HoveredNodeId)) {
return;
}
@@ -169,16 +183,16 @@ public override void OnPrimaryClickOverlay() {
return;
}
RefreshCurrentTimedNodeIds(HoveredNodeId);
- SetToolMode(TTLToolMode.ShowLights);
+ SetToolMode(TtlToolMode.ShowLights);
}
TrafficLightSimulationManager tlsMan = TrafficLightSimulationManager.Instance;
switch (ttlToolMode_) {
- case TTLToolMode.SelectNode:
- case TTLToolMode.ShowLights: {
- if (ttlToolMode_ == TTLToolMode.ShowLights) {
- SetToolMode(TTLToolMode.SelectNode);
+ case TtlToolMode.SelectNode:
+ case TtlToolMode.ShowLights: {
+ if (ttlToolMode_ == TtlToolMode.ShowLights) {
+ SetToolMode(TtlToolMode.SelectNode);
ClearSelectedNodes();
}
@@ -196,7 +210,7 @@ public override void OnPrimaryClickOverlay() {
if (timedLight != null) {
selectedNodeIds = new List(timedLight.NodeGroup);
- SetToolMode(TTLToolMode.ShowLights);
+ SetToolMode(TtlToolMode.ShowLights);
}
} else {
MainTool.WarningPrompt(T("Dialog.Text:Node has timed TL script"));
@@ -206,9 +220,9 @@ public override void OnPrimaryClickOverlay() {
break;
}
- case TTLToolMode.AddNode: {
+ case TtlToolMode.AddNode: {
if (selectedNodeIds.Count <= 0) {
- SetToolMode(TTLToolMode.SelectNode);
+ SetToolMode(TtlToolMode.SelectNode);
return;
}
@@ -246,13 +260,13 @@ public override void OnPrimaryClickOverlay() {
AddSelectedNode(nodeId);
}
- SetToolMode(TTLToolMode.ShowLights);
+ SetToolMode(TtlToolMode.ShowLights);
break;
}
- case TTLToolMode.RemoveNode: {
+ case TtlToolMode.RemoveNode: {
if (selectedNodeIds.Count <= 0) {
- SetToolMode(TTLToolMode.SelectNode);
+ SetToolMode(TtlToolMode.SelectNode);
return;
}
@@ -265,13 +279,13 @@ public override void OnPrimaryClickOverlay() {
}
RemoveSelectedNode(HoveredNodeId);
- SetToolMode(TTLToolMode.ShowLights);
+ SetToolMode(TtlToolMode.ShowLights);
break;
}
- case TTLToolMode.CopyLights: {
+ case TtlToolMode.CopyLights: {
if (nodeIdToCopy == 0 || !tlsMan.HasTimedSimulation(nodeIdToCopy)) {
- SetToolMode(TTLToolMode.SelectNode);
+ SetToolMode(TtlToolMode.SelectNode);
return;
}
@@ -306,31 +320,29 @@ public override void OnPrimaryClickOverlay() {
Cleanup();
AddSelectedNode(HoveredNodeId);
- SetToolMode(TTLToolMode.ShowLights);
+ SetToolMode(TtlToolMode.ShowLights);
break;
}
}
}
- public override void OnToolGUI(Event e) {
- base.OnToolGUI(e);
-
+ public override void RenderActiveToolOverlay_GUI() {
switch (ttlToolMode_) {
- case TTLToolMode.SelectNode: {
+ case TtlToolMode.SelectNode: {
if (!Shortcuts.ControlIsPressed) {
GuiTimedTrafficLightsNode();
}
break;
}
- case TTLToolMode.ShowLights:
- case TTLToolMode.AddNode:
- case TTLToolMode.RemoveNode: {
+ case TtlToolMode.ShowLights:
+ case TtlToolMode.AddNode:
+ case TtlToolMode.RemoveNode: {
GuiTimedTrafficLights();
break;
}
- case TTLToolMode.CopyLights: {
+ case TtlToolMode.CopyLights: {
GuiTimedTrafficLightsCopy();
break;
}
@@ -341,12 +353,12 @@ public override void OnToolGUI(Event e) {
}
}
- public override void RenderOverlay(RenderManager.CameraInfo cameraInfo) {
- bool onlySelected = ttlToolMode_ == TTLToolMode.RemoveNode;
+ public override void RenderGenericInfoOverlay(RenderManager.CameraInfo cameraInfo) {
+ }
+
+ public override void RenderActiveToolOverlay(RenderManager.CameraInfo cameraInfo) {
+ bool onlySelected = ttlToolMode_ == TtlToolMode.RemoveNode;
- // Log._Debug($"nodeSelLocked={nodeSelectionLocked} HoveredNodeId={HoveredNodeId}
- // IsNodeSelected={IsNodeSelected(HoveredNodeId)} onlySelected={onlySelected}
- // isinsideui={MainTool.GetToolController().IsInsideUI} cursorVis={Cursor.visible}");
if (!nodeSelectionLocked
&& HoveredNodeId != 0
&& !IsNodeSelected(HoveredNodeId) ^ onlySelected
@@ -366,25 +378,23 @@ public override void RenderOverlay(RenderManager.CameraInfo cameraInfo) {
}
private void GuiTimedControlPanel(int num) {
- // Log._Debug("guiTimedControlPanel");
try {
TrafficLightSimulationManager tlsMan = TrafficLightSimulationManager.Instance;
- if (ttlToolMode_ == TTLToolMode.AddNode ||
- ttlToolMode_ == TTLToolMode.RemoveNode) {
- GUILayout.Label(T("TTL.Label:Select junction"), EmptyOptionsArray);
- if (GUILayout.Button(T("Button:Cancel"), EmptyOptionsArray)) {
- SetToolMode(TTLToolMode.ShowLights);
+ if (ttlToolMode_ == TtlToolMode.AddNode ||
+ ttlToolMode_ == TtlToolMode.RemoveNode) {
+ GUILayout.Label(T("TTL.Label:Select junction"), LegacyEmptyOptionsArray);
+ if (GUILayout.Button(T("Button:Cancel"), LegacyEmptyOptionsArray)) {
+ SetToolMode(TtlToolMode.ShowLights);
} else {
- DragWindow(ref _windowRect);
+ LegacyDragWindow(ref _windowRect);
return;
}
}
if (!tlsMan.HasTimedSimulation(selectedNodeIds[0])) {
- SetToolMode(TTLToolMode.SelectNode);
- // Log._Debug("nodesim or timednodemain is null");
- DragWindow(ref _windowRect);
+ SetToolMode(TtlToolMode.SelectNode);
+ LegacyDragWindow(ref _windowRect);
return;
}
@@ -407,12 +417,12 @@ private void GuiTimedControlPanel(int num) {
}
for (var i = 0; i < timedNodeMain.NumSteps(); i++) {
- GUILayout.BeginHorizontal(EmptyOptionsArray);
+ GUILayout.BeginHorizontal(LegacyEmptyOptionsArray);
if (_timedEditStep != i) {
if (timedLightActive) {
if (i == currentStep) {
- GUILayout.BeginVertical(EmptyOptionsArray);
+ GUILayout.BeginVertical(LegacyEmptyOptionsArray);
GUILayout.Space(5);
string labelStr = string.Format(
@@ -468,7 +478,7 @@ private void GuiTimedControlPanel(int num) {
labelLayout = inEndTransition ? layoutYellow : layoutGreen;
}
- GUILayout.Label(labelStr, labelLayout, EmptyOptionsArray);
+ GUILayout.Label(labelStr, labelLayout, LegacyEmptyOptionsArray);
GUILayout.Space(5);
GUILayout.EndVertical();
@@ -489,7 +499,7 @@ private void GuiTimedControlPanel(int num) {
timedNodeMain.GetStep(i).MinTime,
timedNodeMain.GetStep(i).MaxTime),
layout,
- EmptyOptionsArray);
+ LegacyEmptyOptionsArray);
}
} else {
GUIStyle labelLayout = layout;
@@ -505,7 +515,7 @@ private void GuiTimedControlPanel(int num) {
timedNodeMain.GetStep(i).MinTime,
timedNodeMain.GetStep(i).MaxTime),
labelLayout,
- EmptyOptionsArray);
+ LegacyEmptyOptionsArray);
if (_timedEditStep < 0) {
GUILayout.BeginHorizontal(GUILayout.Width(100));
@@ -662,13 +672,13 @@ private void GuiTimedControlPanel(int num) {
BuildStepChangeMetricDisplay(true);
BuildFlowPolicyDisplay(true);
- GUILayout.BeginHorizontal(EmptyOptionsArray);
+ GUILayout.BeginHorizontal(LegacyEmptyOptionsArray);
}
GUILayout.EndHorizontal();
} // foreach step
- GUILayout.BeginHorizontal(EmptyOptionsArray);
+ GUILayout.BeginHorizontal(LegacyEmptyOptionsArray);
if (_timedEditStep < 0 && !timedLightActive) {
if (_timedPanelAdd) {
@@ -738,10 +748,10 @@ private void GuiTimedControlPanel(int num) {
BuildStepChangeMetricDisplay(true);
BuildFlowPolicyDisplay(true);
- GUILayout.BeginHorizontal(EmptyOptionsArray);
+ GUILayout.BeginHorizontal(LegacyEmptyOptionsArray);
} else {
if (_timedEditStep < 0) {
- if (GUILayout.Button(T("TTL.Button:Add step"), EmptyOptionsArray)) {
+ if (GUILayout.Button(T("TTL.Button:Add step"), LegacyEmptyOptionsArray)) {
TrafficManagerTool.ShowAdvisor(GetType().Name + "_AddStep");
_timedPanelAdd = true;
nodeSelectionLocked = true;
@@ -763,11 +773,11 @@ private void GuiTimedControlPanel(int num) {
_timedShowNumbers
? T("TTL.Button:Hide counters")
: T("TTL.Button:Show counters"),
- EmptyOptionsArray)) {
+ LegacyEmptyOptionsArray)) {
_timedShowNumbers = !_timedShowNumbers;
}
- if (GUILayout.Button(T("TTL.Button:Stop"), EmptyOptionsArray)) {
+ if (GUILayout.Button(T("TTL.Button:Stop"), LegacyEmptyOptionsArray)) {
foreach (ushort nodeId in selectedNodeIds) {
tlsMan.TrafficLightSimulations[nodeId]
.timedLight
@@ -809,14 +819,14 @@ private void GuiTimedControlPanel(int num) {
bool testMode = GUILayout.Toggle(
inTestMode,
T("TTL.Checkbox:Pause in this step"),
- EmptyOptionsArray);
+ LegacyEmptyOptionsArray);
foreach (ushort nodeId in selectedNodeIds) {
tlsMan.TrafficLightSimulations[nodeId].timedLight?.SetTestMode(testMode);
}
} else {
if (_timedEditStep < 0 && !_timedPanelAdd) {
- if (GUILayout.Button(T("TTL.Button:Start"), EmptyOptionsArray)) {
+ if (GUILayout.Button(T("TTL.Button:Start"), LegacyEmptyOptionsArray)) {
_timedPanelAdd = false;
nodeSelectionLocked = false;
@@ -831,27 +841,27 @@ private void GuiTimedControlPanel(int num) {
}
if (_timedEditStep >= 0) {
- DragWindow(ref _windowRect);
+ LegacyDragWindow(ref _windowRect);
return;
}
GUILayout.Space(30);
if (selectedNodeIds.Count == 1 && timedNodeMain.NumSteps() > 0) {
- GUILayout.BeginHorizontal(EmptyOptionsArray);
+ GUILayout.BeginHorizontal(LegacyEmptyOptionsArray);
- if (GUILayout.Button(T("TTL.Button:Rotate left"), EmptyOptionsArray)) {
+ if (GUILayout.Button(T("TTL.Button:Rotate left"), LegacyEmptyOptionsArray)) {
timedNodeMain.RotateLeft();
_timedViewedStep = 0;
}
- if (GUILayout.Button(T("TTL.Button:Copy"), EmptyOptionsArray)) {
+ if (GUILayout.Button(T("TTL.Button:Copy"), LegacyEmptyOptionsArray)) {
TrafficManagerTool.ShowAdvisor(GetType().Name + "_Copy");
nodeIdToCopy = selectedNodeIds[0];
- SetToolMode(TTLToolMode.CopyLights);
+ SetToolMode(TtlToolMode.CopyLights);
}
- if (GUILayout.Button(T("TTL.Button:Rotate right"), EmptyOptionsArray)) {
+ if (GUILayout.Button(T("TTL.Button:Rotate right"), LegacyEmptyOptionsArray)) {
timedNodeMain.RotateRight();
_timedViewedStep = 0;
}
@@ -864,30 +874,30 @@ private void GuiTimedControlPanel(int num) {
if (GUILayout.Button(
T("TTL.Button:Add junction to TTL"),
- EmptyOptionsArray)) {
+ LegacyEmptyOptionsArray)) {
TrafficManagerTool.ShowAdvisor(GetType().Name + "_AddJunction");
- SetToolMode(TTLToolMode.AddNode);
+ SetToolMode(TtlToolMode.AddNode);
}
if (selectedNodeIds.Count > 1) {
if (GUILayout.Button(
T("TTL.Button:Remove junction from TTL"),
- EmptyOptionsArray)) {
+ LegacyEmptyOptionsArray)) {
TrafficManagerTool.ShowAdvisor(GetType().Name + "_RemoveJunction");
- SetToolMode(TTLToolMode.RemoveNode);
+ SetToolMode(TtlToolMode.RemoveNode);
}
}
GUILayout.Space(30);
- if (GUILayout.Button(T("TTL.Button:Remove entire TTL"), EmptyOptionsArray)) {
+ if (GUILayout.Button(T("TTL.Button:Remove entire TTL"), LegacyEmptyOptionsArray)) {
DisableTimed();
ClearSelectedNodes();
- SetToolMode(TTLToolMode.SelectNode);
+ SetToolMode(TtlToolMode.SelectNode);
}
}
- DragWindow(ref _windowRect);
+ LegacyDragWindow(ref _windowRect);
}
catch (Exception e) {
Log.Error($"TimedTrafficLightsTool._guiTimedControlPanel: {e}");
@@ -904,7 +914,11 @@ private void RemoveStep(int stepIndex) {
}
}
- public override void Cleanup() {
+ public override void OnDeactivateTool() {
+ Cleanup();
+ }
+
+ private void Cleanup() {
SelectedNodeId = 0;
ClearSelectedNodes();
@@ -918,64 +932,53 @@ public override void Cleanup() {
nodeIdToCopy = 0;
}
- public override void Initialize() {
- base.Initialize();
- Cleanup();
-
- if (Options.timedLightsOverlay) {
- RefreshCurrentTimedNodeIds();
- } else {
- currentTimedNodeIds.Clear();
- }
- }
-
private void BuildStepChangeMetricDisplay(bool editable) {
GUILayout.BeginVertical();
if (editable) {
GUILayout.Label(
T("TTL.Label:After min. time go to next step if") + ":",
- EmptyOptionsArray);
+ LegacyEmptyOptionsArray);
if (GUILayout.Toggle(
_stepMetric == StepChangeMetric.Default,
GetStepChangeMetricDescription(StepChangeMetric.Default),
- EmptyOptionsArray)) {
+ LegacyEmptyOptionsArray)) {
_stepMetric = StepChangeMetric.Default;
}
if (GUILayout.Toggle(
_stepMetric == StepChangeMetric.FirstFlow,
GetStepChangeMetricDescription(StepChangeMetric.FirstFlow),
- EmptyOptionsArray)) {
+ LegacyEmptyOptionsArray)) {
_stepMetric = StepChangeMetric.FirstFlow;
}
if (GUILayout.Toggle(
_stepMetric == StepChangeMetric.FirstWait,
GetStepChangeMetricDescription(StepChangeMetric.FirstWait),
- EmptyOptionsArray)) {
+ LegacyEmptyOptionsArray)) {
_stepMetric = StepChangeMetric.FirstWait;
}
if (GUILayout.Toggle(
_stepMetric == StepChangeMetric.NoFlow,
GetStepChangeMetricDescription(StepChangeMetric.NoFlow),
- EmptyOptionsArray)) {
+ LegacyEmptyOptionsArray)) {
_stepMetric = StepChangeMetric.NoFlow;
}
if (GUILayout.Toggle(
_stepMetric == StepChangeMetric.NoWait,
GetStepChangeMetricDescription(StepChangeMetric.NoWait),
- EmptyOptionsArray)) {
+ LegacyEmptyOptionsArray)) {
_stepMetric = StepChangeMetric.NoWait;
}
} else {
GUILayout.Label(
T("TTL.Label:Adaptive step switching") + ": " +
GetStepChangeMetricDescription(_stepMetric),
- EmptyOptionsArray);
+ LegacyEmptyOptionsArray);
}
GUILayout.EndVertical();
@@ -991,7 +994,7 @@ private void BuildFlowPolicyDisplay(bool editable) {
formatStr = "{0:0.#}";
}
- GUILayout.BeginHorizontal(EmptyOptionsArray);
+ GUILayout.BeginHorizontal(LegacyEmptyOptionsArray);
string sensText = T("TTL.Label:Flow sensitivity");
// TODO: Clarify for the user what this means, more help text, simpler UI
@@ -999,27 +1002,27 @@ private void BuildFlowPolicyDisplay(bool editable) {
string flowBalanceText = string.Format(formatStr, _waitFlowBalance);
GUILayout.Label(
$"{sensText} ({flowBalanceText}, {GetWaitFlowBalanceInfo()}):",
- EmptyOptionsArray);
+ LegacyEmptyOptionsArray);
if (_waitFlowBalance <= 0.01f) {
if (_waitFlowBalance >= 0) {
- if (GUILayout.Button("-.001", EmptyOptionsArray)) {
+ if (GUILayout.Button("-.001", LegacyEmptyOptionsArray)) {
_waitFlowBalance -= 0.001f;
}
}
if (_waitFlowBalance < 0.01f) {
- if (GUILayout.Button("+.001", EmptyOptionsArray)) {
+ if (GUILayout.Button("+.001", LegacyEmptyOptionsArray)) {
_waitFlowBalance += 0.001f;
}
}
} else if (_waitFlowBalance <= 0.1f) {
- if (GUILayout.Button("-.01", EmptyOptionsArray)) {
+ if (GUILayout.Button("-.01", LegacyEmptyOptionsArray)) {
_waitFlowBalance -= 0.01f;
}
if (_waitFlowBalance < 0.1f) {
- if (GUILayout.Button("+.01", EmptyOptionsArray)) {
+ if (GUILayout.Button("+.01", LegacyEmptyOptionsArray)) {
_waitFlowBalance += 0.01f;
}
}
@@ -1035,7 +1038,11 @@ private void BuildFlowPolicyDisplay(bool editable) {
GUILayout.EndHorizontal();
- _waitFlowBalance = GUILayout.HorizontalSlider(_waitFlowBalance, 0.001f, 10f, EmptyOptionsArray);
+ _waitFlowBalance = GUILayout.HorizontalSlider(
+ _waitFlowBalance,
+ 0.001f,
+ 10f,
+ LegacyEmptyOptionsArray);
// step snapping
if (_waitFlowBalance < 0.001f) {
@@ -1050,7 +1057,7 @@ private void BuildFlowPolicyDisplay(bool editable) {
_waitFlowBalance = 10f;
}
- GUILayout.BeginHorizontal(EmptyOptionsArray);
+ GUILayout.BeginHorizontal(LegacyEmptyOptionsArray);
GUIStyle style = new GUIStyle {
normal = { textColor = Color.white },
alignment = TextAnchor.LowerLeft,
@@ -1066,7 +1073,7 @@ private void BuildFlowPolicyDisplay(bool editable) {
GUILayout.Height(10));
} else {
string flowBalanceText = string.Format(formatStr, _waitFlowBalance);
- GUILayout.Label($"{sensText}: {flowBalanceText} ({GetWaitFlowBalanceInfo()})", EmptyOptionsArray);
+ GUILayout.Label($"{sensText}: {flowBalanceText} ({GetWaitFlowBalanceInfo()})", LegacyEmptyOptionsArray);
}
GUILayout.EndHorizontal();
@@ -1109,8 +1116,8 @@ private void GuiTimedTrafficLightsNode() {
screenRect: _windowRect2,
func: _guiTimedTrafficLightsNodeWindowDelegate,
text: T("TTL.Window.Title:Select nodes"),
- style: WindowStyle,
- options: EmptyOptionsArray);
+ style: LegacyWindowStyle,
+ options: LegacyEmptyOptionsArray);
GUI.matrix = oldMatrix;
_cursorInSecondaryPanel = _windowRect2.Contains(Event.current.mousePosition);
@@ -1129,8 +1136,8 @@ private void GuiTimedTrafficLights() {
screenRect: _windowRect,
func: _guiTimedControlPanelDelegate,
text: T("Dialog.Title:Timed traffic lights manager"),
- style: WindowStyle,
- options: EmptyOptionsArray);
+ style: LegacyWindowStyle,
+ options: LegacyEmptyOptionsArray);
_cursorInSecondaryPanel = _windowRect.Contains(Event.current.mousePosition);
GUI.matrix = oldMatrix;
@@ -1151,15 +1158,15 @@ private void GuiTimedTrafficLightsCopy() {
screenRect: _windowRect2,
func: _guiTimedTrafficLightsPasteWindowDelegate,
text: T("TTL.Window.Title:Paste"),
- style: WindowStyle,
- options: EmptyOptionsArray);
+ style: LegacyWindowStyle,
+ options: LegacyEmptyOptionsArray);
_cursorInSecondaryPanel = _windowRect2.Contains(Event.current.mousePosition);
GUI.matrix = oldMatrix;
}
private void GuiTimedTrafficLightsPasteWindow(int num) {
- GUILayout.Label(T("TTL.Label:Select junction"), EmptyOptionsArray);
+ GUILayout.Label(T("TTL.Label:Select junction"), LegacyEmptyOptionsArray);
}
///
@@ -1170,7 +1177,7 @@ private void GuiTimedTrafficLightsNodeWindow(int num) {
TrafficLightSimulationManager tlsMan = TrafficLightSimulationManager.Instance;
if (selectedNodeIds.Count < 1) {
- GUILayout.Label(T("Label:Select nodes"), EmptyOptionsArray);
+ GUILayout.Label(T("Label:Select nodes"), LegacyEmptyOptionsArray);
} else {
string txt = selectedNodeIds.Aggregate(
string.Empty,
@@ -1179,14 +1186,14 @@ private void GuiTimedTrafficLightsNodeWindow(int num) {
return current + string.Format(format, t.ToString());
});
- GUILayout.Label(txt, EmptyOptionsArray);
+ GUILayout.Label(txt, LegacyEmptyOptionsArray);
if (selectedNodeIds.Count > 0 &&
- GUILayout.Button(T("TTL.Button:Deselect all nodes"), EmptyOptionsArray)) {
+ GUILayout.Button(T("TTL.Button:Deselect all nodes"), LegacyEmptyOptionsArray)) {
ClearSelectedNodes();
}
- if (GUILayout.Button(T("TTL.Button:Setup timed traffic light"), EmptyOptionsArray)) {
+ if (GUILayout.Button(T("TTL.Button:Setup timed traffic light"), LegacyEmptyOptionsArray)) {
_waitFlowBalance = GlobalConfig.Instance.TimedTrafficLights.FlowToWaitRatio;
foreach (ushort nodeId in selectedNodeIds) {
@@ -1194,13 +1201,13 @@ private void GuiTimedTrafficLightsNodeWindow(int num) {
RefreshCurrentTimedNodeIds(nodeId);
}
- SetToolMode(TTLToolMode.ShowLights);
+ SetToolMode(TtlToolMode.ShowLights);
} else {
return;
}
}
- DragWindow(ref _windowRect2);
+ LegacyDragWindow(ref _windowRect2);
}
private string GetWaitFlowBalanceInfo() {
@@ -1410,12 +1417,8 @@ private void DrawMainLightTexture(RoadBaseAI.TrafficLightState state, Rect rect)
}
}
- public override void ShowGUIOverlay(ToolMode toolMode, bool viewOnly) {
- if (!ToolMode.TimedTrafficLights.Equals(toolMode)) {
- return;
- }
-
- if (viewOnly && !Options.timedLightsOverlay) {
+ public override void RenderGenericInfoOverlay_GUI() {
+ if (!Options.timedLightsOverlay) {
return;
}
diff --git a/TLM/TLM/UI/SubTools/ToggleTrafficLightsTool.cs b/TLM/TLM/UI/SubTools/ToggleTrafficLightsTool.cs
index 589cae5b5..2b229ed0e 100644
--- a/TLM/TLM/UI/SubTools/ToggleTrafficLightsTool.cs
+++ b/TLM/TLM/UI/SubTools/ToggleTrafficLightsTool.cs
@@ -13,7 +13,7 @@ namespace TrafficManager.UI.SubTools {
using UnityEngine;
public class ToggleTrafficLightsTool
- : LegacySubTool,
+ : TrafficManagerSubTool,
UI.MainMenu.IOnscreenDisplayProvider
{
///
@@ -37,8 +37,11 @@ public ToggleTrafficLightsTool(TrafficManagerTool mainTool)
LastCachedCamera = new CameraTransformValue();
}
- public override void OnPrimaryClickOverlay() {
- if (IsCursorInPanel()) {
+ public override void RenderGenericInfoOverlay_GUI() {
+ }
+
+ public override void OnToolLeftClick() {
+ if (LegacyIsCursorInPanel()) {
return;
}
@@ -49,14 +52,19 @@ public override void OnPrimaryClickOverlay() {
ToggleTrafficLight(HoveredNodeId, ref HoveredNodeId.ToNode());
}
- public override void OnSecondaryClickOverlay() {
+ public override void OnToolRightClick() {
+ // Right click cancels the mode
MainTool.SetToolMode(ToolMode.None);
}
+ public override void UpdateEveryFrame() {
+ }
+
public void ToggleTrafficLight(ushort nodeId,
ref NetNode node,
bool showMessageOnError = true) {
ToggleTrafficLightError reason;
+
if (!TrafficLightManager.Instance.CanToggleTrafficLight(
nodeId,
!TrafficLightManager.Instance.HasTrafficLight(
@@ -88,7 +96,7 @@ public void ToggleTrafficLight(ushort nodeId,
TrafficLightManager.Instance.ToggleTrafficLight(nodeId, ref node);
}
- public override void OnToolGUI(Event e) {
+ public override void RenderActiveToolOverlay_GUI() {
Vector3 camPos = Singleton.instance.m_simulationView.m_position;
var textures = TrafficLightTextures.Instance;
@@ -125,7 +133,13 @@ public override void OnToolGUI(Event e) {
}
}
- public override void RenderOverlay(RenderManager.CameraInfo cameraInfo) {
+ public override void RenderGenericInfoOverlay(RenderManager.CameraInfo cameraInfo) {
+ }
+
+ public override void OnDeactivateTool() {
+ }
+
+ public override void RenderActiveToolOverlay(RenderManager.CameraInfo cameraInfo) {
if (MainTool.GetToolController().IsInsideUI || !Cursor.visible) {
return;
}
@@ -204,8 +218,7 @@ public void UpdateOnscreenDisplayPanel() {
OnscreenDisplay.Display(items);
}
- public override void OnActivate() {
- base.OnActivate();
+ public override void OnActivateTool() {
MainTool.RequestOnscreenDisplayUpdate();
}
}
diff --git a/TLM/TLM/UI/TrafficManagerSubTool.cs b/TLM/TLM/UI/TrafficManagerSubTool.cs
index ff671cace..367ab98ea 100644
--- a/TLM/TLM/UI/TrafficManagerSubTool.cs
+++ b/TLM/TLM/UI/TrafficManagerSubTool.cs
@@ -3,7 +3,7 @@ namespace TrafficManager.UI {
/// SubTool represents TM:PE operation modes, grouped under a single TrafficManagerTool
/// (which is a CO.DefaultTool).
///
- public abstract class TrafficManagerSubTool {
+ public abstract class TrafficManagerSubTool : LegacySubToolMixin {
public TrafficManagerSubTool(TrafficManagerTool mainTool) {
MainTool = mainTool;
}
diff --git a/TLM/TLM/UI/TrafficManagerTool.cs b/TLM/TLM/UI/TrafficManagerTool.cs
index bcc937b50..d4b983faf 100644
--- a/TLM/TLM/UI/TrafficManagerTool.cs
+++ b/TLM/TLM/UI/TrafficManagerTool.cs
@@ -235,18 +235,16 @@ internal void Initialize() {
Log.Info("TrafficManagerTool: Initialization running now.");
Guide = new GuideHandler();
- LegacySubTool timedLightsTool = new TimedTrafficLightsTool(this);
-
subTools_ = new Dictionary {
[ToolMode.LaneArrows] = new LaneArrowTool(this),
[ToolMode.SpeedLimits] = new SpeedLimitsTool(this),
[ToolMode.RoutingDetector] = new RoutingDetectorTool(this),
+ [ToolMode.TimedTrafficLights] = new TimedTrafficLightsTool(this),
+ [ToolMode.ToggleTrafficLight] = new ToggleTrafficLightsTool(this),
};
legacySubTools_ = new Dictionary {
- [ToolMode.ToggleTrafficLight] = new ToggleTrafficLightsTool(this),
[ToolMode.AddPrioritySigns] = new PrioritySignsTool(this),
[ToolMode.ManualSwitch] = new ManualTrafficLightsTool(this),
- [ToolMode.TimedTrafficLights] = timedLightsTool,
[ToolMode.VehicleRestrictions] = new VehicleRestrictionsTool(this),
[ToolMode.LaneConnector] = new LaneConnectorTool(this),
[ToolMode.JunctionRestrictions] = new JunctionRestrictionsTool(this),
@@ -302,8 +300,8 @@ protected override void Awake() {
}
/// Only used from CustomRoadBaseAI.
- public LegacySubTool GetSubTool(ToolMode mode) {
- if (legacySubTools_.TryGetValue(mode, out LegacySubTool ret)) {
+ public TrafficManagerSubTool GetSubTool(ToolMode mode) {
+ if (subTools_.TryGetValue(mode, out TrafficManagerSubTool ret)) {
return ret;
}