diff --git a/plugin_template/assets/bundles/commnext_ui.bundle b/plugin_template/assets/bundles/commnext_ui.bundle index 2299526..6b4cbc8 100644 Binary files a/plugin_template/assets/bundles/commnext_ui.bundle and b/plugin_template/assets/bundles/commnext_ui.bundle differ diff --git a/plugin_template/localizations/commnext_localizations.csv b/plugin_template/localizations/commnext_localizations.csv index fb4d700..46d005c 100644 --- a/plugin_template/localizations/commnext_localizations.csv +++ b/plugin_template/localizations/commnext_localizations.csv @@ -48,4 +48,7 @@ PartModules/NextModulator/KindOmniBand,Text,,Omni-band,Omni-banda,Omni-Band,Omni PartModules/NextModulator/Name,Text,,Signal Modulator,Modulatore di Segnale,Signalmodulator,Modulateur de signal,Modulador de señal,信号调制器,신호 변조기,Modulator sygnału,Модулятор сигнала,信号调制器,Modulador de sinal,信号调制器 CommNext/UI/ActionRequiresMapView,Text,,Action is enabled only in Map View,L'azione è abilitata solo nella vista mappa,Aktion ist nur in der Kartenansicht aktivée,Action activée uniquement dans la vue carte,La acción solo está habilitada en la vista de mapa,此操作仅在地图视图中启用,작업은 맵 뷰에서만 활성화됩니다,Akcja jest aktywna tylko w widoku mapy,Действие доступно только в режиме карты,此操作仅在地图视图中启用,A ação só está habilitada na visualização de mapa,此操作仅在地图视图中启用 CommNext/UI/TooltipActivateBandRulers,Text,,Toggle this band rulers in Map View,Abilita/disabilita i righelli di questa banda nella vista mappa,Aktivieren/Deaktivieren dieser Bandlineale in der Kartenansicht,Activer/désactiver les règles de cette bande dans la vue carte,Alternar reglas de esta banda en la vista de mapa,在地图视图中切换此频段标尺,맵 뷰에서 이 대역 눈금자를 토글합니다,Przełącz tę przepustkę w widoku mapy,Переключить эту шкалу в режиме карты,在地图视图中切换此频段标尺,Alternar réguas desta banda na visualização de mapa,在地图视图中切换此频段标尺 -CommNext/UI/TooltipNoPowerCurrentVessel,Text,,Active vessel has no power,Il veicolo attivo non ha alimentazione,Der aktive Schiff hat keine Stromversorgung,Le vaisseau actif n'a pas d'alimentation,La nave activa no tiene energía,活动船只没有电源,활성 선박에 전원이 없습니다,Aktywny statek nie ma zasilania,Активное судно не имеет питания,活动船只没有电源,A nave ativa não tem energia,活动船只没有电源 \ No newline at end of file +CommNext/UI/TooltipNoPowerCurrentVessel,Text,,Active vessel has no power,Il veicolo attivo non ha alimentazione,Der aktive Schiff hat keine Stromversorgung,Le vaisseau actif n'a pas d'alimentation,La nave activa no tiene energía,活动船只没有电源,활성 선박에 전원이 없습니다,Aktywny statek nie ma zasilania,Активное судно не имеет питания,活动船只没有电源,A nave ativa não tem energia,活动船只没有电源 +CommNext/UI/RulersDisplayModeNone,Text,Rulers display mode: None,Disabled,Disabilitato,Deaktiviert,Désactivé,Desactivado,禁用,비활성화,Dezaktywowane,Отключено,禁用,Desativado,禁用 +CommNext/UI/RulersDisplayModeRelays,Text,Rulers display mode: Relays,Only relays,Solo ripetitori,Nur Relais,Seulement les relais,Solo relés,只有中继,릴레이만,Tylko przekaźniki,Только реле,只有中继,Apenas relés,只有中继 +CommNext/UI/RulersDisplayModeAll,Text,Rulers display mode: All,All,Tutti,Alle,Tous,Todos,全部,모두,Wszystkie,Все,全部,Todos,全部 \ No newline at end of file diff --git a/src/CommNext.Unity/CommNext.Unity/Assets/Images/RulerAllIcon.png b/src/CommNext.Unity/CommNext.Unity/Assets/Images/RulerAllIcon.png new file mode 100644 index 0000000..c3f196e Binary files /dev/null and b/src/CommNext.Unity/CommNext.Unity/Assets/Images/RulerAllIcon.png differ diff --git a/src/CommNext.Unity/CommNext.Unity/Assets/Images/RulerAllIcon.png.meta b/src/CommNext.Unity/CommNext.Unity/Assets/Images/RulerAllIcon.png.meta new file mode 100644 index 0000000..0d8f10b --- /dev/null +++ b/src/CommNext.Unity/CommNext.Unity/Assets/Images/RulerAllIcon.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: f51980a60b7a2da4a81bf5c1ac0f1d5b +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 0 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/CommNext.Unity/CommNext.Unity/Assets/UI/CommNextMapToolbar.uxml b/src/CommNext.Unity/CommNext.Unity/Assets/UI/CommNextMapToolbar.uxml index 0596fc1..b175d58 100644 --- a/src/CommNext.Unity/CommNext.Unity/Assets/UI/CommNextMapToolbar.uxml +++ b/src/CommNext.Unity/CommNext.Unity/Assets/UI/CommNextMapToolbar.uxml @@ -3,7 +3,7 @@ - + diff --git a/src/CommNext.Unity/CommNext.Unity/Assets/UI/CommNextStyles.uss b/src/CommNext.Unity/CommNext.Unity/Assets/UI/CommNextStyles.uss index 9a8b7f4..83826e1 100644 --- a/src/CommNext.Unity/CommNext.Unity/Assets/UI/CommNextStyles.uss +++ b/src/CommNext.Unity/CommNext.Unity/Assets/UI/CommNextStyles.uss @@ -37,6 +37,10 @@ --band-k: rgb(112, 100, 255); --band-ka: rgb(214, 38, 235); --band-v: rgb(43, 217, 148); + --toolbar-off: rgb(213, 222, 255); + --toolbar-off-hover: rgb(128, 134, 153); + --toolbar-on: rgb(0, 255, 102); + --toolbar-on-hover: rgb(17, 152, 73); } #close-button { @@ -100,51 +104,78 @@ width: 24px; border-width: 0; background-color: var(--black); - -unity-background-image-tint-color: rgb(213, 222, 255); + -unity-background-image-tint-color: var(--toolbar-off); transition: all 0.2s; } .toolbar__icon.toolbar__icon--comm-none { - -unity-background-image-tint-color: rgb(213, 222, 255); + -unity-background-image-tint-color: var(--toolbar-off); background-image: url('project://database/Assets/Images/CommIcon.png?fileID=21300000&guid=44fde49e8d63c944d8546059ff442eda&type=3#CommIcon'); } .toolbar__icon.toolbar__icon--comm-lines { - -unity-background-image-tint-color: rgb(0, 255, 102); + -unity-background-image-tint-color: var(--toolbar-on); background-image: url('project://database/Assets/Images/CommIcon.png?fileID=21300000&guid=44fde49e8d63c944d8546059ff442eda&type=3#CommIcon'); } .toolbar__icon.toolbar__icon--comm-active { - -unity-background-image-tint-color: rgb(0, 255, 102); + -unity-background-image-tint-color: var(--toolbar-on); background-image: url('project://database/Assets/Images/CommActiveIcon.png?fileID=21300000&guid=65ee5addc1a687148add89fab0312eee&type=3#CommActiveIcon'); } .toolbar__icon.toolbar__icon--comm-none:hover { - -unity-background-image-tint-color: rgb(128, 134, 153); + -unity-background-image-tint-color: var(--toolbar-off-hover); } .toolbar__icon.toolbar__icon--comm-lines:hover { - -unity-background-image-tint-color: rgb(17, 152, 73); + -unity-background-image-tint-color: var(--toolbar-on-hover); } .toolbar__icon.toolbar__icon--comm-active:hover { - -unity-background-image-tint-color: rgb(17, 152, 73); + -unity-background-image-tint-color: var(--toolbar-on-hover); } .toolbar__icon { - -unity-background-image-tint-color: rgb(213, 222, 255); + -unity-background-image-tint-color: var(--toolbar-off); } .toolbar__icon:hover { - -unity-background-image-tint-color: rgb(128, 134, 153); + -unity-background-image-tint-color: var(--toolbar-off-hover); } .toolbar__icon.toggled { - -unity-background-image-tint-color: rgb(0, 255, 102); + -unity-background-image-tint-color: var(--toolbar-on); } .toolbar__icon.toggled:hover { - -unity-background-image-tint-color: rgb(17, 152, 73); + -unity-background-image-tint-color: var(--toolbar-on-hover); +} + +.toolbar__icon--rulers-none { + -unity-background-image-tint-color: var(--toolbar-off); + background-image: url('project://database/Assets/Images/RulerIcon.png?fileID=21300000&guid=3b9ca3009b51d014a9e7fa9131114060&type=3#RulerIcon'); +} + +.toolbar__icon--rulers-relays { + -unity-background-image-tint-color: var(--toolbar-on); + background-image: url('project://database/Assets/Images/RulerIcon.png?fileID=21300000&guid=3b9ca3009b51d014a9e7fa9131114060&type=3#RulerIcon'); +} + +.toolbar__icon--rulers-all { + -unity-background-image-tint-color: var(--toolbar-on); + background-image: url('project://database/Assets/Images/RulerAllIcon.png?fileID=21300000&guid=f51980a60b7a2da4a81bf5c1ac0f1d5b&type=3#RulerAllIcon'); +} + +.toolbar__icon--rulers-none:hover { + -unity-background-image-tint-color: var(--toolbar-off-hover); +} + +.toolbar__icon--rulers-relays:hover { + -unity-background-image-tint-color: var(--toolbar-on-hover); +} + +.toolbar__icon--rulers-all:hover { + -unity-background-image-tint-color: var(--toolbar-on-hover); } .app-comm-icon { diff --git a/src/CommNext/Data/SaveData.cs b/src/CommNext/Data/SaveData.cs index 1d6ddb1..67c8a64 100644 --- a/src/CommNext/Data/SaveData.cs +++ b/src/CommNext/Data/SaveData.cs @@ -7,5 +7,5 @@ public class SaveData { public Vector3? MapToolbarPosition; public ConnectionsDisplayMode? ConnectionsDisplayMode; - public bool? ShowRulers; + public RulersDisplayMode? RulersDisplayMode; } \ No newline at end of file diff --git a/src/CommNext/Managers/SaveManager.cs b/src/CommNext/Managers/SaveManager.cs index eb284a5..6d964ed 100644 --- a/src/CommNext/Managers/SaveManager.cs +++ b/src/CommNext/Managers/SaveManager.cs @@ -26,7 +26,7 @@ private static void SaveGameData(SaveData dataToSave) dataToSave.MapToolbarPosition = MainUIManager.Instance.MapToolbarWindow!.Position; dataToSave.ConnectionsDisplayMode = ConnectionsRenderer.Instance.ConnectionsDisplayMode; - dataToSave.ShowRulers = ConnectionsRenderer.Instance.IsRulersEnabled; + dataToSave.RulersDisplayMode = ConnectionsRenderer.Instance.RulersDisplayMode; } private void LoadGameData(SaveData dataToLoad) @@ -45,8 +45,8 @@ public void LoadDataIntoUI() if (_loadedSaveData.MapToolbarPosition.HasValue && _loadedSaveData.MapToolbarPosition != Vector3.zero) MainUIManager.Instance.MapToolbarWindow.Position = _loadedSaveData.MapToolbarPosition.Value; - if (_loadedSaveData.ShowRulers != null) - ConnectionsRenderer.Instance.IsRulersEnabled = _loadedSaveData.ShowRulers.Value; + if (_loadedSaveData.RulersDisplayMode != null) + ConnectionsRenderer.Instance.RulersDisplayMode = _loadedSaveData.RulersDisplayMode.Value; if (_loadedSaveData.ConnectionsDisplayMode != null) ConnectionsRenderer.Instance.ConnectionsDisplayMode = _loadedSaveData.ConnectionsDisplayMode.Value; diff --git a/src/CommNext/Rendering/ConnectionsRenderer.cs b/src/CommNext/Rendering/ConnectionsRenderer.cs index e6a4cc9..718408b 100644 --- a/src/CommNext/Rendering/ConnectionsRenderer.cs +++ b/src/CommNext/Rendering/ConnectionsRenderer.cs @@ -42,9 +42,10 @@ public class ConnectionsRenderer : MonoBehaviour private IEnumerator? _updateTask; private ConnectionsDisplayMode _connectionsDisplayMode = ConnectionsDisplayMode.Lines; - private bool _isRulersEnabled = true; + private RulersDisplayMode _rulersDisplayMode = RulersDisplayMode.Relays; public bool IsConnectionsEnabled => _connectionsDisplayMode != ConnectionsDisplayMode.None; + public bool IsRulersEnabled => _rulersDisplayMode != RulersDisplayMode.None; private int? _selectedBandIndex; private Color? _selectedBandColor; @@ -60,12 +61,12 @@ public int? SelectedBandIndex if (_selectedBandIndex.HasValue) { _selectedBandColor = NetworkBands.Instance.AllBands[_selectedBandIndex.Value].Color; - IsRulersEnabled = true; + RulersDisplayMode = RulersDisplayMode.Relays; } else { _selectedBandColor = null; - IsRulersEnabled = false; + RulersDisplayMode = RulersDisplayMode.None; } } } @@ -89,13 +90,13 @@ public ConnectionsDisplayMode ConnectionsDisplayMode /// Rulers are the spheres that show the range of the nodes /// (vessels, ground stations, etc). /// - public bool IsRulersEnabled + public RulersDisplayMode RulersDisplayMode { - get => _isRulersEnabled; + get => _rulersDisplayMode; set { - Logger.LogInfo("Setting IsRulersEnabled to " + value); - _isRulersEnabled = value; + Logger.LogInfo("Setting RulersDisplayMode " + value); + _rulersDisplayMode = value; ClearRulers(); ToggleUpdateTaskIfNeeded(); } @@ -123,7 +124,7 @@ private void ToggleUpdateTaskIfNeeded() // We want to trigger them right away so that UI is updated // right after the UI click. // if (IsConnectionsEnabled || _isRulersEnabled) UpdateRenderings(); - var shouldBeRunning = IsConnectionsEnabled || _isRulersEnabled || ReportVessel != null; + var shouldBeRunning = IsConnectionsEnabled || IsRulersEnabled || ReportVessel != null; switch (shouldBeRunning) { @@ -197,7 +198,7 @@ private void UpdateRenderings() { if (IsConnectionsEnabled) UpdateConnections(nodes!, prevIndexes, networkJobConnections.Value); if (ReportVessel != null) UpdateReportConnections(); - if (_isRulersEnabled) UpdateRulers(nodes!, prevIndexes); + if (IsRulersEnabled) UpdateRulers(nodes!, prevIndexes); } catch (Exception e) { @@ -348,9 +349,9 @@ private void UpdateRulers(List nodes, int[] prevIndexes) var item = GetMapItem(node); if (item == null) continue; - // We want to show only relays as rulers. + // We want to show only relays as rulers if the mode is set to relays. var networkNode = NetworkManager.Instance.Nodes.GetValueOrDefault(node.Owner); - if (networkNode is not { IsRelay: true }) continue; + if (networkNode is not { IsRelay: true } && _rulersDisplayMode == RulersDisplayMode.Relays) continue; if (_selectedBandIndex.HasValue && networkNode.BandRanges[_selectedBandIndex.Value] <= 0) continue; diff --git a/src/CommNext/Rendering/RulersDisplayMode.cs b/src/CommNext/Rendering/RulersDisplayMode.cs new file mode 100644 index 0000000..ecedec6 --- /dev/null +++ b/src/CommNext/Rendering/RulersDisplayMode.cs @@ -0,0 +1,33 @@ +namespace CommNext.Rendering; + +public enum RulersDisplayMode +{ + None, + Relays, + All // Relay + Antennas +} + +public static class RulersDisplayModeExtensions +{ + public static bool IsEnabled(this RulersDisplayMode mode) + { + return mode != RulersDisplayMode.None; + } + + /// + /// Toggles between the three display modes. + /// + /// + /// + /// + public static RulersDisplayMode Next(this RulersDisplayMode mode) + { + return mode switch + { + RulersDisplayMode.None => RulersDisplayMode.Relays, + RulersDisplayMode.Relays => RulersDisplayMode.All, + RulersDisplayMode.All => RulersDisplayMode.None, + _ => throw new ArgumentOutOfRangeException(nameof(mode), mode, null) + }; + } +} \ No newline at end of file diff --git a/src/CommNext/UI/LocalizedStrings.cs b/src/CommNext/UI/LocalizedStrings.cs index ffdd860..e42e78a 100644 --- a/src/CommNext/UI/LocalizedStrings.cs +++ b/src/CommNext/UI/LocalizedStrings.cs @@ -39,6 +39,9 @@ public static class LocalizedStrings public static LocalizedString ModulatorKindOmniBand = "PartModules/NextModulator/KindOmniBand"; public static LocalizedString TooltipActivateBandRulers = "CommNext/UI/TooltipActivateBandRulers"; public static LocalizedString TooltipNoPowerCurrentVessel = "CommNext/UI/TooltipNoPowerCurrentVessel"; + public static LocalizedString RulersDisplayModeNone = "CommNext/UI/RulersDisplayModeNone"; + public static LocalizedString RulersDisplayModeRelays = "CommNext/UI/RulersDisplayModeRelays"; + public static LocalizedString RulersDisplayModeAll = "CommNext/UI/RulersDisplayModeAll"; // Only keys public const string DistanceLabelKey = "CommNext/UI/DistanceLabel"; diff --git a/src/CommNext/UI/MapToolbarWindowController.cs b/src/CommNext/UI/MapToolbarWindowController.cs index 5eb5fdf..45fa863 100644 --- a/src/CommNext/UI/MapToolbarWindowController.cs +++ b/src/CommNext/UI/MapToolbarWindowController.cs @@ -41,6 +41,7 @@ public class MapToolbarWindowController : MonoBehaviour private Button _linesButton = null!; private TooltipManipulator _linesTooltip = null!; private Button _rulersButton = null!; + private TooltipManipulator _rulersTooltip = null!; private Button _vesselReportButton = null!; public VisualElement Root => _root; @@ -75,13 +76,15 @@ public bool IsWindowOpen public void UpdateButtonState() { + // 1. Connections // TODO Move the _state_ inside a separate object like `ConnectionsRenderState`, which is not tied to MonoBehaviour lifecycle. - var currentDisplayMode = ConnectionsRenderer.Instance?.ConnectionsDisplayMode ?? ConnectionsDisplayMode.None; + var connectionsDisplayMode = + ConnectionsRenderer.Instance?.ConnectionsDisplayMode ?? ConnectionsDisplayMode.None; _linesButton.RemoveFromClassList("toolbar__icon--comm-none"); _linesButton.RemoveFromClassList("toolbar__icon--comm-lines"); _linesButton.RemoveFromClassList("toolbar__icon--comm-active"); - var selectedClassName = currentDisplayMode switch + var selectedClassName = connectionsDisplayMode switch { ConnectionsDisplayMode.None => "toolbar__icon--comm-none", ConnectionsDisplayMode.Lines => "toolbar__icon--comm-lines", @@ -90,7 +93,7 @@ public void UpdateButtonState() }; _linesButton.AddToClassList(selectedClassName); - _linesTooltip.TooltipText = currentDisplayMode switch + _linesTooltip.TooltipText = connectionsDisplayMode switch { ConnectionsDisplayMode.None => LocalizedStrings.ConnectionsDisplayModeNone, ConnectionsDisplayMode.Lines => LocalizedStrings.ConnectionsDisplayModeLines, @@ -98,9 +101,30 @@ public void UpdateButtonState() _ => "N/A" }; - if (ConnectionsRenderer.Instance?.IsRulersEnabled == true) _rulersButton.AddToClassList("toggled"); - else _rulersButton.RemoveFromClassList("toggled"); + // 2. Rulers + var rulersDisplayMode = ConnectionsRenderer.Instance?.RulersDisplayMode ?? RulersDisplayMode.None; + _rulersButton.RemoveFromClassList("toolbar__icon--rulers-none"); + _rulersButton.RemoveFromClassList("toolbar__icon--rulers-relays"); + _rulersButton.RemoveFromClassList("toolbar__icon--rulers-all"); + var rulersSelectedClassName = rulersDisplayMode switch + { + RulersDisplayMode.None => "toolbar__icon--rulers-none", + RulersDisplayMode.Relays => "toolbar__icon--rulers-relays", + RulersDisplayMode.All => "toolbar__icon--rulers-all", + _ => "toolbar__icon--rulers-none" + }; + _rulersButton.AddToClassList(rulersSelectedClassName); + + _rulersTooltip.TooltipText = rulersDisplayMode switch + { + RulersDisplayMode.None => LocalizedStrings.RulersDisplayModeNone, + RulersDisplayMode.Relays => LocalizedStrings.RulersDisplayModeRelays, + RulersDisplayMode.All => LocalizedStrings.RulersDisplayModeAll, + _ => "N/A" + }; + + // 3. Vessel report // ReSharper disable once Unity.NoNullPropagation if (MainUIManager.Instance.VesselReportWindow?.IsWindowOpen == true) _vesselReportButton.AddToClassList("toggled"); @@ -136,10 +160,11 @@ private void OnEnable() }; _rulersButton = _root.Q